Excel VBA将单元格拆分为多个单元格

时间:2017-11-16 20:18:12

标签: excel vba excel-vba

下午好,

我在学习VBA的过程中遇到了很大的问题。目前,我的数据(如下所示)在一个结构中,有时包含属于单个部分的多个序列号。

我有一个我写的VBA宏,它导入这些数据并为单独的程序正确格式化。但是,我正在研究一个子程序,它允许我通过并分隔这些由逗号分隔的序列号。

例如: Before Macro

但是,我希望它看起来像这样: After Macro

我在这个网站(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。

1 个答案:

答案 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