excel - 如何匹配二维数组的第一列

标签 excel vba

有没有办法在这个匹配查找中引用数组 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 才能使用 IsErrorIsNumeric
  • 如果 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/

相关文章:

vba - 从 .xls 文件获取 "absolute path to the workbook"

excel - 将值完全按照可见值粘贴到 Excel 中

vba - 如何使用单元格的内容作为我的代码的输入?

excel - 将两列中的日期与匹配条件进行比较

Excel 匹配,索引 VLOOKUP 多个条件

excel - 如何根据日期获取列的平均值

sql-server - 带有 PowerShell 脚本的 SSIS 刷新 Excel 连接?

excel - 自动填充动态数据范围内的增量数

vba - 将大量文本转储到数组中的更快方法

vba - 如何从Excel单元格调用VBA函数?