エクセルVBAマクロを自動作成する無料アプリです。
例として「縦に並んだ表を、見出しを基準に、複数のシートに分ける」VBAマクロを作成します。
事例 縦に並んだ表を、複数のシートに切り分ける
できました(^^)/
アプリの設定
アプリへのリンク ⇒縦に並んだ表を、見出しを基準に、複数のシートに分ける
【ポイント】
※最終行までの間に空白行があるので、「範囲オプション」は、「最終行まで(途中に空白があるとき)」をつかいます。その際、右下セルは、右端列の仮の最終セルをつかいます。
※「切り分け条件のセルからOffsetしたセル、の値」を使うと、シート名に、表のデータの一部を使えます。
※「シート名は、 / を _ に変える」にチェックを入れると、日付の/を、シート名では、_に書き換えます。
表示されるVBAコード
アプリで作成されたコードを、VBE画面に貼り付ければ、マクロの完成です。
VBAコードを見る
Sub デモ_29() '縦に並んだ表を、見出しを基準に、複数のシートに分ける
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False ' 警告表示を停止
Dim セル範囲 As String, セル As Range, 右下セル As String
Sheets("Sheet1").Select
Range("e100").Select
Selection.End(xlUp).Select
右下セル = Selection.Address(False, False)
セル範囲 = "a1" & ":" & 右下セルDim 辞書 As Object, アドレス As Variant
Dim 行 As Long, 列 As Long, j As Long
Set 辞書 = CreateObject("Scripting.Dictionary")
'◆辞書のkeyに、対象セルのアドレスを入れる
For 行 = Range("a1").Row To Range(右下セル).Row
Set セル = Cells(行, Range("a1").Column)
If セル.Value Like "*日にち*" Then
辞書.Add セル.Address(False, False), 1
End If
Next 行
'◆辞書のkeyの最後に、最終行のアドレスを入れる
辞書.Add Cells(Range(右下セル).Row, Range("a1").Column).Offset(1, 0).Address(False, False), 1
'◆配列のアドレスに、辞書のキーをいれる
アドレス = 辞書.keys
'◆アドレス間の値を、コピーする
For j = LBound(アドレス) To UBound(アドレス) - 1
Sheets("Sheet1").Select
Range(Range(アドレス(j)), Range(アドレス(j + 1)).Offset(-1, Range(右下セル).Column - Range("a1").Column)).Copy
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = Replace(Sheets("Sheet1").Range(アドレス(j)).Offset(1, 0), "/", "_")
Range("A1").PasteSpecial Transpose:=False
Next j
Application.CutCopyMode = False
Application.DisplayAlerts = True ' 警告表示を再開
Application.ScreenUpdating = True ' 画面描画を再開
End Sub
【スクリーンショッ14選】エクセルVBAでシート処理