![](/img/trans.png)
[英]How can I extract the 'logical_test' from an if statement in excel?
[英]Extract all Logical test condition used with IF statement (not nested) and print to separate column
我有一個大約 100 行公式的列表。 每行包含一個單元格,其中包含 1/2/3/4/5/6 條 IF 語句。
我需要幫助來提取用於每一行的所有邏輯測試字符串,例如單元格 C2 包含:
=IF(Payload_Decode!AB74=Payload_Decode!Z92,"OK",IF(Payload_Decode!AB74=Payload_Decode!Z86,"OK",IF(Payload_Decode!AB74=Payload_Decode!Z87,"OK","ERROR")))
輸入變量:
單獨單元格中的比較變量:
我需要所有行都發生這種情況。 這是一個解釋說明的屏幕截圖:
您並未嘗試自行解決此問題,這通常是本論壇的要求,但我發現該問題具有挑戰性,因此:
由於您已經包含了一個VBA
標簽,這里是一個用戶定義的函數,使用正則表達式,可以做你想做的事。
該公式是一個數組公式。 如果您有最新版本的 Excel,帶有動態數組,您可以在E2
輸入公式,結果將溢出到右側。
如果您沒有該功能,您可以通過包裝在INDEX
單獨顯示公式的結果,或者您可以將其輸入為數組E2:J2
請閱讀 UDF 開頭的關於早期與晚期綁定的說明。
“設置對 Microsoft VBScript 正則表達式 5.5 的引用”或使用后期綁定
Option Explicit
Function inputCompVars(ByVal S As String) As String()
Dim RE As RegExp, MC As MatchCollection, M As Match
Const sPat As String = "\(([^=]+)=([^,]+)"
Dim sTemp() As String, I As Long
Set RE = New RegExp
With RE
.Global = True
.Pattern = sPat
If .test(S) = True Then
Set MC = .Execute(S)
ReDim sTemp(0 To MC.Count)
sTemp(0) = MC(0).SubMatches(0)
I = 0
For Each M In MC
I = I + 1
sTemp(I) = M.SubMatches(1)
Next M
End If
inputCompVars = sTemp
End With
End Function
這與以下內容一起使用:
E2: =inputCompVars(FORMULATEXT($A2))
或者,如果您沒有動態數組:
E2: =IFERROR(INDEX(inputCompVars(FORMULATEXT($A2)),1,COLUMNS($A:A)),"")
並根據需要填寫。
如果您需要公式解決方案,並且有 Excel 2013+,您可以嘗試:
E2: =FILTERXML("<t><s>" &SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(FORMULATEXT($A2),"=",","),"(",","),",","</s><s>")&"</s></t>","//s[contains(.,'Payload_Decode')][1]")
F2: =IFERROR(FILTERXML("<t><s>" &SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(FORMULATEXT($A2),"=",","),"(",","),",","</s><s>")&"</s></t>","//s[contains(.,'Payload_Decode')][" & COLUMNS($A:A)*2&"]"),"")
並選擇F2
並向右填充。
如果您有更早的版本,則需要讓我們知道是哪個版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.