如何获取具有特定字符串的 excel sheet 的列,并将它们写入新的 excel 文件
How to get the columns of an excel sheet that have a specific string, and write them in a new excel file
我有 excel 文件 "file1" 和几个 sheet。我只对一个有很多列的 sheet、"sheet1" 感兴趣,而且我只对 sheet 中具有特定名称的少数列感兴趣(excel 的第一行sheet 包含变量的名称。)我想找到匹配(等于)一组特定字符串(例如 10 个变量名称)的列,并将它们与那些列中的所有行一起复制,并将它们粘贴到一个新的 excel 文件中,"file2"。我也想用脚本自动生成第二个 excel 文件(这个第二个 excel 文件只有 1 个 sheet。)
我开始为此编写一些 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
我可能会将 ODBC 用于 Excel 和 LINQPad,但添加您尚未使用的外部工具似乎有些矫枉过正。使用来自工作簿的查询怎么样?
有时复制所有内容并删除不需要的内容会更容易。
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
我有 excel 文件 "file1" 和几个 sheet。我只对一个有很多列的 sheet、"sheet1" 感兴趣,而且我只对 sheet 中具有特定名称的少数列感兴趣(excel 的第一行sheet 包含变量的名称。)我想找到匹配(等于)一组特定字符串(例如 10 个变量名称)的列,并将它们与那些列中的所有行一起复制,并将它们粘贴到一个新的 excel 文件中,"file2"。我也想用脚本自动生成第二个 excel 文件(这个第二个 excel 文件只有 1 个 sheet。)
我开始为此编写一些 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
我可能会将 ODBC 用于 Excel 和 LINQPad,但添加您尚未使用的外部工具似乎有些矫枉过正。使用来自工作簿的查询怎么样?
有时复制所有内容并删除不需要的内容会更容易。
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