みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
弊ブログには「エクセルVBAで請求書を作る」という初心者向けのシリーズがありまして、たいへん人気のある連載となっています。
こちらの記事からはじまるシリーズです。
反復、分岐、日付の操作、セルの読み書き、シートの操作、ブックの作成や保存など、ぜひ覚えておきたい要素がてんこ盛りなので、初心者向けの導入としては良い教材になるかと思います。
ただ、一通りだいたいマスターして、クラスなども少しかじってみたとします。
例えば、以下の記事からはじまる「初心者でもわかるエクセルVBAのクラスモジュール」のシリーズなどです。
そうなると、「昔作った、請求書マクロ。クラス使ったらどうなるんだろ?」となりませんか?
私はなりました。
ということで、本記事から新シリーズとして「エクセルVBAでクラスを使って請求書マクロを作る」を開始したいと思います。
「クラスってなんぞや?」という方は、前述の「初心者でもわかるエクセルVBAのクラスモジュール」のシリーズを一通り触ってみてください。
今回は、エクセルVBAでクラスを使った請求書マクロの概要と使用するクラスの定義ということでお送りします。
では、行ってみましょう!
請求書マクロのシート構成
まず、請求書マクロの元となるデータやひな形について確認しておきましょう。
エクセルファイル「請求データ.xlsm」は3つのシートで構成されています。
請求データ
まず、「請求データ」シート。
これは、各社へ請求すべき元データを品目別にまとめているシートになります。
このデータが請求書の元データとなります。
取引先マスタ
次が「取引先マスタ」シート。
これは、現在取引のある取引先の基本情報をまとめたマスタシートです。
毎月締めたところで、これらの取引先のうち、請求すべきデータが存在する取引先に、それぞれ請求書を作成する必要があります。
請求書ひな形
最後が「請求書」シートです。
これが、毎月作成する請求書のひな形となるシートとなります。
21行目から50行目まで、請求する品目と単価、数量を入力できるようになっています(図では一部の行について非表示にしています)。
このシートをベースに取引先ごとに請求書を作ることになります。
請求書マクロの動作
作りたい請求書マクロはこのようなものです。
- 実行するとInputBoxで年月の入力を受け付ける
- 取引先マスタに存在する取引先の分だけ、該当の年月に納品した請求データがあれば別のエクセルブックとして請求書を作成する
- ひな形のD15,D16セルに該当の年月から算出した請求日、支払期限を入力
- ひな形のA21~C50セルに該当の年月、該当の取引先の請求データを転記
- ひな形のA3~A7セルには取引先マスタから社名、郵便番号、住所を転記
ひな形のその他の部分は、ひな形にベタ打ち、もしくは数式で自動計算となっています。
データ行を表すクラスを作成する
さて、それで作成する請求書マクロですが、「クラス」を使うとお伝えしました。
どんなクラスを用意するか…なのですが、「初心者でもわかるエクセルVBAのクラスモジュール」のシリーズでお伝えした通り、エクセル表の1行分のデータは、クラス化すると便利だったりします。
クラスのプロパティの作成については以下の記事もご覧ください。
請求データを表すDataクラス
なので、まず「請求データ」シートの1行分を表すDataクラスを作ります。
納品日、取引先名、品目、単価、数量を表すプロパティを持たせれば良さそうですね。あ、「価格」は「単価×数量」で計算できるので、プロパティとしては追加せずに、いったん置いておきます。
なので、クラスモジュール「Data」はこんなコードを作りました。
Public DeliveryDate As Date
Public ClientName As String
Public ItemName As String
Public Price As Long
Public Quantity As Long
Dataクラスをインスタンス化するとDataオブジェクトになり、以下の部分のデータを持つことができるようになります。
取引先を表すClientクラス
続いて、「取引先マスタ」シートの1行分を表すClientクラスです。
こっちはわかりやすいですね。
取引先名、郵便番号、住所1、住所2をプロパティとして、クラスモジュール「Client」に以下のようなコードを書きます。
Public Name As String
Public PostalNumber As String
Public Address1 As String
Public Address2 As String
Clientクラスをインスタンス化すると、以下の部分のデータを持つことができます。
まとめ
以上、エクセルVBAの請求書マクロの概要と、使用するクラスの定義をしました。
まだはじまったばかりなので、全容がなかなか見えないかも知れませんが、一歩ずつ着実に進めていきますので、ぜひお付き合いください。
次回は、今回作成したクラスのインスタンスをコレクション化する部分を作っていきます。
どうぞお楽しみに!