提取与IF语句一起使用的所有逻辑测试条件(非嵌套)并打印到单独的列中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了提取与IF语句一起使用的所有逻辑测试条件(非嵌套)并打印到单独的列中相关的知识,希望对你有一定的参考价值。
我有大约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")))
输入变量:
- E2单元格:Payload_Decode!AB74
在单独的单元格中比较变量:
- G2单元格:Payload_Decode!Z92
- H2单元格:Payload_Decode!Z86
- I2单元格:Payload_Decode!Z87
我需要在所有行上都执行此操作。这是说明的屏幕截图:
答案
您没有显示自己尝试解决此问题的尝试,这通常是该论坛的要求,但我发现此问题具有挑战性,因此:
由于包含了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
并向右填充。
如果您有较早的版本,则需要让我们知道哪个版本。
以上是关于提取与IF语句一起使用的所有逻辑测试条件(非嵌套)并打印到单独的列中的主要内容,如果未能解决你的问题,请参考以下文章