【问题标题】:VBA Count occurrence of an element in a multi-dimensional array, how?VBA Count 在多维数组中出现一个元素,如何?
【发布时间】:2018-06-30 09:15:31
【问题描述】:

我在vba中定义了一个使用range的多维数组,例如

Dim Arr() as Variant 
Arr = Range("A1:F5")

这导致了一个 5x6 数组 Arr(1,1) 到 Arr(5,6)

我想计算一个字符串的出现次数,仅在 Arr(5)(即第 5 行)中说“ABC”。

以下代码可以在所有数组中找到“ABC”的计数

For Each x in Arr
  if x = "ABC" then Cnt = Cnt + 1
Next

但是如果只想计算维度5,Arr(5)会报错。

【问题讨论】:

  • Arr 是 Arr(1 到 5、1 到 6)。你说的是哪个5

标签: arrays vba excel


【解决方案1】:
Sub FindABC()
    Dim Arr(), cnt, x
    Const ROW_NUM = 5
    Arr = Range("A1:F5")
    For x = 1 To UBound(Arr, 2)
        cnt = cnt + IIf(Arr(ROW_NUM, x) = "ABC", 1, 0)
    Next
    MsgBox cnt
End Sub

【讨论】:

    【解决方案2】:

    使用索引从第二排中剥离最后“行”。拆分 Joined 结果将返回区分大小写的 COUNTIF 结果。

    Dim Arr() As Variant, tmp As String, d As String, cs As Boolean
    
    Arr = Range("A1:F5").Value2
    
    d = ChrW(8203)
    cs = False
    
    tmp = d & Join(Application.Index(Arr, 5, 0), d) & d
    
    If cs Then
        Debug.Print UBound(Split(tmp, "ABC"))
    Else
        Debug.Print UBound(Split(LCase(tmp), LCase("ABC")))
    End If
    

    通过将连接的数组和条件都转换为普通大小写,可以返回不区分大小写的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 2019-09-30
      相关资源
      最近更新 更多