2013-05-11 5 views
0

Visual Basic의 문자열에서 Excel 함수 (이름 만)를 추출 할 수 있습니까?VB에서 Regex를 사용하여 문자열에서 모든 Excel 함수 유형 추출

예를 들면 : Sin (B6) * Sum (A2 : A4) 그래서 "죄"와 "합계"를 찾는 방법을 찾고 싶습니다.

참고 : 이미 셀 주소를 추출하는 코드가 있는데, 나를 도와 줄 수있는 힌트를 줄 수 있습니다.

감사합니다. 선택적 withspace하고,이어서 : 함수 (통화)을 가정

Dim result As Object 
Dim testExpression As String 
Dim objRegEx As Object 
Set objRegEx = CreateObject("VBScript.RegExp") 
objRegEx.IgnoreCase = True 
objRegEx.Global = True 
objRegEx.Pattern = """.*""" ' remove expressions 
testExpression = Mystring 
testExpression = objRegEx.Replace(testExpression, "") 
objRegEx.Pattern = "(([A-Z])+(\d)+)" 'grab the address 
    Dim i As Long 
Dim k As Long 
If objRegEx.test(testExpression) Then 
    Set result = objRegEx.Execute(testExpression) 
    If result.Count > 0 Then 

     For Each Match In result 

k = Len(Match.value) 
i = 1 
Do Until (i > k) Or (IsNumeric(Mid$(Match.value, i, 1))) 
    i = i + 1 
Loop 

Debug.Print Match.value 

     Next Match 
     End if 

답변

3

적어도 하나 이상의 식별자 문자 (문자, 숫자 _ \ + w),이어서 흉 문자 ([AZ])로 시작

Dim aTests : aTests = Array(_ 
     "Sin(B6)*Sum(A2:A4)" _ 
    , "sum_02(B6) * Do_what_I_Mean(A2:A4)" _ 
    , "Sum(Sum(Sum(A2:A4)))" _ 
    , "NoArgsFunc()" _ 
) 
    Dim reFunc : Set reFunc = New RegExp 
    reFunc.Global  = True 
    reFunc.IgnoreCase = True 
    reFunc.Pattern = "([A-Z]\w+)\s*\(" 
    Dim sTest 
    For Each sTest In aTests 
     WScript.Echo "----", qq(sTest) 
     Dim oMT 
     For Each oMT In reFunc.Execute(sTest) 
      WScript.Echo qq(oMT.SubMatches(0)) 
     Next 
    Next 

출력 :

---- "Sin(B6)*Sum(A2:A4)" 
"Sin" 
"Sum" 
---- "sum_02(B6) * Do_what_I_Mean(A2:A4)" 
"sum_02" 
"Do_what_I_Mean" 
---- "Sum(Sum(Sum(A2:A4)))" 
"Sum" 
"Sum" 
"Sum" 
---- "NoArgsFunc()" 
"NoArgsFunc" 

PS 인수 목록 괄호 개방

의 의미로 인해 문자열 리터럴을 줄이려는 RegExp가 실패합니다. (EOL을 제외한 모든 것)과 탐욕. "YourRegExp("""") & Sucks("""")"으로 테스트하고 """[^""]*"""과 같은 패턴을 고려하고 대체 코드는 """"""으로 간주합니다.

관련 문제