【问题标题】:How to get the columns of an excel sheet that have a specific string, and write them in a new excel file如何获取具有特定字符串的excel工作表的列,并将它们写入新的excel文件
【发布时间】:2017-05-24 10:40:20
【问题描述】:

我有几个表格的 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

【问题讨论】:

  • 如果您实际发布您尝试过的脚本并寻求帮助,您可能会得到更好的答案 - 现在您的问题只是“为我做这个”,这并没有很好地解决。
  • 感谢您的评论。我添加了我的简单代码。

标签: excel excel-automation vba


【解决方案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

【讨论】:

  • 感谢您编写代码。我还没有测试它,但我更喜欢非删除选项。这是一个艰难的改变吗?
  • @Ari 为什么你更喜欢“非删除”选项? (a) 复制整个工作表然后删除除您想要的位之外的所有位和 (b) 仅复制您想要的位之间有什么区别? (除了选项 (b) 通常更难以实施。)
  • @YowE3K 我误解了 Jeeped 的回答。我以为他会删除原始文件。
  • @Jeeped 谢谢。你的代码有点工作。它在“应用程序定义的或对象定义的错误”末尾给出一个错误。它也很慢,在我的工作笔记本电脑上需要 5 分钟(我测试的原始文件有 7900 列和 40 行。)生成了输出文件,但它没有保存。我猜当时保存过程中发生了错误?
  • @ari - (a) 将 .Parent.Save 更改为 .Parent.SaveAs (b) 工作表中是否有要复制的公式,或者只是数据?
【解决方案2】:

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

【讨论】:

  • 您能否解释一下“从工作簿查询”是什么意思?
  • Excel 功能区、数据选项卡、新查询、来自文件、来自工作簿。现在您可以使用 Power Query M 语言(或查询 UI)来编辑查询并调整您想要检索的内容。
猜你喜欢
  • 1970-01-01
  • 2021-08-27
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2018-09-15
相关资源
最近更新 更多