すでに回答が出来上がっていますから、参考にしていただければ幸いです。
区切り文字は、半角でも全角でも可能です。(TextCompare Mode)
列数は可変ですから、3列とは決まっていません。出力場所を選びません。
貼り付け場所の
Range("A1").Resize(n, col).Value = ar2
のA1部分を指定してください。他のシートでも可能です。例:Sheet2.Range("A1").Res……
'//
Sub Test3()
Dim rng As Range
Dim i As Long, j As Long, k As Long, n As Long, m As Long, col As Long
Dim ar0 As Variant
Dim ar1 As Variant
Dim ar2() As Variant
Set rng = Range("A1").CurrentRegion
ar0 = rng.Value
col = rng.Columns.Count
For i = 1 To rng.Rows.Count
ar1 = Split(ar0(i, 1), ";", , 1)
k = UBound(ar1)
For j = 0 To k
ReDim Preserve ar2(col - 1, n)
ar2(0, n) = ar1(j)
For m = 2 To col
ar2(m - 1, n) = ar0(i, m)
Next m
n = n + 1
Next j
Next i
ar2 = Application.Transpose(ar2)
'貼り付け場所
Range("A1").Resize(n, col).Value = ar2
End Sub
こんにちは!
数値とセミコロンは半角としています。
(全角の場合はうまく動作してくれないと思います)
一例です
Sub test()
Dim i As Long
i = 1
Do Until Cells(i, 1) = ""
If Cells(i, 1) Like "*" & ";" & "*" Then
Rows(i + 1).Insert
With Cells(i + 1, 1)
.Value = Mid(Cells(i, 1), WorksheetFunction.Find(";", Cells(i, 1)) + 1, _
Len(Cells(i, 1)) - WorksheetFunction.Find(";", Cells(i, 1)))
.Offset(, 1) = Cells(i, 2)
.Offset(, 2) = Cells(i, 3)
.Offset(-1) = Replace(Cells(i, 1), ";" & Cells(i + 1, 1), "")
End With
End If
i = i + 1
Loop
End Sub
こんな感じではどうでしょうか?m(__)m
一例ですが
Sub SCINC()
Dim RM As Range
For i = Range("A1").End(xlDown).Row To 1 Step -1
Set RM = Range("A" & i)
CM = Split(RM, ";")
If UBound(CM) > 0 Then
Rows(i + 1 & ":" & i + UBound(CM)).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
For j = 0 To UBound(CM)
RM.Offset(j, 0) = CM(j)
RM.Offset(j, 1) = RM.Offset(0, 1)
RM.Offset(j, 2) = RM.Offset(0, 2)
Next j
End If
Next i
End Sub
Sub 分割処理()
Dim I As Long
Dim J As Long
Dim 最終セル As Range
Dim 分割 As Variant
Dim 分割数 As Long
Set 最終セル = Cells(Rows.Count, "A").End(xlUp)
I = 1
Do While (I <= 最終セル.Row)
分割 = Split(Cells(I, "A"), ";")
分割数 = UBound(分割)
For J = 0 To 分割数
If J <> 0 Then
Cells(I + J, "A").EntireRow.Copy
Cells(I + J, "A").EntireRow.Insert Shift:=xlDown
End If
If 分割数 <> 0 Then Cells(I + J, "A") = 分割(J)
Next J
I = I + 分割数 + 1
Loop
Application.CutCopyMode = False
End Sub
注)";"は全角か半角か分からなかったので、全角で作成しています。
お礼
お礼が遅くなり申し訳ありません。 皆様のおかげで無事処理が出来ました。 一番わかりやすく説明して頂いたwendyさんをベストアンサーと させて頂きました。 本当にありがとうございました。