首页 > 解决方案 > 如何匹配二维数组的第一列

问题描述

有没有办法在这个匹配查找中引用数组 kw30array 的第一列?我读到,如果您将行设置为 0,那么它将仅引用该列,但在尝试此操作后它不起作用。IE。kw30array(0,1) 作为范围。

另外,由于我使用的是数组而不是工作表,因此是否有必要说明“工作表函数”?

谢谢

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

标签: excelvba

解决方案


Application.Match范围更快

  • 您必须使用Application.Match才能使用IsErroror 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
   Dim fcrg As Range: Set fcrg = kw30rng.Columns(1) ' First Column Range
   '''
   rIndex = Application.Match(kw90array(i, 1), fcrg, 0)
   

但是,仍然kw30arrayIf语句中使用数组。


推荐阅读