用于根据二进制文本输出确定错误代码的公式

时间:2018-02-08 22:49:41

标签: excel excel-formula excel-2016

我正在尝试使用22种不同的公式转换一些错误代码,然后将它们连接起来报告所有错误。

以下是错误代码的示例(它是22 1's0's):

0000000000000000001000
0000000000001000000000
0000100000001000000010

每个1代表不同的错误。

以下是我使用的公式的一个示例:
=IF(NUMBERVALUE(LEFT(D61,1))>=1, " ERROR 1","")

我有22个这样的公式,其中任何一个的唯一区别是结果和它所寻找的字符。

我的问题是包含多个不同错误的代码(即代码中存在多个1)将在第一次出现1后显示每个错误代码。因此,在上面列出的第三个错误代码示例中,我的公式显示了第一个1之后的每个错误代码。此外,它可能无关紧要,但我使用它将结果错误合并为1列:

=CONCATENATE(F2,G2,H2,I2,J2,K2,L2,M2,N2,O2,P2,Q2,R2,S2,T2,U2,V2,W2,X2,Y2,Z2,AA2)

我正在尝试让我的公式显示只是1's之后的所有内容相关的错误。我希望这很有意义,因为它很难解释。

如果它有助于从每天进来的文本文件中提取所有数据,我必须将单元格格式化为“文本”,以便它们显示0's1's之前。

谢谢!

----为任何人编辑------

这个公式最终起作用,我把它放在D列,22个字符代码在E列。

=IF(MID(E2,1,1) > "0","ERROR 1 ","") & IF(MID(E2,2,1) > "0","ERROR 2 ","") & IF(MID(E2,3,1) > "0","ERROR 3 ","") & IF(MID(E2,4,1) > "0","ERROR 4 ","") & IF(MID(E2,5,1) > "0","ERROR 5 ","") & IF(MID(E2,6,1) > "0","ERROR 6 ","") & IF(MID(E2,7,1) > "0","ERROR 7 ","") & IF(MID(E2,7,1) > "0","ERROR 7 ","") & IF(MID(E2,8,1) > "0","ERROR 8 ","") & IF(MID(E2,9,1) > "0","ERROR 9 ","") & IF(MID(E2,10,1) > "0","ERROR 10 ","") & IF(MID(E2,11,1) > "0","ERROR 11 ","") & IF(MID(E2,12,1) > "0","ERROR 12 ","") & IF(MID(E2,13,1) > "0","ERROR 13 ","") & IF(MID(E2,14,1) > "0","ERROR 14 ","") & IF(MID(E2,15,1) > "0","ERROR 15 ","") & IF(MID(E2,16,1) > "0","ERROR 16 ","") & IF(MID(E2,17,1) > "0","ERROR 17 ","") & IF(MID(E2,18,1) > "0","ERROR 18 ","") & IF(MID(E2,19,1) > "0","ERROR 19 ","") & IF(MID(E2,20,1) > "0","ERROR 20 ","") & IF(MID(E2,21,1) > "0","ERROR 21 ","") & IF(MID(E2,22,1) > "0","ERROR 22 ","")

2 个答案:

答案 0 :(得分:3)

将其放入F2并复制/拖动:

=IF(--MID($D2,column(A:A),1)=1," ERROR " & COLUMN(A:A),"")

enter image description here

如果您有Office 365 Excel,则可以将它们全部合并到一个Array公式中,该公式将测试每个零件并返回连接值:

=TEXTJOIN(" ",TRUE,IF(--MID($D2,ROW($1:$22),1) = 1, "ERROR " & ROW($1:$22),""))

当退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter来确认这是一个数组公式。

enter image description here

答案 1 :(得分:2)

在单元格 A1 中典型的22位值,在 B1 中输入:

=IF(MID($A$1,ROWS($1:1),1)="1","Error # "&ROWS($1:1),"")

并复制下来:

enter image description here

要改善结果(删除丑陋的空虚),请在 C1 中输入数组公式

=IFERROR(INDEX($B$1:$B$22,SMALL((IF(LEN($B$1:$B$22),ROW(INDIRECT("1:"&ROWS($B$1:$B$22))))),ROW(A1)),1),"")

并复制下来:

enter image description here

必须使用 Ctrl + Shift + 输入输入

数组公式,而不仅仅是 Enter 键。如果这样做正确,公式将在公式栏中以大括号显示。

修改#1:

将以下用户定义函数 UDF()放入标准模块中:

Public Function ErrorLister(s As String)
    Dim arr(1 To 22) As String
    Dim i As Long, j As Long

    For i = 1 To 22
        arr(i) = ""
    Next i

    j = 1
    For i = 1 To 22
        If Mid(s, i, 1) = "1" Then
            arr(j) = "Error " & i
            j = j + 1
        End If
    Next i

    ErrorLister = arr
End Function

然后选择 B1 W1 ,点击公式栏,然后输入数组公式

=ErrorLister(A1)

然后通过 W1 向下复制 B1

enter image description here