Мне нужно использовать VBA, чтобы определить количество аргументов, передаваемых в формулу Excel. Например, предположим, что ячейка содержит формулу = MyFunc ($ A $ 1, "xyz", SUM (1,2, COUNT (C1: C12)), IF (B1> 2,1,0)). Тогда функция counter должна вернуть 4. Имеет ли VBA какие-либо встроенные функции для этого, или у кого-то есть пример регулярного выражения, которое могло бы вычислить это?
Обновление:
Спасибо вам как пользователь225626, так и Чарльз. Одна проблема, которую я обнаружил, заключалась в том, что были строковые аргументы в кавычках, содержащие запятые; эти запятые вызывали увеличение количества аргументов. Я изменил код Чарльза, чтобы учесть это.
Public Function CountFormulaArguments(sStr As String) As Integer
Dim strChar As String
Dim nArgs As Integer
Dim n, nLParen, nCommas As Integer
Dim blArray, bQuote As Boolean
nLParen = 0
nArgs = 0
For n = 1 To Len(sStr)
strChar = Mid(sStr, n, 1)
If strChar = "(" Then
nLParen = nLParen + 1
If nLParen = 1 Then nArgs = nArgs + 1
ElseIf strChar = ")" Then nLParen = nLParen - 1
ElseIf nLParen = 1 And strChar = "{" Then blArray = True
ElseIf blArray And strChar = "}" Then blArray = False
ElseIf Not bQuote And strChar = """" Then bQuote = True
ElseIf bQuote And strChar = """" Then bQuote = False
ElseIf nLParen = 1 And Mid(sStr, n, 1) = "," And Not blArray And Not bQuote Then nCommas = nCommas + 1
End If
Next
nArgs = nArgs + nCommas
CountFormulaArguments = nArgs
End Function