以表格格式转换更大的字符串
Converting bigger string in a tabular format
我被要求做月末报告。数据庞大,无法在短时间内手动完成。我需要寻求建议,我可以使用什么公式来获得所需的结果。
在 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
另一种使用正则表达式的解决方案
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), " "))
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,$B3)-1),",",REPT(" ",255)),255)),"")
结果:
我被要求做月末报告。数据庞大,无法在短时间内手动完成。我需要寻求建议,我可以使用什么公式来获得所需的结果。
在 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
另一种使用正则表达式的解决方案
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), " "))
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,$B3)-1),",",REPT(" ",255)),255)),"")
结果: