|
先と同様に、Sheet2のA列に転記するとして
Sub Sp_Data()
Dim nmAry As Variant, spAry(8) As String
Dim i As Long, j As Long
nmAry = Array(3, 3, 3, 2, 2, 2, 3, 3, 3)
j = 1
For i = 0 To 8
spAry(i) = Mid$(Range("A1").Value, j, nmAry(i))
j = j + nmAry(i)
Next i
Sheets("Sheet2").Range("A1").Resize(9).Value = _
WorksheetFunction.Transpose(spAry())
Erase nmAry, spAry
End Sub
これは9個に分割するという前提のコードですが、実際には nmAry には、200個分の
文字数を表す要素を書かなければなりません。
カンマの後ろに半角スペースと行継続文字を入れて、複数行の要素を記述して下さい。
そして spAry(199) As String と宣言し、For i = 0 To 199 とカウンタの上限を
「分割する数 - 1 」に変更します。
>Sheets("Sheet2").Range("A1").Resize(9).Value
のところは、分割する数と一致した行数を Resize の引数に渡します。つまり
.Resize(200) になるわけです。
さらに、A列に並んだデータを連続して処理するなら
Sub Sp_Data2()
Dim nmAry As Variant, spAry(8) As String
Dim i As Long, j As Long
Dim C As Range
nmAry = Array(3, 3, 3, 2, 2, 2, 3, 3, 3)
For Each C In Range("A1", Range("A1").End(xlDown))
j = 1
For i = 0 To 8
spAry(i) = Mid$(C.Value, j, nmAry(i))
j = j + nmAry(i)
Next i
Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1) _
.Resize(9).Value = WorksheetFunction.Transpose(spAry())
Erase nmAry, spAry
Next
End Sub
ということになりますが、シートの終端行を超えて入力することは出来ないから、
300行ぐらいが限界と考えて下さい。
|
|