【问题标题】:Two-column Match with VBA variables与 VBA 变量匹配的两列
【发布时间】:2015-08-22 11:45:30
【问题描述】:

我已经在我的宏中的这行代码停留了一周,并阅读并尝试了多种方法来解决这个问题。

我必须声明我对 VBA 不是很好,所以请耐心等待,我希望能对某些步骤进行象征性的解释。

我想要做的其实很简单,我有一个大约 1000 行的大型数据库,我想尽可能高效地匹配相同行号的两列(有重复项),例如:

第 1 列:詹姆斯、约翰、约翰、詹姆斯、杰布

第 2 栏:史密斯、李、史密斯、威尔斯、布莱克

我想找到带有“John”和“Smith”的行,简单的答案是第 3 行。

但更复杂的是匹配目标是一个变量,例如

dim name1 as string
dim name2 as string
dim r as long
name1 = "John"
name2 = "Smith"
r = application.worksheetfunction.match(name1&name2,.range("A:A")&.range("B:B"),0)

这个函数必须通过宏中的多次迭代来重复。

例如,我尝试使用 for i=1 到 1000 并通过 if 参数单独匹配两列,但据我所知,我无法将行号从循环中取出,即 r = result .row 在循环外变为空。

非常感谢您阅读本文!这个论坛对我现有的代码做出了很大贡献,我非常感谢迄今为止的帮助。

【问题讨论】:

    标签: vba excel match


    【解决方案1】:

    将 Match() 返回的 'r' 的值保存在一个数组中。稍后,使用数组进行进一步操作。

    【讨论】:

      【解决方案2】:

      本周早些时候我不得不做类似的事情,虽然这个问题看起来令人生畏,但阅读这里和其他位置的帖子给出了一个相当简单但容易的解决方案。

      第 1 步: 在电子表格的 C 列中,插入以下公式

      =CONCATENATE(A1&B1)
      

      复制并粘贴到 A 和 B 中的所有单元格。

      第 2 步: 您的 VBA 代码看起来不错。但是,您需要某种方法将结果打印到某个地方。您可以打印到消息框

      =msgbox(r)
      

      或到工作表

      例如。 Range("XX) = r

      这些应该有望解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        • 2021-11-09
        相关资源
        最近更新 更多