如何使用 VBA 计算单元格中字符串的出现次数

如何使用 VBA 计算单元格中字符串的出现次数
Sub Test()    
    Dim countMe As Integer    
    countMe = Sheets("Data").Range("B1").Formula = "=LEN(SUBSTITUTE(B1,""|"",""""))"
    Sheets("Data").Range("C1").Value = countMe    
End Sub

这段代码的逻辑有什么问题?
C1 的值应该是 1,但实际是 0。在单元格 B1 中,我有Test|Test

答案1

Sub Test()

Dim countMe As Integer

  countMe = LEN(SUBSTITUTE(B1,""|"",""""))
  Sheets("Data").Range("C1").Value = countMe

End Sub

C1 应等于 8

答案2

countMe 行不能有两个等号,否则您实际上是在询问 Excel B1 中的公式是否等于“=LEN(SUBSTITUTE(B1,""|"",""""))”,但事实并非如此,因此它返回零。您可以通过将 countMe 的数据类型更改为 Variant 来查看这一点,它将默认为布尔值,您将得到 FALSE 而不是零。

这就像说:

countMe = 1 = 0

结果总是 0,因为 1 <> 0。

您正在尝试将应用程序公式用作 VBA 函数。LEN() 的正确用法如下:

countMe = LEN(Range("B1"))

但是对于计算 B1 中管道数量的问题,请使用此其他帖子中的代码: 如何从字符串中找出斜线出现的次数

答案3

计算字符串“Test|Test”中“|”出现次数的两种方法:

1 - 公式

Sub Test1()
    Dim countMe As Long

    With Sheets("Data")

        .Range("C1").Formula = "=LEN(B1)-LEN(SUBSTITUTE(B1,""|"",""""))"    'your formula

        countMe = .Range("C1").Value2   'count will be "1"

        .Range("D1").Value = countMe

    End With
End Sub

2——VBA

Sub Test2()
    Dim countMe As Long

    With Sheets("Data")

        .Range("E1").Value2 = UBound(Split(.Range("B1").Value2, "|"))

        countMe = .Range("F1").Value2   'count will be "1"

        .Range("F1").Value2 = countMe

    End With
End Sub

关于第一个的更多细节这里

相关内容