Excel 以表格格式转换较大的字符串
我被要求写一份月末报告。数据量巨大,无法在短时间内手动完成。我需要寻求建议,我可以使用什么公式来获得期望的结果 在B列中,我有几个用逗号分隔的字符串,我需要在单独的列中得到这些字符串。我需要在他们各自的列中的每个类别的计数,如图所示 请告诉我应该使用哪种配方 试试这段代码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
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,调整是有意义的!很高兴它对你有用。