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

Formula to determine error code based on binary text output

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

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

0000000000000000001000
0000000000001000000000
0000100000001000000010

每个 1 代表一个不同的错误。

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

我有 22 个这样的公式,它们之间的唯一区别是结果和它查找的字符。


我的问题是有多个不同错误的代码(即代码中存在多个 1)将在第一次出现 [=16= 后显示每个错误代码]。因此,在我上面列出的第三个错误代码示例中,我的公式显示了第一个 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 的相应错误, 而不是 一切在它之后。我希望这是有道理的,因为它有点难以解释。

如果有帮助的话,我正在从每天收到的文本文件中提取数据,我不得不将单元格格式设置为 "Text" 以便它们能够在 1's.

之前显示 0'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 ","")

将其放入 F2 并 copy/drag 覆盖:

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


如果您有 Office 365 Excel,您可以将它们全部组合成一个数组公式,该公式将测试每个部分和 return 串联值:

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

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

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

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

并抄下来:

为了改善结果(去除丑陋的空洞),在C1中输入数组公式:

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

并抄下来:

数组公式必须用Ctrl + Shift + 输入Enter 而不仅仅是 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

然后selectB1W1,点击公式栏,输入数组公式:

=ErrorLister(A1)

然后向下复制B1W1