Sub TEST1()
Dim A, B
A = DateSerial(2022, 1, 1) '2022/1/1
B = DateSerial(2022, 1 + 1, 0) '2022/1/31'2022年1月でフィルタ
Sheets("Sheet1").Range("A1").AutoFilter 1, ">=" & A, xlAnd, "<=" & B
Sheets.Add after:=Sheets(Sheets.Count) 'シートを追加
ActiveSheet.Name = Format(A, "yyyy年m月") 'シート名を変更'フィルタ結果を転記
Sheets("Sheet1").Range("A1").CurrentRegion.Copy Range("A1")
Sheets("Sheet1").Range("A1").AutoFilter 'オートフィルタを解除
End Sub
Sub TEST2()
Dim A, B
For i = 1 To 5
A = DateSerial(2022, i, 1) '1日
B = DateSerial(2022, i + 1, 0) '月末'月でフィルタ
Sheets("Sheet1").Range("A1").AutoFilter 1, ">=" & A, xlAnd, "<=" & B
Sheets.Add after:=Sheets(Sheets.Count) 'シートを追加
ActiveSheet.Name = Format(A, "yyyy年m月") 'シート名を変更'フィルタ結果を転記
Sheets("Sheet1").Range("A1").CurrentRegion.Copy Range("A1")
Sheets("Sheet1").Range("A1").AutoFilter 'オートフィルタを解除
Next
End Sub
では、実行してみます。
実行してみる
実行するとまず、1月のデータを別シートに転記できます。
次は、2月のデータを別シートに転記できます。
次は、3月のデータを別シートに転記できます。
そして、4月のデータを別シートに転記できます。
最後に、5月のデータを別シートに転記できます。
5月のデータを別シートに転記できました。
こんな感じで、1月~5月をループすることで、月別に別シートに転記することができます。
月のリストを作成してデータを転記
次は、「月のリスト」を作成して、月別に別シート転記してみます。
月のリストを作成して、月別に転記
転記したい月がわかっていない場合がありますので、自動で「月のリスト」を作成できると便利です。
手順としては、
「月のリスト」を作成
月別に別シート転記
という感じで、VBAコードを作成します。
月のリストを作成して、月別で別シートに転記するVBAコードです。
Sub TEST3()
Dim C
'辞書を作成
Set C = CreateObject("Scripting.Dictionary")
Dim D
'データを配列に格納
With Sheets("Sheet1")
D = .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
End With
'重複しない年月を、辞書に登録
For i = 1 To UBound(D, 1)
If C.exists(Format(D(i, 1), "yyyy/m")) = False Then
C.Add Format(D(i, 1), "yyyy/m"), 0
End If
Next
Dim E
E = C.keys 'キーを取得
Dim A, B
For i = 0 To UBound(E)
A = DateSerial(Year(E(i)), Month(E(i)), 1) '1日
B = DateSerial(Year(E(i)), Month(E(i)) + 1, 0) '月松'月でフィルタ
Sheets("Sheet1").Range("A1").AutoFilter 1, ">=" & A, xlAnd, "<=" & B
Sheets.Add after:=Sheets(Sheets.Count) 'シートを追加
ActiveSheet.Name = Format(A, "yyyy年m月") 'シート名を変更'フィルタ結果を転記
Sheets("Sheet1").Range("A1").CurrentRegion.Copy Range("A1")
Sheets("Sheet1").Range("A1").AutoFilter 'フィルタを解除
Next
End Sub