請求書発行コード編 ExcelVBA 複数ページを得意先ごとに繰り返し 42回

請求書発行コード編 ExcelVBA 複数ページを得意先ごとに繰り返し

マクロ講座 動画編 42回
全自動で繰り返し複数ページの請求書、部品マクロのコード解説

マクロ講座

動画でExcel 請求書発行コード編 ExcelVBA 複数ページを得意先ごとに繰り返し

請求書発行コード編 ExcelVBA 複数ページを得意先ごとに繰り返し

メインのプログラムのコードは、データをフィルタリングして、どのように転記するかということで、請求書1枚のケース2枚のケースとこれまでに2回説明しているので それほど難しくはなくなったとおもいます。メインのプログラムに部品化したコードを追加することで複雑な処理を行なっていきます。

マクロ動画 請求書発行コード編 ExcelVBA 複数ページを得意先ごとに繰り返し

https://youtu.be/XE2Jzq7132U

請求書発行マクロをステップ実行しながら部品マクロ解説

  1. ぜひ動画を見ながら、コード解説をご覧ください。
    F5キーを押して実行します。すると、マークのついているところで止まりました。これは部品です。
    Call firstmake_sh というコードです。Call ステートメントで、後ろに続くfirstmake_shという部品マクロを呼び出します。

    請求書発行システム部品マクロ1
  2. 部品マクロ、Sub firstmake_sh()に移動しました。これはSub ステートメントで引数もありませんから、単独で動くマクロです。ここでは部品としてつかっています。
    何をするかというと 作業用のシートを追加するマクロです。今回の 請求書発行にあたって 対象となる取引先を絞り込むための請求対象というシートと、それから転記するための補助として 使う作業という名前のシート2つを作成します。

    請求書発行システム部品マクロ2
        Application.ScreenUpdating = False
        Set sh_target = Sheets.Add(After:=Worksheets(Worksheets.Count))
        ActiveSheet.Name = "請求対象"
        Set sh_sagyou = Sheets.Add(After:=Worksheets(Worksheets.Count))
        ActiveSheet.Name = "作業"
  3. オートフィルターを使って月ごとに絞り込むには

    シートを追加した後、さらに次のコードにより、売上シート上の売り上げデータから対象月でデータを絞り込む操作をしています。

    請求書発行システム部品マクロ3
        With ws
            rng.AutoFilter Field:=1, Operator:=xlFilterValues, _
                Criteria2:=Array(1, Range("対象月").Value)
            .Range("B5").CurrentRegion.Columns(2).Select
                rng.CurrentRegion.Columns(2).Copy
         End With
    

    月で絞り込む場合のオペレーターには xlFilterValues を使い criteria 2で指定します。
    Criteria2:=Array(1, Range("対象月").Value)

  4. Operator:=xlFilterValuesの使い方
    Operator:= xlFilterValuesは、複数選択する場合の指定方法です。
    たとえば、下図の例では、
    Criteria2:=Array(1, "2022/10 /1") と指定することで、1はその後ろの月(10月)を指定することができます。
    2022年の10月ならばすべて日付を抽出できるということになります。

    Operator:= xlFilterValuesの使い方
  5. Operator:= xlFilterValues
    Criteria2:=Array(2, "2022/10/1 ") とすれば、2は日ですから、10/1のみを抽出します。
    これが、Criteria2:=Array(0, "2022 /10/1")で0指定ですと、2022年を指定し抽出できます。

    請求書発行システム部品マクロ5

請求書マクロの請求対象を抽出

  1. シートのデータを月で絞り込めたのでその、次に書いてあるコードで、データの得意先の列だけをコピーして作成したシート請求対象という名前のシートに貼り付けます。
    rng.CurrentRegion.Columns(2).Copy

    請求書発行システム部品マクロ6
  2. 貼り付け先では、CurrentRegion.RemoveDuplicatesを使って重複を削除します。これにより、該当月の請求先が決まります。

    請求書発行システム部品マクロ7
  3. 作業用のシートを作成する部品マクロのコード

    Public shnew1 As Worksheet
    Public sh_target As Worksheet, sh_sagyou As Worksheet
    
    Sub firstmake_sh()
        Application.ScreenUpdating = False
        Set sh_target = Sheets.Add(After:=Worksheets(Worksheets.Count))
        ActiveSheet.Name = "請求対象"
        Set sh_sagyou = Sheets.Add(After:=Worksheets(Worksheets.Count))
        ActiveSheet.Name = "作業"
    '**********該当取引先の抽出
        Set ws = sh_uriage
        Set rng = ws.Range("A5").CurrentRegion
        ws.Activate
        Application.ScreenUpdating = False
        With ws
            rng.AutoFilter Field:=1, Operator:=xlFilterValues, _
                Criteria2:=Array(1, Range("対象月").Value)
            .Range("B5").CurrentRegion.Columns(2).Select
                rng.CurrentRegion.Columns(2).Copy
         End With
    '******   sh_targetにはる  ***********
        With sh_target
            .Range("A1").PasteSpecial Paste:=xlPasteValues
            .Range("A1").CurrentRegion.RemoveDuplicates Columns:=Array(1), _
                Header:=xlYes
         End With
    
    End Sub