下午好,
我在学习VBA的过程中遇到了很大的问题。目前,我的数据(如下所示)在一个结构中,有时包含属于单个部分的多个序列号。
我有一个我写的VBA宏,它导入这些数据并为单独的程序正确格式化。但是,我正在研究一个子程序,它允许我通过并分隔这些由逗号分隔的序列号。
我在这个网站(Split Cells Into Multiple Rows using Vb Code)上发现了一些有帮助的代码,但是我遇到了麻烦:这就是我所拥有的
Sub SplitSerial()
Dim SN As String
Dim i As Integer
Dim numArray()
SN = ActiveCell.Value
numArray = Split(SN, " ")
For LBound(numArray) To UBound(numArray)
Cells(1, i + 1).Value = numArray(i)
MsgBox numArray(i)
Next i
End Sub
问题是,这个电子表格可能会变得非常大(5,000+)行,所以我不知道如何让它循环遍历列,如果它有“,”,则拆分序列号但复制其余单元格的值。
非常感谢任何指导,建议或指导。我正在努力学习VBA。
答案 0 :(得分:1)
试试这个,它使用数组,所以应该加快速度。添加了一些注释,以简要说明代码正在做什么。
Sub x()
Dim v, vOut(), i As Long, j As Long, k As Long, w
v = Sheet1.Range("A1").CurrentRegion.Value 'assumes starting data in A1 of sheet1
ReDim vOut(1 To UBound(v, 1) * 10, 1 To 3) 'output array, assumes no more than 10 serial numbers for each part
For i = LBound(v, 1) To UBound(v, 1)
w = Split(v(i, 2), ",") 'split serial number by comma
For j = LBound(w) To UBound(w) 'for each serial number
k = k + 1
vOut(k, 1) = v(i, 1) 'repeat part number
vOut(k, 2) = w(j) 'add particular serial number
vOut(k, 3) = v(i, 3) 'repeat price
Next j
Next i
Sheet2.Range("A1").Resize(k, 3) = vOut 'output to A1 of sheet2.
End Sub