Excel 以表格格式转换较大的字符串

Excel 以表格格式转换较大的字符串,excel,vba,excel-formula,excel-2007,Excel,Vba,Excel Formula,Excel 2007,我被要求写一份月末报告。数据量巨大,无法在短时间内手动完成。我需要寻求建议,我可以使用什么公式来获得期望的结果 在B列中,我有几个用逗号分隔的字符串,我需要在单独的列中得到这些字符串。我需要在他们各自的列中的每个类别的计数,如图所示 请告诉我应该使用哪种配方 试试这段代码 Sub Test() Dim a, x, c, i&, j%, k%, n$ a = Range("B2").CurrentRegion.Value For i = 2 To UBound(a) x = S

我被要求写一份月末报告。数据量巨大,无法在短时间内手动完成。我需要寻求建议,我可以使用什么公式来获得期望的结果

在B列中,我有几个用逗号分隔的字符串,我需要在单独的列中得到这些字符串。我需要在他们各自的列中的每个类别的计数,如图所示

请告诉我应该使用哪种配方

试试这段代码

Sub Test()
Dim a, x, c, i&, j%, k%, n$

a = Range("B2").CurrentRegion.Value

For i = 2 To UBound(a)
    x = Split(a(i, 1), ",")

    For j = LBound(x) To UBound(x)
        n = Empty
        For k = 1 To Len(x(k))
            If IsNumeric(Mid(x(j), k, 1)) Then
                n = n & Mid(x(j), k, 1)
            Else
                c = Application.Match(Split(x(j), n)(1), Rows(2), 0)
                If Not IsError(c) Then a(i, c - 1) = n
                Exit For
            End If
        Next k
    Next j
Next i

Range("B2").Resize(UBound(a, 1), UBound(a, 2)).Value = a
End Sub
另一个使用regex的解决方案

Sub Test()
Dim a, x, c, i&, j%, n$, re As Object

a = Range("B2").CurrentRegion.Value
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "(?:(\D+)?(\d+))|(?:(\D+)(\d+)?)"

For i = 2 To UBound(a)
    x = Split(a(i, 1), ",")

    For j = LBound(x) To UBound(x)
        n = Empty
        If re.Test(x(j)) = True Then
            n = WorksheetFunction.Trim(re.Replace(x(j), "$1 $2 $3 $4"))
            c = Application.Match(Split(n)(1), Rows(2), 0)
            If Not IsError(c) Then a(i, c - 1) = Val(Split(n)(0))
        End If
    Next j
Next i

Range("B2").Resize(UBound(a, 1), UBound(a, 2)).Value = a
End Sub

或者,您可以简单地使用Excel函数:

=IFERROR(TRIM(RIGHT(SUBSTITUTE(LEFT($B3,SEARCH(C$2,$B3)-1),",",REPT(" ",255)),255)),"")
结果:


非常感谢您。你节省了我的时间。谢谢你的帮助。只有一个问题
Range(“B2”).CurrentRegion.Value
没有选择最后一行,因为上面有一个空行。如何将其也包括在内?谢谢你可以用这行代替
a=Range(“B2:N”和Cells(Rows.Count,“B”).End(xlUp.Row)。Value
Great。再次非常感谢你,谢谢。我的完整报告在截止日期内准备好了。谢谢上帝保佑!很好的基于公式的答案。多谢各位much@JustynaMK伟大的解决方案+1再次感谢@Justyna MK。一个观察结果-对于一些值,它输出为文本,我必须向其中添加
INT()
。感谢@Sabha,调整是有意义的!很高兴它对你有用。