【问题标题】:Using Match and Index function with an array created and populated in VBA将 Match 和 Index 函数与在 VBA 中创建和填充的数组一起使用
【发布时间】:2020-04-09 04:02:27
【问题描述】:

我在 VBA 中创建并定义了一个数组:

A_Array(2,4) As Variant (Option Base 1)

我想将第二列中的数字与特定条件进行匹配,例如,第二列中的哪一行包含数字“1”。找到匹配项后,我想使用第一列中的相应值来创建变量。当我使用索引和匹配函数时,如何指定范围,在这种情况下是 VBA 创建的数组的整个列?

Variable = Worksheet.Function.Index(A_Array, Worksheet.Function.Match(1, **?Second_ Column of A_Array?**,0),**?First Column of A_Array?**)

如何在上面的 Match 函数中指定 A_Array 的第一列,以及如何在 Index 函数中指定 A_Array 的第二列。

提前感谢您的帮助。

【问题讨论】:

  • 只循环数组行​​,匹配时返回第一行。
  • 包含1还是等于1?
  • 您需要切片您的二维数组以提供“a_array 的第二列”。

标签: arrays vba indexing match


【解决方案1】:

只需循环行并测试,使用变体数组会很快。

Dim A_Array(2, 4) As Variant
'fill array

Dim i As Long
For i = LBound(A_Array, 1) To UBound(A_Array, 1)
    If A_Array(i, 2) = 1 Then
        variable = A_Array(i, 1)
        Exit For
    End If
Next i

【讨论】:

    【解决方案2】:

    如果你想找到一个等于1的数组元素,这是不需要循环的切片方法。

    大部分代码是填充一个数组并将其显示在工作表上以说明结果,因此您可能不需要任何这些。

    Sub x()
    
    Dim A_Array(1 To 4, 1 To 2) As Variant, i As Long, variable As Variant, v As Variant
    
    For i = LBound(A_Array, 1) To UBound(A_Array, 1) 'just populating array with any old stuff so you won't need
        A_Array(i, 1) = i * 2
        A_Array(i, 2) = i * 3
    Next i
    
    A_Array(2, 2) = 1   'make sure something in 2nd column is 1
    
    Range("A1").Resize(4, 2).Value = A_Array
    
    v = Application.Match(1, Application.Index(A_Array, , 2), 0) 'returns position of 1 in second column (or error if no match)
    
    if isnumeric(v) then variable = A_Array(v, 1) 'find corresponding element in 1st column
    Range("D1").Value = variable
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 2017-03-24
      相关资源
      最近更新 更多