データ整理を効率化しよう
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を使ってデータを月ごとにシート分割することで、作業効率が大きく向上します。手動では何時間もかかる作業が、わずかなコードで一瞬で終わります。
今回紹介したマクロを基に、さらに複雑な条件や他のデータにも応用できるので、ぜひ試してみてください。
