【问题标题】:How do I use Index & Match to reference a separate sheet?如何使用索引和匹配来引用单独的工作表?
【发布时间】:2020-03-07 16:45:49
【问题描述】:

背景:

我有以下测试代码正在工作,其中 H 列等于 B 列与 D 列中的值

Range("H2:H17") = "=INDEX(D2:D17,MATCH(B2:B17,B2:B17,0))"

问题:

如何在代码中使用它来引用名为“temp”的单独工作表来执行相同的操作。这个想法是每次代码寻找“目标”时 一个索引和匹配检查列 B 等于 D 列中的内容,所以如果值 A 通过,那么它将成为 Test1?

我尝试了以下代码,但目标未更新为任何值。

将目标变暗

With Application
    Target = .Index(Sheets("Temp").Range("D2:D17"), .Match(Sheets("Temp").Range("B2:B17"), Sheets("Temp").Range("B2:B17"), 0))
End With

调试显示以下目标

感谢任何帮助!

【问题讨论】:

  • Application.WorksheetFunction.Match.
  • MatchWorksheetFunction 就像Index 一样,需要以同样的方式进行限定; Sheets 正在从当前处于活动状态的任何工作簿中提取工作表(包括 Chart 工作表)。更喜欢将您正在使用的工作表拉到Worksheet 变量中,这样您就不需要每次需要从该工作表中获取一个范围时都重新获取对象引用(并将它们从Worksheets 集合中拉出;- )
  • @BigBen 情节扭曲:早期绑定版本不采用数组(/范围)作为查找值!

标签: excel vba indexing match


【解决方案1】:

MatchWorksheetFunction 接口的成员;您需要一个 WorksheetFunction 对象实例来调用它 - With 块可以为您保存该对象引用,因此您只需键入一次:

With Application.WorksheetFunction
    Target = .Index(sheet.Range("D2:D17"), .Match(sheet.Range("B2:B17"), sheet.Range("B2:B17"), 0))
End With

其中sheet 将是要使用的Worksheet 变量,或者是您的过程的Worksheet 参数。

Match 的第一个参数看起来有些问题:lookup_value 想要成为一个单一的值:早期绑定的 Application.WorksheetFunction.Match 方法对于它愿意很好地配合的 Variant 子类型相当挑剔, 并且会按原样抛出 type mismatch 错误。

后期绑定版本(注意拼写错误!Option Explicit 无法将您从后期绑定代码中拯救出来!)使用范围/数组查找值参数按预期工作,并生成 Variant() 数组:

With Application
    Target = .Index(sheet.Range("D2:D17"), .Match(sheet.Range("B2:B17"), sheet.Range("B2:B17"), 0))
End With

确保TargetVariant,因为如果查找失败,这个后期绑定Match 将产生Variant/Error 值(早期绑定版本会引发运行时错误) - 而且如果您尝试分配给除Variant 之外的任何内容,则会出现类型不匹配错误。

【讨论】:

  • 感谢马修和本!我遵循了建议并得到了您提到的确切错误“运行时错误'13'类型不匹配”,所以问题可能与第一次说的有关,因为这是引用数组的“temp”?
  • 您使用的是后期绑定版本?
  • 我使用的是 Excel 15.0,它看起来像是 Office 2013 的一部分
  • 这不是问题所在。我给你两个版本的Match 函数。一个是早绑定(即Application.WorksheetFunction.Match),另一个是晚绑定(即Application.Match)。由于此答案中解释的原因,您需要使用后期绑定版本。
  • 切换到后期绑定版本,代码现在可以运行了,但是值是空白的。我确保在代码顶部将目标设置为变体,对于测试集 Target =“A”,但是在运行索引匹配后,值显示为空白,上面更新了注释。为了适应数字字母组合中的前零,实际输入数据是字符串是否重要?我正在运行的测试只使用一个 7 位数字。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2020-11-22
相关资源
最近更新 更多