将 Excel 公式转换为 VBA - 计算字符串中的大写字符

Convert Excel Formula to VBA - Count Upper Case Characters in a String

=SUMPRODUCT(LEN($A$7) - LEN(SUBSTITUTE($A$7, CHAR(ROW(INDIRECT("65:90"))), "")))

上面的这个公式计算字符串中的大写字符。它很好用。我似乎无法将其转换为 VBA。我在需要的地方替换了 Application.WorksheetFunction 并且我在间接函数中使用了双引号。

(我的努力) MyCaps =Application.WorksheetFunction.SUMPRODUCT(LEN($A$7) - LEN(Application.WorksheetFunction.SUBSTITUTE($A$7, CHAR(Application.WorksheetFunction.ROW(INDIRECT(""65:90"" ))), "")))

仅供参考,您根本不需要将 INDIRECT() 与您工作中的公式一起使用 sheet。 =SUMPRODUCT(LEN($A)-LEN(SUBSTITUTE($A,CHAR(ROW(65:90)),""))) 由于 SUMPRODUCT() 有效。不确定为什么 'the internet' 在搜索时要使用 INDIRECT()。并且,如果必须,请将行范围设置为绝对 : 并准备好拖动。

将此翻译成 VBA 将遵循以下行:

Sub Test()

Dim s As String: s = "ABCd"

Debug.Print Evaluate(Replace("=SUM(LEN(""X"")-LEN(SUBSTITUTE(""X"",CHAR(ROW(65:90)),"""")))", "X", s))
Debug.Print Evaluate("=SUM(LEN(""" & s & """)-LEN(SUBSTITUTE(""" & s & """,CHAR(ROW(65:90)),"""")))") 'Either of the two.

End Sub

注意:Evaluate将为您auto-CSE公式。因此 SUM() 而不是 SUMPRODUCT().

注意: 如果您打算使用 A7,那么请务必明确说明您正在使用的作品sheet。默认情况下 Evaluate 将引用当时有效的 sheet。例如:

Debug.Print Worksheets("Sheet1").Evaluate("=SUM(LEN(A7)-LEN(SUBSTITUTE(A7,CHAR(ROW(65:90)),"""")))")