とある日、知人から「同じデータ別にシートを分割する方法を教えて!」との依頼を受けて解決した時のメモです。
具体的には、とある列のデータをグルーピングして、そのグループごとにシートを分割したい、ということでした。
知人
自動的にシート分割したい…
同じ悩みでお困りの方はぜひ参考にしてくださいね!
クリックできる目次
VBAでシートを分割した結果のイメージ
次のスクショ画像は、私が作成したサンプルファイルです。A列に果物(りんご、なし、バナナ)が並んでいますね。
この状態で「果物別にシート分割実行ボタン」を押すと、それぞれのシートが作成されます。
分割シートは、それぞれ次のように作成されました。
知人
素晴らしい!!
どうですか?イメージ通りであれば、次にシートを分割するためのコードを紹介します。
VBAでシートを分割するコード
Excel上にボタンを作成(開発タブ→挿入→ボタン)し、クリックしたときに、SheetSplit関数が呼ばれるように記述します。
' ボタンクリック Private Sub CommandButton1_Click() Call SheetSplit End Sub Sub SheetSplit() Dim i As Integer Application.ScreenUpdating = False With Worksheets(1) ' A列の3行目から65535行目まで処理 For i = 3 To .Range("A65535").End(xlUp).Row Call NewSheetCreate(i, .Cells(i, 1).Value) Next End With Application.ScreenUpdating = True End Sub Sub NewSheetCreate(lineNum As Integer, NewSheetName As String) Dim NewSheet As Worksheet Dim lastLine As Integer On Error Resume Next Set NewSheet = Worksheets(NewSheetName) ' シート作成時、1行目に項目名を入力 If NewSheet Is Nothing Then Worksheets.Add after:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = NewSheetName Worksheets(1).Rows(2).Copy Worksheets(NewSheetName).Rows(1).Insert Shift:=xlDown End If lastLine = Worksheets(NewSheetName).Range("A65535").End(xlUp).Row + 1 Worksheets(1).Rows(lineNum).Copy Worksheets(NewSheetName).Rows(lastLine).Insert Shift:=xlDown On Error GoTo 0 End Sub
※簡易的に作成したものですので、必要に応じて修正してください。
※少しコードをいじれば、B列やC列でも同じことができます。
VBAでデータをグルーピングしてシート分割まとめ
今回は、VBAを使ってA列内の同じデータ別にシートを分割する方法を紹介しました!
- Excelを作成して開発タブからボタンを作成
- ボタンクリックイベント作成
- 上記コードを追記
意外と簡単にできましたので、ぜひ参考にしてくださいね。
1 件のコメント
「同じデータ別にシートを分割する方法」大変便利に使用
させていただいております。
*すでに同名のシートがあった場合、最終行の下に追加で
張り付けるようにはできないでしょうか。
ご教示していただけるようでしたらお願いいたします。