【问题标题】:Excel Macro: cycle through rows, while cycling through sheetsExcel宏:循环浏览行,同时循环浏览工作表
【发布时间】:2012-12-10 23:51:45
【问题描述】:

我有一个包含数百个工作表的工作簿,每个工作表的布局方式相同(即拥有相同的列),但数据行数不同。

我想循环浏览每张工作表中的每一行,如果某一列(“L”列)中的值是特定值(在本例中为字符串),我想将该行复制到新工作表。所以最后我有一个大工作表,其中每一行都存在于较大的工作簿中,在“L”列中具有特定的指定值。

我不想也循环浏览我将结果复制到的工作表;也许我需要从不同的工作簿执行此操作?

提前致谢。

回复:

所以文件和代码在我的办公室,但是:如果这是在 1 个工作表中,我知道有几种方法可以遍历行并返回部分或全部相应字段。我遇到的麻烦是(a)对其进行设置,使其在不同行数的不同工作表中循环,(b)将其返回到新的工作表,而无需重写已经编写的内容。如果有人有使用 ADO 的解决方案,那也将受到欢迎,因为它作为一个整体是一个非常大的工作表。再次感谢,如果我提出大而未指定的问题,我深表歉意。

【问题讨论】:

  • 到目前为止你尝试过什么?代码中是否有任何特定的地方出现问题?
  • +1 @Kevin。是的,请向我们展示您尝试过的代码以及您遇到的问题。我们可以通过这种方式帮助您更轻松...如果您真的不知道。谷歌“Excel VBA 循环遍历工作表”,还可以查看 .Find.AutoFilter 方法。这是一个很好的开始。
  • 如果你不想要,不需要不同的工作簿。在您的骑行过程中,测试和跳过那个“新”工作表会很容易。
  • 所以您打算使用基于ADO 的解决方案。那么你认为你保存为临时表的数据可以有一个公共索引字段吗?因为索引可以极大地优化您的搜索类型。并尽量降低来回工作簿的流量。如果所有可搜索工作表都在同一个字段/列结构中,则将它们转储到您的临时表中,进行搜索。将所有匹配的值转储到新工作表。不要忘记 Excel 中的 VBA Binary Search OUTPERFORMS .Find()。 :)

标签: excel ado vba


【解决方案1】:

由于您的问题是基于 文本 在没有代码的情况下征求意见的,所以我给你我的意见并通过这个答案找到 - 很公平 :)

根据我的cmets,

因此,如果您想在另一本书中搜索data book,那么考虑到这个BUG: Memory leak occurs when you query an open Excel worksheet by using ActiveX Data Objects (ADO)

,这将是一个更好的主意

这样,您将 data book 视为数据库本身并从 Excel 表中查询。 即使这样做,您也可能希望确保您考虑作为数据集的每个可搜索工作表都具有相似的结构。如果您向我们提供了样本数据,那么这比我们在黑暗中不断向目标投掷石块要好得多... ;) 您提到了搜索行。您是否在每张纸上搜索一列的行?如果是这样,您的所有可搜索工作表都包含此列吗?

因此,对于您要搜索/扫描的行,这是 Microsoft 必须说的,非常需要注意:

“要扫描的行数:Excel 不会像关系数据库那样为 ADO 提供有关其包含的数据的详细架构信息因此,驱动程序必须至少扫描几个现有数据的行,以便对每列的数据类型进行有根据的猜测。“要扫描的行”的默认值为八 (8) 行。您可以从一 (1) 中指定一个整数值到十六 (16) 行,或者您可以指定零 (0) 以扫描所有现有行。这可以通过将可选 MaxScanRows= 设置添加到连接字符串,或通过更改 DSN 配置对话框中的 Rows to Scan 设置来完成.

但是,由于 ODBC 驱动程序中的错误,当前指定要扫描的行 (MaxScanRows) 设置无效。换句话说,Excel ODBC 驱动程序(MDAC 2.1 和更高版本)总是扫描指定数据源中的前 8 行以确定每一列的数据类型。 "

此外,如果您的可搜索行具有混合数据类型--> 这会让您处于极大的危险之中。微软也谈到了这方面。

因此,您可以对上述过程采取许多预防措施,但它比VBA Binary Search.Find 更快。但是,如果您不想采用ADO 的方式,那么您可以为我们提供一些您可能想出的设计。也很高兴在这方面做出贡献。 :)

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2020-10-14
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多