Excel VBAでA列のデータをグルーピングしてシートを分割する方法

Excelシート分割

とある日、知人から「同じデータ別にシートを分割する方法を教えて!」との依頼を受けて解決した時のメモです。

具体的には、とある列のデータをグルーピングして、そのグループごとにシートを分割したい、ということでした。

知人
自動的にシート分割したい…

同じ悩みでお困りの方はぜひ参考にしてくださいね!

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列内の同じデータ別にシートを分割する方法を紹介しました!

  1. Excelを作成して開発タブからボタンを作成
  2. ボタンクリックイベント作成
  3. 上記コードを追記

意外と簡単にできましたので、ぜひ参考にしてくださいね。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする