請求書発行コード編 ExcelVBA 複数ページを得意先ごとに繰り返し
マクロ講座 動画編 42回
全自動で繰り返し複数ページの請求書、部品マクロのコード解説
動画でExcel 請求書発行コード編 ExcelVBA 複数ページを得意先ごとに繰り返し
請求書発行コード編 ExcelVBA 複数ページを得意先ごとに繰り返し
メインのプログラムのコードは、データをフィルタリングして、どのように転記するかということで、請求書1枚のケース2枚のケースとこれまでに2回説明しているので
それほど難しくはなくなったとおもいます。メインのプログラムに部品化したコードを追加することで複雑な処理を行なっていきます。
マクロ動画 請求書発行コード編 ExcelVBA 複数ページを得意先ごとに繰り返し
https://youtu.be/XE2Jzq7132U請求書発行マクロをステップ実行しながら部品マクロ解説
-
ぜひ動画を見ながら、コード解説をご覧ください。
F5キーを押して実行します。すると、マークのついているところで止まりました。これは部品です。
Call firstmake_sh というコードです。Call ステートメントで、後ろに続くfirstmake_shという部品マクロを呼び出します。 -
部品マクロ、Sub firstmake_sh()に移動しました。これはSub ステートメントで引数もありませんから、単独で動くマクロです。ここでは部品としてつかっています。
何をするかというと 作業用のシートを追加するマクロです。今回の 請求書発行にあたって 対象となる取引先を絞り込むための請求対象というシートと、それから転記するための補助として 使う作業という名前のシート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 = "作業"
-
オートフィルターを使って月ごとに絞り込むには
シートを追加した後、さらに次のコードにより、売上シート上の売り上げデータから対象月でデータを絞り込む操作をしています。
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)
-
Operator:=xlFilterValuesの使い方
Operator:= xlFilterValuesは、複数選択する場合の指定方法です。
たとえば、下図の例では、
Criteria2:=Array(1, "2022/10 /1") と指定することで、1はその後ろの月(10月)を指定することができます。
2022年の10月ならばすべて日付を抽出できるということになります。
-
Operator:= xlFilterValues
Criteria2:=Array(2, "2022/10/1 ") とすれば、2は日ですから、10/1のみを抽出します。
これが、Criteria2:=Array(0, "2022 /10/1")で0指定ですと、2022年を指定し抽出できます。
請求書マクロの請求対象を抽出
-
シートのデータを月で絞り込めたのでその、次に書いてあるコードで、データの得意先の列だけをコピーして作成したシート請求対象という名前のシートに貼り付けます。
rng.CurrentRegion.Columns(2).Copy
-
貼り付け先では、CurrentRegion.RemoveDuplicatesを使って重複を削除します。これにより、該当月の請求先が決まります。
-
作業用のシートを作成する部品マクロのコード
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