提取与IF语句一起使用的所有逻辑测试条件(非嵌套)并打印到单独的列中

问题描述 投票:-2回答:1

我有大约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

我需要在所有行上都执行此操作。这是说明的屏幕截图:

enter image description here

excel vba excel-formula
1个回答
0
投票

您没有显示自己尝试解决此问题的尝试,这通常是该论坛的要求,但我发现此问题具有挑战性,因此:

由于包含了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)),"")

并根据需要正确填写。

enter image description here

如果您需要公式解决方案,并且拥有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并向右填充。

如果您有较早的版本,则需要让我们知道哪个版本。

© www.soinside.com 2019 - 2024. All rights reserved.