将 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)),"""")))")
=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)),"""")))")