• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列の数抽出、行挿入マクロ)

文字列の数抽出、行挿入マクロ - 便利なExcelマクロで効率アップ!

このQ&Aのポイント
  • Excelの特定の文字列を抽出して、行を挿入するマクロの作成方法について教えてください。
  • A列の特定の文字列(;)があった場合、その列をコピーし、その下に挿入した行に文字列(;)の数と同じ数だけ行を追加します。
  • さらに挿入した行のAセルに、抽出した文字列(;)の次の1ケタを貼り付けます。初めての方でも簡単に実行できますので、ぜひお試しください!

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

すでに回答が出来上がっていますから、参考にしていただければ幸いです。 区切り文字は、半角でも全角でも可能です。(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

miwamiwao
質問者

お礼

お礼が遅くなり申し訳ありません。 皆様のおかげで無事処理が出来ました。 一番わかりやすく説明して頂いたwendyさんをベストアンサーと させて頂きました。 本当にありがとうございました。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! 数値とセミコロンは半角としています。 (全角の場合はうまく動作してくれないと思います) 一例です 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

miwamiwao
質問者

お礼

お礼が遅くなり申し訳ありません。 皆様のおかげで無事処理が出来ました。 本当にありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

一例ですが 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

miwamiwao
質問者

お礼

お礼が遅くなり申し訳ありません。 皆様のおかげで無事処理が出来ました。 本当にありがとうございました。

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

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 注)";"は全角か半角か分からなかったので、全角で作成しています。

miwamiwao
質問者

お礼

お礼が遅くなり申し訳ありません。 皆様のおかげで無事処理が出来ました。 本当にありがとうございました。

関連するQ&A