有没有办法在这个匹配查找中引用数组 kw30array 的第一列?我读到如果你将行设置为 0 那么它只会引用该列但是在尝试之后它不起作用。 IE。 kw30array(0,1) 作为范围。
此外,由于我使用的是数组而不是工作表,是否有必要声明“worksheetfunction”?
谢谢
For i = 2 To kw90rowcount
j = Application.WorksheetFunction.Match(kw90array(i, 1), kw30array, 0)
If IsError(j) Then
kw90array(i, 32) = "-"
kw90array(i, 33) = "-"
kw90array(i, 34) = "-"
kw90array(i, 37) = "-"
kw90array(i, 38) = "-"
Else:
kw90array(i, 32) = kw30array(j, 10)
kw90array(i, 33) = kw30array(j, 12)
kw90array(i, 34) = kw30array(j, 14)
kw90array(i, 37) = kw30array(j, 11)
kw90array(i, 38) = kw30array(j, 17)
End If
Next i
最佳答案
Application.Match
使用范围更快
- 您必须使用
Application.Match
才能使用IsError
或IsNumeric
。 - 如果
Application.WorksheetFunction.Match
“找不到匹配项”,将发生运行时错误。处理这个比较复杂,所以我永远放弃了它。 - 这是处理您的问题的一种方法:
Dim kw30first As Variant: kw30first = Application.Index(kw30array, 0, 1)
Dim rIndex As Variant
Dim i As Long
For i = 2 To kw90rowcount
rIndex = Application.Match(kw90array(i, 1), kw30first, 0)
If IsNumeric(rIndex) Then
kw90array(i, 32) = kw30array(rIndex, 10)
kw90array(i, 33) = kw30array(rIndex, 12)
kw90array(i, 34) = kw30array(rIndex, 14)
kw90array(i, 37) = kw30array(rIndex, 11)
kw90array(i, 38) = kw30array(rIndex, 17)
Else
kw90array(i, 32) = "-"
kw90array(i, 33) = "-"
kw90array(i, 34) = "-"
kw90array(i, 37) = "-"
kw90array(i, 38) = "-"
End If
Next i
- 几天前I learned from Tim Williams
Application.Match
在数组上比在范围上慢大约 10 倍。不久之后我证明了这一点。所以你应该考虑做这样的事情:
Dim fcrg As Range: Set fcrg = kw30rng.Columns(1) ' First Column Range
'''
rIndex = Application.Match(kw90array(i, 1), fcrg, 0)
但仍然在 If
语句中使用数组 kw30array
。
关于excel - 如何匹配二维数组的第一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68329954/