Как получить столбцы таблицы Excel, содержащие определенную строку, и записать их в новый файл Excel
У меня есть файл Excel "file1" с несколькими листами. Меня интересует только один лист, "sheet1", который имеет много столбцов, и меня интересуют только несколько столбцов с определенным именем на этом листе (первая строка листа Excel содержит имена переменных.) Я хотел бы найдите столбцы, которые соответствуют (равны) определенному набору строк (например, 10 именам переменных), скопируйте их со всеми строками в этом столбце и вставьте их в новый файл Excel, "file2". Я также хотел бы автоматически сгенерировать 2-й файл Excel с помощью скрипта (у этого 2-го файла Excel будет только 1 лист).
Я начал писать какой-то сценарий VBA для этого (я только выучил некоторые путем небольшого поиска, поэтому я не знаком с VBA), но у меня были некоторые ошибки. Мой первый вопрос: что является лучшим инструментом для решения этой задачи, а затем, как это сделать. Я ценю вашу помощь.
Это мой очень простой код, который работает, когда я знаю номера столбцов и #rows (но оба меняются, и поэтому я хочу работать со строками)
Sub ExtractData()
Filename = "OriginalFile"
Workbooks(Filename).Sheets("sheet2").Range("K1:K206").Copy Range("A1:A206")
Workbooks(Filename).Sheets("sheet2").Range("CF1:CF206").Copy Range("B1:B206")
Workbooks(Filename).Sheets("sheet2").Range("BRG1:BRG206").Copy Range("C1:C206")
Workbooks(Filename).Sheets("sheet2").Range("ESM1:ESN206").Copy Range("D1:E206")
Workbooks(Filename).Sheets("sheet2").Range("EWY1:EWZ206").Copy Range("F1:G206")
End Sub
2 ответа
Иногда проще сделать копию всего и удалить то, что вы не хотите.
Option Explicit
Sub makeCopy()
Dim c As Long, cols As Variant
cols = Array("date", "foo", "bar")
ThisWorkbook.Worksheets("sheet1").Copy
With ActiveWorkbook.Worksheets(1)
For c = .Cells(1, .Columns.Count).End(xlToLeft).Column To 1 Step -1
If IsError(Application.Match(.Cells(1, c).Value2, cols, 0)) Then
.Cells(1, c).EntireColumn.Delete
End If
Next c
.Parent.SaveAs Filename:="newFoo", FileFormat:=xlOpenXMLWorkbook
End With
End Sub
Я бы, вероятно, использовал ODBC для Excel и LINQPad, но добавление внешних инструментов, которые вы еще не используете, кажется излишним. Как насчет использования Query From Workbook?