Excel - извличане на данни от определени колони
Проблем
Имам няколко колони с данни, които изглеждат така:
data1 ... data2 ... data3 val ....... val .......... val val ....... val .......... val ....... val
(data1-3 са само имена на данните в колоните)
Искам да го преобразувам повече или по-малко автоматично в .csv-файл, модифициран по тези линии:
(data3) (data1) (data2) val ........ - val ....... val val ........ - val ....... val val .. ...... val ....... val val ........ - val ....... val
Заглавките на колони се поставят вътре (), защото не трябва да се показват в .csv-файла. Редът на data1-3 е случаен в моя пример, трябва да мога да използвам различен ред. Знам как да форматирам клетките, за да променят стойностите в негативи.
Очаквам да е нещо като формула, която извлича данни от именувана колона във файл; клетките в последната колона ще изглеждат като '= [path / sourcefile.xls] sheetname! column-values: "data2"'. Това може да е далеч и дори не е възможно в Excel и ако не е, бих искал да знам.
Също така sourcefile ще съдържа колони, които няма да бъдат използвани в csv-файла. Следователно процесът трябва да идентифицира посочените колони в определен файл, да ги копира и пренареди и след това да ги постави в .csv.
Някакви идеи как да направите това?
Решение
Кодът по-долу предполага
- 1. Данните са в лист, наречен Sheet1
- 2. Могат да бъдат създадени временни имена на листове myTempSheet
- 3. Името на CSV файла, което да се запази в tempCSV.csv
- 4. Не се изисква празна колона
Да използвам
След поставяне на кода изпълнете макроса. Ще ви попита как искате да се показва колоната в CSV. Така че, ако първата колона, която искате, е D, правилният отговор е 4. След като приключите с информирането как колоните ще се появят, просто натиснете ОК без никаква стойност.
Код:
Sub createFile () Dim numOfCol Като целочислено Dim colNum As Integer Dim myTempSheet As String Dim dataSheet As String Dim colValue As Variant Dim ColIndex () Като целочислено Dim cvsName As String ThisWorkbook. TempCSV "Листове (dataSheet) .Select numOfCol = Клетки (1, Columns.Count) .End (xlToLeft) .Колона ReDim ColIndex (numOfCol) За colNum = 1 За numOfCol colValue = InputBox (" Коя колона трябва да е в позиция "& colNum & "в CVS файла", "Позиция на колоната") Ако colValue = "" Тогава излезете за друго ColIndex (colNum) = colValue Край Ако следващата грешка възобновите следващите листове (myTempSheet). Изтриване на грешка GoTo 0 Sheets.Add ActiveSheet. Име = myTempSheet За colNum = 1 За numOfCol Ако ColIndex (colNum)> 0 След това листове (dataSheet) .Изберете колони (ColIndex (colNum)) .Изберете селекция.Копиране листове (myTempSheet) .Изберете колони (colNum) .Изберете ActiveSheet.PasteSpecial. xlValue Else Exit За края Ако следващите листове (myTempSheet) .Select numOfCol = Cells (1, Columns.Count) .End (xlToLe ft) .Column За colNum = 1 За numOfCol Ако клетките (1, colNum) "" Тогава клетки (1, colNum) = "(" & Клетки (1, colNum) & ")" Край Ако Следва ActiveWorkbook.SaveAs _ Име на файл: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = Подпрозорец
Забележка
Благодарение на rizvisa1 за този съвет на форума.