【初心者向けエクセルVBA】データ一覧から請求書を自動で作る

★気に入ったらシェアをお願いします!


Invoice

yourschantz / Pixabay

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

いよいよVBAの実用的な記事を更新させて頂きますよ!

今回から何回かにわたって

請求データ一覧から請求書を自動で作成する

を目標に進めていきたいと思います。

請求書でなかったとしても、特定のデータ一覧から特定の帳票を作成するというケースはビジネスの上ではかなり頻度が高いと思いますので、様々な場面で応用が利く内容といえます。

エクセルを使う日本の全ての方が、ここまでできるようになると、日本の生産性は飛躍的に上がるでしょう。

その日を夢見て…よろしくお願いします!

とその前に、VBAが全くの初心者という方は以下2つの記事をさらっていただけると良いです。

エクセルVBA超入門!たった10分でスタート地点に立つための方法
エクセルVBA…まず何をしたら良いかわからない…!という声をよく耳にします。今回はVBAプログラミングをいざ書き始める直前の状態を目標に、エクセルVBAの最低限のセッティングの仕方についてお伝えします。
エクセルVBA超入門!プログラミングと変数の基礎中の基礎
この記事はVBAの超入門ということで、簡単なVBAプログラムの例を題材にして、プロシージャや変数、コメントなどの基本的なプログラムの書き方とその実行の仕方について理解いただくのを目標にしています。

ちなみに、あまり時間がとれないよ~という方でも進められるように、都度必要となる最低限のVBAの学びに触れるのみで、がむしゃらに先に進んでいくスタイルをとりたいと思います。

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

スポンサーリンク

請求データと請求書のひな形を用意する

使用するエクセルファイルには「請求データ」と「請求書ひな形」の2つのシートが作成されているとします。

今回題材とする請求データ一覧はこちら、数量、単価、価格といった元データが品目別に入力されています。

請求データ一覧

実務上は取引先情報や日付など、その他の情報もあるのでしょうが後程追加していきますので、今は無視しますよ~。

さて、こちらが請求書ひな形です。

請求書ひな形

請求データから、請求書ひな形のに転記して目的の請求書を完成させる、というのを最初の目標とします。具体的には以下赤枠部分をVBAで作成することになります。

VBAによる入力箇所

現段階では青枠部分は計算式、その他はベタ打ちでOKです。

請求データをひな形に転記するVBAプログラム

ではVBEを開いて、以下のSubプロシージャを作成、実行してみてください。

実行結果として、このように請求ひな形シートにデータが転記されていればOKです。

シートとセル-VBA実行結果

上記のVBAプログラムですが、行数は多いですがやっていることは

  • シートを操作する準備
  • セルの値の転記

という2つだけです。以降でそれぞれを解説していきます。

Worksheetオブジェクトの準備

シートを取り扱うときは操作したいシートをオブジェクト変数にセットして使うのが便利です。

エクセルVBAでは、ブック(Workbook)、シート(Worksheet)、セルとその範囲(Range)などエクセルで取り扱う様々な要素を操作することができまして、それをオブジェクトと呼びます。

それらのオブジェクトを取扱う際には

  • オブジェクト変数の宣言
  • オブジェクトのSet

という準備をし、オブジェクト変数を使うと良いです。

Worksheetオブジェクト変数の宣言

今回はシートを使いますので、Worksheetオブジェクトの準備をします。

Worksheetオブジェクトを入れるための箱となるオブジェクト変数の宣言

Dim オブジェクト変数名 As Worksheet

と書きます。

数値や文字列の変数宣言と同じですね。型の指定の代わりに”Worksheet”を記述すればOKです。

WorksheetオブジェクトのSet

次に宣言したオブジェクト変数に、実際に使うシートをセットします。

現在アクティブになっているブックの特定のシートをオブジェクト変数にセットする場合

Set オブジェクト変数名 = ActiveWorkbook.Worksheets(“シート名”)

と記述します。

数値や文字列の変数でいうと代入のようなものなのですが、オブジェクト変数の場合は冒頭にSetと記述する必要がありますので注意ください。

シート名は

シート名

このシート名が該当しています。”sheet1″のままだったり、コロコロ変更したりすると、VBA的には取扱いづらいのきちんとシート名をつけましょう。

ActiveWorkbook.Worksheetsについてですが、ピリオドは”の”だと思って頂ければよいです。つまり「アクティブなブック”の”ワークシート」ということです。

これで「請求データ」がwsData、「請求書ひな形」がwsInvoiceというオブジェクト変数として取扱いできるようになりました。

セルの値を操作~CellsとValue

シートの準備ができましたので、「請求データ」のセルの値を「請求書ひな形」のセルに転記していきます。

特定のセルの値は

Worksheetオブジェクト.Cells(行数, 列数).Value

と表現します。

この場合もピリオドは”の”と理解すれば良いですね。「ワークシート”の”特定のセル”の”値」ということです。

この場合、

「請求書ひな形」の21行1列のセルに「請求データ」の2行1列のセルの値を書いて

という意味となります。

まとめ

今回はここまでですが、

  • Worksheetオブジェクトの宣言とSet
  • セルの値の操作

についてご理解を頂けたかと思います。

オブジェクトの概念については、わかりづらいと思われる方もいらっしゃるかも知れませんが、経験を重ねれば理解できるものなので心配しなくて良いです。

セルの操作に関しては、今回は正直無駄に行数が多くなるような書き方をしちゃっています。

第2回のこちらの記事でスッキリ書ける方法をお伝えしていますので、続けてお読み下さいね。

【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
エクセルVBAではコピー&ペーストを自動化するという処理がよく活用されますが、その際に活用する繰り返し処理用の命令であるFor~Next文を徹底的に解説し、請求書の自動作成プログラムを簡略化していきます。

では、素敵なエクセルVBAライフをどうぞ!

連載目次:データ一覧から請求書を自動で作る

  1. 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
  2. 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
  3. 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
  4. 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
  5. 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
  6. 【初心者向けエクセルVBA】Public変数の宣言とSubプロシージャの呼び出し
  7. 【初心者向けエクセルVBA】InputBoxでの日付入力と月末日の自動算出
  8. 【初心者向けエクセルVBA】Worksheetのコピーを活用して複数の請求書を作る
  9. 【初心者向けエクセルVBA】ファイルのコピーを使って取引先別の請求書を作る