macros将不同单元格中的逗号分隔为单独的数字

所以我有一个数字在Excel中的string,每个数字1-2位数字,但逗号分隔,可以有不同数量的数字。 例如:例如:

ABC 9, 13, 42, 44 | 1, 18 | 24, 30, 61, 23, 30 

我想要一个macros,其中每行(例如9,13,42,44),并把每个号码ia不同的单元格在同一列 – 像这样

 9 13 42 44 

select你想要处理的单元格并运行这个短的macros:

 Sub SplitThem() Dim r As Range For Each r In Selection ary = Split(Replace(r.Value, " ", ""), ",") i = 1 For Each a In ary r.Offset(i, 0).Value = a i = i + 1 Next a Next r End Sub 

在这里输入图像说明

每个项目与父项目列表位于同一列。

如果你想保持“原始”价值:

 Option Explicit Sub SplitNumbers() Dim cell As Range For Each cell In Worksheets("mySheet").Rows(1).SpecialCells(xlCellTypeConstants) '<--| choose your row of interest cell.Offset(1).Resize(UBound(Split(cell.Value, ", ")) + 1) = Application.Transpose(Split(cell.Value, ", ")) Next cell End Sub 

如果你想删除“原始”值:

 Option Explicit Sub SplitNumbers2() Dim cell As Range For Each cell In Worksheets("mySheet").Rows(1).SpecialCells(xlCellTypeConstants) '<--| choose your row of interest cell.Resize(UBound(Split(cell.Value, ", ")) + 1) = Application.Transpose(Split(cell.Value, ", ")) Next cell End Sub 

把你的数据放在第一行的一系列单元中,

split_transpose
splitTranspose子程序之前的数据

运行这个利用VBA的拆分function和工作表的TRANSPOSEfunction的快速子程序。

 Sub splitTranspose() Dim c As Long, vals As Variant With Worksheets("Sheet1") For c = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column If CBool(InStr(1, .Cells(1, c).Value2, Chr(44))) Then vals = Split(Replace(.Cells(1, c).Value2, Chr(32), vbNullString), Chr(44)) .Cells(1, c).Resize(UBound(vals) + 1, 1) = _ Application.Transpose(vals) End If Next c End With End Sub 

你的结果应该类似于以下内容,

split_transpose_after
splitTranspose子程序之后的数据