excel - 如何使用索引和匹配来引用单独的工作表?
问题描述
背景:
我有以下测试代码正在工作,其中 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
调试显示以下目标
任何帮助表示赞赏!
解决方案
Match
是WorksheetFunction
接口的成员;您需要一个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
后期绑定的版本(注意拼写错误!Option Explicit
不能让你免于后期绑定的代码!)使用范围/数组查找值参数按预期工作,并产生一个Variant()
数组:
With Application
Target = .Index(sheet.Range("D2:D17"), .Match(sheet.Range("B2:B17"), sheet.Range("B2:B17"), 0))
End With
确保Target
是 a Variant
,因为如果查找失败,这个后期绑定Match
将产生一个Variant/Error
值(早期绑定版本会引发运行时错误) -如果您尝试分配给除一个Variant
。
推荐阅读
- java - 带有 Angular 和 Spring Boot 的 IntelliJ IDEA 项目
- java - Hortonworks Schema Registry + Nifi + Java:反序列化 Nifi 记录
- rust - 如何在代数中平均两个点?
- javascript - 如何在 swiper js 中缩放活动滑块
- java - 如何在 bukkit 中存储变量的变量?
- syntax - Scheme/“The Seasoned Schemer”:关于“try”函数定义语法的问题
- jenkins-pipeline - jenkins 控制台中的 aws sam cli 彩色输出
- eclipse - 安装了 JavaFX 但不能在 Eclipse 上使用
- c# - SqlFunctions.StringConvert() 无法正常工作
- php - 计数订单 Laravel