使用带逗号分隔值的excel MID函数

使用带逗号分隔值的excel MID函数,excel,excel-formula,Excel,Excel Formula,我试图使用MID函数解析一列中以逗号分隔的值,并将提取的值返回到另一列中 例如: A1:AA0221AA、BB0129BB、CC0212CC 我的期望输出(B1)是:022101290212 我不想将文本用于列,因为我想限制将生成的列数。如果您有TEXTJOIN: =TEXTJOIN(", ",,MID(FILTERXML("<t><s>"&SUBSTITUTE(A1,",","</s&g

我试图使用MID函数解析一列中以逗号分隔的值,并将提取的值返回到另一列中

例如:

A1:AA0221AA、BB0129BB、CC0212CC

我的期望输出(B1)是:022101290212

我不想将文本用于列,因为我想限制将生成的列数。

如果您有TEXTJOIN:

=TEXTJOIN(", ",,MID(FILTERXML("<t><s>"&SUBSTITUTE(A1,",","</s><s>")&"</s></t>","//s"),3,4))
=TEXTJOIN(“,”,MID(FILTERXML(“&SUBSTITUTE(A1,”,“,”)&“//s”),3,4))
在Excel 2019中,这将需要使用Ctrl-Shift-Enter强制作为数组公式


如果没有TEXTJOIN,它将需要VBA。

虽然我对VBA也不熟悉,但我已经测试了这段代码,并且可以正常工作。但是,单元格属性必须设置为文本,因为数据有前导零

Sub VBA_Alternative_TextJoin()
Dim InputRange As Range, Cell As Range, str As Variant
Dim parts As Variant
ThisWorkbook.Worksheets("Sheet4").Activate 'Change this as per your needs
Set InputRange = ThisWorkbook.Worksheets("Sheet4").Range("A1",Range("A1").End(xlDown))
For Each Cell In InputRange
parts = Split(Cell, ",")
    For Each str In parts
        If str = parts(0) Then
            Cell.Offset(0, 1) = Mid(str, 3, 4)
        Else
            Cell.Offset(0, 1) = Cell.Offset(0, 1) & "," & Mid(str, 3, 4)
        End If
    Next str
Next Cell
End Sub

每个项目中的数字是否始终位于3-6位置?更好的是…是否所有子字符串都是8个字符长,且数字值位于3-6位置?此外,如果没有TEXTJOIN,则在没有vba的情况下,这是不可能的。是的,数字应全部位于3-6位置。如果数字始终位于3-6位置,然后你可以使用这个公式:=MID(A1,3,4)&“,”&MID(A1,13,4)&“,”&MID(A1,23,4)非常感谢你在语法方面所做的工作!很遗憾,我的excel版本没有文本连接功能。非常感谢您对VBA代码所做的工作!我必须在parts变量和else语句下的cell.offset变量的逗号后添加一个空格。我会同意你的回答,但我不会同意,因为我没有足够的声誉。再次感谢!