大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、月別に別シートを転記するには、「.AutoFilter」で各月を抽出して、「.Copy」で別シート転記するとできます。「月のリスト」を作成して、月別で別シート転記すると便利です。月別に別シート転記する方法について、マスターしていきましょう。

はじめに

この記事では、月別に別シートを転記する方法について、ご紹介します。

やり方としは、「.AutoFilter」を使ってデータを抽出して、「.Copy」を使って転記するとできます。

「月のリスト」を作成して、月別に別シート転記すると、便利です。

月別に別シート転記する方法について、マスターしていきましょう。

では、月別に別シートを転記する方法について、解説していきます。

この記事を読むメリット

  • 月のリストを作成して、月別で別シートに転記する方法がわかります。

本記事の内容を動画でまとめています

目次から見たい項目へ移動すると便利ですよ。

目次

月別で別シートに転記したい

月別で別シートに転記してみます。

やりたい内容

やりたい内容は、月別に別シートに転記したいということになります。

月別に別シートに転記したい

月別に別シートに転記したいです。

月別に別シートに転記したいです

結果をみると、こんな感じで、月別に別シートに転記をします。

こんな感じで、月別に別シートに転記したいです

では、月別に別シート転記する方法について、みていきましょう。

VBAコードを作成する

VBAコードを作成してみます。

VBAコードをポイントごとに作成していきます。

  • 1月のデータのみを別シートに転記
  • 1月~5月のデータを別シートに転記
  • 月のリストを作成して、月別に別シート転記

という感じで作成していきます。

では、やっていきましょう。

1月のデータのみを転記

まずは、1月のデータのみを、別シートに転記してみます。

1月のデータのみを、別シートに転記

1月のデータのみを、別シートに転記してみます

1月のデータのみを、別シートに転記するVBAコードは、次のようになります。

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

では、実行してみます。

実行してみる

実行すると、2022年1月でフィルタします。

2022年1月でフィルタします

次に、シートが追加されます。

シートを追加します

シート名を変更します。

シート名を変更します

フィルタ結果をコピーします。

フィルタ結果をコピーします

最後に、元シートのフィルタを解除します。

フィルタを解除します

これで、1月のデータを、別シートに転記できます。

1月のデータを別シートに転記できた

1月のデータを、別シートに転記できました

1月のデータを、別シートに転記できました。

1月~5月のデータを転記

次は、先ほどのVBAコードにいくつかVBAコードを追加して、1月~5月のデータ別シートに転記してみます。

1月~5月のデータを転記してみます。

1月~5月のデータを、月別に転記

1月~5月のデータを転記してみます

1月~5月のデータを、別シートに転記するVBAコードになります。

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月のデータを別シートに転記できます。

1月のデータを別シートに転記できました

次は、2月のデータを別シートに転記できます。

2月のデータを別シートに転記できました

次は、3月のデータを別シートに転記できます。

3月のデータを別シートに転記できました

そして、4月のデータを別シートに転記できます。

4月のデータを別シートに転記できました

最後に、5月のデータを別シートに転記できます。

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

「Dictionary」は、重複しないリストを作成する際に、かなり便利に使えます。

「Dictioinary」の使い方について、詳細はこちらでまとめています。

では、ポイント毎に、実行してみます。

実行してみる

実行すると、月のリストを作成できます。

月のリストを作成できます

さらに実行して、月別で別シートに転記できます。

月別で別シートに転記できました

「月のリスト」を作成して、月別で別シートに転記できました。

「月のリスト」を作成できれば、追加したデータも、別シートに自動で転記することができます。

追加データも自動転記

データを追加してみます。

データを追加してみます

先ほどと同じVBAコードを実行してみます。

追加データも自動で転記できました

追加データも自動で転記できました。

おわりに

この記事では、月別に別シートを転記する方法について、ご紹介しました。

やり方としは、「.AutoFilter」を使ってデータを抽出して、「.Copy」を使って転記するとできます。

「月のリスト」を作成して、月別に別シート転記すると、便利です。

月別に別シート転記する方法について、マスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す