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
。
关于第一个的更多细节这里