1

我有几张纸的 excel 文件“file1”。我只对一个表感兴趣,“sheet1”有很多列,我只对该表中具有特定名称的几列感兴趣(excel表的第一行包含变量的名称。)我想找到匹配(等于)一组特定字符串(例如 10 个变量名)的列,并将它们与这些列中的所有行一起复制,然后将它们粘贴到一个新的 Excel 文件“file2”中。我也想用脚本自动生成第二个excel文件(这个第二个excel文件只有一张。)

我开始为此编写一些 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
4

2 回答 2

1

有时,复制所有内容并删除您不想要的内容会更容易。

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
于 2017-05-23T23:52:54.050 回答
0

我可能会使用 ODBC 到 Excel 和 LINQPad,但添加您尚未使用的外部工具似乎有点过头了。使用工作簿查询怎么样?

于 2017-05-23T23:36:17.107 回答