2017-11-16 10 views
0

おはよう、セルを複数のセルに分割する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+)行、私はcoluを通じてそれをループを持ってする方法がわからない、このスプレッドシートを得ることができますですmnを返し、 "、"がある場合は、シリアル番号を分割しますが、残りのセルから値をコピーします。

ガイダンス、アドバイス、またはコーチングをいただければ幸いです。私はVBAを学ぶのがとても大変です。

答えて

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 
関連する問題