複数ページの請求書、部品化して作る請求書

マクロ講座 動画編 41回 前編
マクロ講座

動画でExcel 複数ページの請求書、部品化して作る請求書

複数ページの請求書、部品化して作る請求書 前編

Excelを使っていても手動操作による請求書の発行は大変な作業です。
取引先が増えれば増えるほど、時間と労力を必要とします。
1頁に一件の請求書は、37回で作成しました。
複数頁にわたる請求書の発行は、38回で作成しました。
それでも請求書の発行対象はユーザーが選んで実行しなければいけなかったのです。 今回は、VBAで請求書の発行対象を絞り込んで自動で発行できるようにしたいと思います。
月ごとに売上を絞り込み、請求書の発行対象を抽出自動で選別して、請求書発行を繰り返します。
大きなプログラムになるので、コードを部品化することにより、メンテナンスと可読性もよくなります。

マクロ動画 複数ページの請求書、部品化して作る請求書

今回の請求書発行、考えかた

  1. まず、売上データから当月の売上データを絞り込みます。

    VBA請求書発行、考えかた5
  2. その中で請求対象となる得意先は何件あるのかを抽出します。この処理で対象外の得意先が除外できます。対象得意先のリスト化をします。

    VBA請求書発行、考えかた6
  3. こんどは得意先ごとの繰り返し処理です。得意先のオーダー件数は何件あったのかを数えます。

    VBA請求書発行、考えかた7
  4. そしてその得意先からのオーダー件数が何件あったのかにより、請求書に転記する方法を1頁なのか2ぺージなのかを場合わけします。
    場合分けは、 If ~ Then Els 構文  Select Case 構文を使うことで可能です。
    請求書発行の流れはこのようになります。

    VBA請求書発行、考えかた8
  5. そして請求書発行の期間のフィルター設定ですけれども、このプログラムでは月ごとに区切っています。
    特定期間の

    VBA請求書発行、考えかた9
  6. 日付でいつからいつまでという区切り方をする場合は、
    何日より大きく何日より小さいというような指定方法になります。

    VBA請求書発行、考えかた10

VBA請求書、請求対象の絞り込み

  1. 前回は対象月のデータを抽出した後で、特定のお客様ごとにデータの件数が15件ならば1ページの請求書を発行する。
    15件以上ならば2ページの請求書を発行する。というようにVBAで分岐処理の判断をしながら請求書を発行するというマクロを作成しました。
    このままでは顧客が10件の時は10回操作しなければならず、20件ならば20回の操作が必要となります。

    VBA請求書、請求対象の絞り込み1
  2. 自動で処理を繰り返すためには、当月の請求対象の顧客を抽出し、それを順番に繰り返し処理して行く必要があります。

    VBA請求書、請求対象の絞り込み2
  3. 今回作成するプログラムの場合はスタートボタンを押すと、自動的に対象となるお得意先の抽出をします。
    そして一件ずつ請求書を発行するので、請求書完了のメッセージが表示される時には、すでにフォルダー内に全部の請求書が作成されています。

    VBA請求書、請求対象の絞り込み3
  4. また、請求書発行の記録としての控えのエクセルブックも作成されています。
    ブックを開くと、発行対象となったお得意先名があり、それ以降のシートには、印刷する元になった請求書があります。

    VBA請求書、請求対象の絞り込み4

期間の指定方法、いつからいつまで

  1. オートフィルタはExcelのデータベース機能として重要な役割を担っています。 VBAでもシンプルなコードで手軽に利用でき、マクロを作成することで必要なデータを絞り込んだりすることが自動化できます。
    構文は、
    Range.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)

    オートフィルターの期間指定20
  2. 上記のAutoFilterメソッドの構文を見ると、複雑で大変そうに見えますが、
    最低限二つの引数を指定すれば抽出できます。
    その一つはフィールドこれは抽出の基準となる列のこと、
    次は criteria 1これは抽出に用いる値のことです。

    オートフィルターの期間指定20
  3. オートフィルターの期間指定を何月でするのではなくて何時から何時までのような形にする場合のコードを説明します。
    何時から何時までの期間指定の場合は、抽出条件は2つ必要ですから、引数にCriteria2と、その使い方を指定する Operatorも必要となります。

    日付で絞り込むので オートフィルターメソッドの引数 field には1を指定します。
    Criteria1には、小さい方の日付を指定してその日よりシリアル値が大きいの意味で使います。
    Criteria1:= ">=2022/10/11",
    Criteria2には、大きい方の日付を指定しその日よりシリアル値が小さいの意味で使います。
    Criteria2:="<=2022/11/10"
    そしてこの2つの値をどう利用するのかという指定をOperator:=xlAnd で指定するために、間にいれてやります。

    オートフィルターの期間指定11
    Public ws As Worksheet, rng As Range
    Sub 期間を指定いつからいつまで()
        Set ws = sh_uriage
        Set rng = ws.Range("A5").CurrentRegion
        rng.AutoFilter Field:=1, Criteria1:= _
            ">=2022/10/11", Operator:=xlAnd, Criteria2:="<=2022/11/10"
        rng.AutoFilter Field:=2, Criteria1:=ws.Range("得意").Value
    
    End Sub
  4. 実行すると抽出する期間を日付で指定することができました。 その期間は10月11日から11月10日までの日付となります。

    オートフィルターの期間指定12