【Excelマクロ】データを月ごとにシート分割して整理する方法

データ整理を効率化しよう

Excelで大量のデータを扱っていると、「月ごとにデータを分けたい」という場面がよくあります。

たとえば、売上データが1つのシートにまとめられていて、それを月別のシートに自動で分けたいという場合です。

手動でデータをコピー&ペーストするのは時間がかかりますが、VBAを使えば、数秒で月ごとにデータを整理できます。

VBAを使って月ごとにデータをシート分割して整理する方法を解説します。

月ごとにデータを分割する基本のコード

まずは、基本的なコードを見てみましょう。ここでは、1つのシートにある売上データを、月ごとに新しいシートに分けてコピーする例を示します。

基本のコード

Sub SplitDataByMonth()

    Dim sws As Worksheet
    Dim tws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim m_name As String

    ' 元のシートを設定
    Set sws = ThisWorkbook.Sheets("元データ")

    ' 最終行を取得
    lastRow = sws.Cells(sws.Rows.Count,1).End(xlUp).Row

    ' ループでデータを月ごとに処理
    For i = 2 To lastRow
        ' 月の名前を取得(A列に日付が入っていると仮定)
        m_name = Format(sws.Cells(i, 1).Value, "yyyymm")

        ' 月ごとのシートが存在しない場合、新規作成
        On Error Resume Next
        Set tws = ThisWorkbook.Sheets(m_name)
        On Error GoTo 0

        If tws Is Nothing Then
            ' シートがなければ作成
            Set tws = ThisWorkbook.Sheets.Add
            tws.Name = m_name
        End If

        ' 該当の行を月ごとのシートにコピー
        sws.Rows(i).Copy tws.Rows(tws.Cells(tws.Rows.Count, 1).End(xlUp).Row + 1)
    Next i

    MsgBox "データの分割が完了しました!"

End Sub
  • sws は元のデータがあるシート(今回は「元データ」)です。
  • lastRow は元のシートの最終行を取得しています。これにより、どこまでデータがあるかを確認できます。
  • m_name は日付の形式(yyyymm)で月を取得しています。この形式をもとに、月別のシートを作成します。
  • tws は月別のシートを指定するための変数です。もしその月のシートがまだ存在しない場合は、On Error Resume Next でエラーを無視し、tws を新しいシートにセットします。

応用:特定の列だけをコピーする

基本のマクロでは、行全体をコピーしていましたが、場合によっては特定の列だけをコピーしたいこともあります。

たとえば、売上日(A列)と金額(B列)のみを月ごとに分けたい場合、次のようにコードを変更します。

特定の列だけをコピーするコード

Sub SplitDataByMonth_Columns()

    Dim sws As Worksheet
  Dim tws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim m_name As String  

    ' 元のシートを設定
    Set sws = ThisWorkbook.Sheets("元データ")

    ' 最終行を取得
    lastRow = sws.Cells(sws.Rows.Count, 1).End(xlUp).Row

    ' ループでデータを月ごとに処理
    For i = 2 To lastRow
        ' 月の名前を取得(A列に日付が入っていると仮定)
        m_name = Format(sws.Cells(i, 1).Value, "yyyymm")

        ' 月ごとのシートが存在しない場合、新規作成
        On Error Resume Next
        Set tws = ThisWorkbook.Sheets(m_name)
        On Error GoTo 0

        If targetWs Is Nothing Then
            ' シートがなければ作成
            Set tws = ThisWorkbook.Sheets.Add
            tws.Name = m_name
        End If

        ' 日付(A列)と金額(B列)だけをコピー
        sws.Cells(i, 1).Resize(1, 2).Copy _
     Denstination:= tws.Cells(tws.Cells(tws.Rows.Count, 1).End(xlUp).Row + 1, 1)
    Next i

    MsgBox "データの分割が完了しました!"

End Sub

変更点

  • sws.Cells(i, 1).Resize(1, 2) で、A列(日付)とB列(売上金額)のみをコピーするようにしています。
  • これにより、必要な情報だけを効率的に月ごとに整理できます。

実装するメリット

この「データを月ごとにシート分割する」マクロを実装することによって、次のようなメリットがあります。

主なメリット

  • データの整理が簡単になる
    大量のデータを月ごとに整理する作業が一瞬で終わるため、時間を大幅に短縮できます。
  • レポート作成がスムーズに
    月別のシートにデータが整理されていれば、毎月のレポート作成もスムーズに行えます。
  • 誤入力のリスクが減る
    手動でデータを整理する場合、コピーやペーストを間違えたり、シートを間違ったりするリスクがありますが、マクロならその心配がありません。
  • チームでの作業効率が向上
    同じ処理を繰り返し行う場合、マクロを共有することで、誰でも同じ方法で効率的に作業ができます。

まとめ

VBAを使ってデータを月ごとにシート分割することで、作業効率が大きく向上します。手動では何時間もかかる作業が、わずかなコードで一瞬で終わります。

今回紹介したマクロを基に、さらに複雑な条件や他のデータにも応用できるので、ぜひ試してみてください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール