エクセルVBAでクラスを使った請求書マクロの概要と使用するクラスの定義


document

photo credit: wuestenigel Red pen on spreadsheet via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

弊ブログには「エクセルVBAで請求書を作る」という初心者向けのシリーズがありまして、たいへん人気のある連載となっています。

こちらの記事からはじまるシリーズです。

【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
初心者向けVBAの実用的な使い方について、請求データ一覧から請求書を自動で作成するを目標に進めます。初回はWorksheetオブジェクト、Rangeオブジェクトと、セルの値の操作についてお伝えします。

反復、分岐、日付の操作、セルの読み書き、シートの操作、ブックの作成や保存など、ぜひ覚えておきたい要素がてんこ盛りなので、初心者向けの導入としては良い教材になるかと思います。

ただ、一通りだいたいマスターして、クラスなども少しかじってみたとします。

例えば、以下の記事からはじまる「初心者でもわかるエクセルVBAのクラスモジュール」のシリーズなどです。

【初心者でもできる】エクセルVBAで最も簡単なクラスを作る方法
「初心者でもわかる!エクセルVBAのクラスモジュールの活用法」をテーマに、その使い方と便利さについてシリーズでお伝えしていきます。今回は、エクセルVBAで最も簡単なクラスを作る方法をお伝えしていきます。

そうなると、「昔作った、請求書マクロ。クラス使ったらどうなるんだろ?」となりませんか?

私はなりました。

ということで、本記事から新シリーズとして「エクセルVBAでクラスを使って請求書マクロを作る」を開始したいと思います。

「クラスってなんぞや?」という方は、前述の「初心者でもわかるエクセルVBAのクラスモジュール」のシリーズを一通り触ってみてください。

今回は、エクセルVBAでクラスを使った請求書マクロの概要と使用するクラスの定義ということでお送りします。

では、行ってみましょう!

請求書マクロのシート構成

まず、請求書マクロの元となるデータやひな形について確認しておきましょう。

エクセルファイル「請求データ.xlsm」は3つのシートで構成されています。

請求データ

まず、「請求データ」シート。

請求データシート
これは、各社へ請求すべき元データを品目別にまとめているシートになります。

このデータが請求書の元データとなります。

取引先マスタ

次が「取引先マスタ」シート。

取引先マスタシート

これは、現在取引のある取引先の基本情報をまとめたマスタシートです。

毎月締めたところで、これらの取引先のうち、請求すべきデータが存在する取引先に、それぞれ請求書を作成する必要があります。

請求書ひな形

最後が「請求書」シートです。

請求書シート

これが、毎月作成する請求書のひな形となるシートとなります。

21行目から50行目まで、請求する品目と単価、数量を入力できるようになっています(図では一部の行について非表示にしています)。

このシートをベースに取引先ごとに請求書を作ることになります。

請求書マクロの動作

作りたい請求書マクロはこのようなものです。

  1. 実行するとInputBoxで年月の入力を受け付ける
  2. 取引先マスタに存在する取引先の分だけ、該当の年月に納品した請求データがあれば別のエクセルブックとして請求書を作成する
    1. ひな形のD15,D16セルに該当の年月から算出した請求日、支払期限を入力
    2. ひな形のA21~C50セルに該当の年月、該当の取引先の請求データを転記
    3. ひな形のA3~A7セルには取引先マスタから社名、郵便番号、住所を転記

ひな形のその他の部分は、ひな形にベタ打ち、もしくは数式で自動計算となっています。

データ行を表すクラスを作成する

さて、それで作成する請求書マクロですが、「クラス」を使うとお伝えしました。

どんなクラスを用意するか…なのですが、「初心者でもわかるエクセルVBAのクラスモジュール」のシリーズでお伝えした通り、エクセル表の1行分のデータは、クラス化すると便利だったりします。

クラスのプロパティの作成については以下の記事もご覧ください。

エクセルVBAでクラスに最も簡単なプロパティを追加する方法
「初心者でもわかるエクセルVBAのクラスモジュール」をテーマにお送りしています。今回はエクセルVBAで、クラスモジュールにパブリック変数を宣言して、クラスに最も簡単なプロパティを追加する方法です。

請求データを表すDataクラス

なので、まず「請求データ」シートの1行分を表すDataクラスを作ります。

納品日、取引先名、品目、単価、数量を表すプロパティを持たせれば良さそうですね。あ、「価格」は「単価×数量」で計算できるので、プロパティとしては追加せずに、いったん置いておきます。

なので、クラスモジュール「Data」はこんなコードを作りました。

Dataクラスをインスタンス化するとDataオブジェクトになり、以下の部分のデータを持つことができるようになります。

Dataオブジェクト

取引先を表すClientクラス

続いて、「取引先マスタ」シートの1行分を表すClientクラスです。

こっちはわかりやすいですね。

取引先名、郵便番号、住所1、住所2をプロパティとして、クラスモジュール「Client」に以下のようなコードを書きます。

Clientクラスをインスタンス化すると、以下の部分のデータを持つことができます。

Clientオブジェクト

まとめ

以上、エクセルVBAの請求書マクロの概要と、使用するクラスの定義をしました。

まだはじまったばかりなので、全容がなかなか見えないかも知れませんが、一歩ずつ着実に進めていきますので、ぜひお付き合いください。

次回は、今回作成したクラスのインスタンスをコレクション化する部分を作っていきます。

エクセルVBAでシートモジュールに請求書マクロのデータをコレクション化する処理を書く
エクセルVBAでクラスを使って請求書マクロを作るシリーズをお送りしています。今回は、エクセルVBAで請求書マクロのシートのデータをシートモジュール上のインスタンスのコレクションとして格納する方法です。

どうぞお楽しみに!

連載目次:エクセルVBAでクラスを使って請求書マクロを作る

エクセルVBAの題材として実務でもよく利用される「請求書マクロ」。ある程度スキルを磨いたら「これをクラスを使って実装したら?」という疑問が出てくるもの…このシリーズで実際に作ってみましょう。
  1. エクセルVBAでクラスを使った請求書マクロの概要と使用するクラスの定義
  2. エクセルVBAでシートモジュールに請求書マクロのデータをコレクション化する処理を書く
  3. エクセルVBAでクラスとコレクションを使うと簡単に請求書のデータ抽出できる
  4. エクセルVBAでクラスを使った請求書でクロの日付関連の処理を作る
  5. エクセルVBAでクラスを使った請求書マクロでシートのコピー&保存処理を作る

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

コメント