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

Invoice

yourschantz / Pixabay

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

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

今回から何回かにわたって請求データ一覧から請求書を自動で作成することを目標に進めていきたいと思います。

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

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

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

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

429 Too Many Requests
エクセルVBA超入門!プログラミングと変数の基礎中の基礎
この記事はVBAの超入門ということで、簡単なVBAプログラムの例を題材にして、プロシージャや変数、コメントなどの基本的なプログラムの書き方とその実行の仕方について理解いただくのを目標にしています。

今回は、請求書マクロで目標としていることの説明とともに、エクセルVBAで重要な役割を持つオブジェクト、またそのプロパティという概念について簡単に解説していきます。

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

なお、本記事は以下のYouTube動画と連動をしていますので、合わせてご覧いただければと思います。

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

スポンサーリンク

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

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

今回題材とする請求データはこちら。

エクセルVBAで使用する請求データ

数量、単価、価格といった元データが品目別に入力されています。

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

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

エクセルVBAで使用する請求書ひな形

なお、この請求書データについては以下からダウンロードいただいてもOKです。

請求データ.xlsm

どうぞご活用ください。

請求書マクロの目標

請求データから、請求書ひな形のに転記して目的の請求書を完成させる、というのを最初の目標とします。

具体的には以下赤枠部分をVBAで作成することになります。

エクセルVBAで算出するセルと計算式によるセル

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

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

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

Sub 請求書作成()

'2行目を請求書ひな形に転記
Sheet2.Cells(21, 1).Value = Sheet1.Cells(2, 1).Value
Sheet2.Cells(21, 2).Value = Sheet1.Cells(2, 2).Value
Sheet2.Cells(21, 3).Value = Sheet1.Cells(2, 3).Value

'3行目を請求書ひな形に転記
Sheet2.Cells(22, 1).Value = Sheet1.Cells(3, 1).Value
Sheet2.Cells(22, 2).Value = Sheet1.Cells(3, 2).Value
Sheet2.Cells(22, 3).Value = Sheet1.Cells(3, 3).Value

'4行目を請求書ひな形に転記
Sheet2.Cells(23, 1).Value = Sheet1.Cells(4, 1).Value
Sheet2.Cells(23, 2).Value = Sheet1.Cells(4, 2).Value
Sheet2.Cells(23, 3).Value = Sheet1.Cells(4, 3).Value

End Sub

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

エクセルVBAで算出するセルと計算式によるセル

上記のVBAプログラムですが、行数は多いですがやっていることはセルの値の転記だけです。

オブジェクトとワークシートとセル

エクセルVBAでは「ワークシート」や「セル」 など、プログラムで操作する対象をオブジェクトといいます。

例えば「請求データ」シートの「A2」セルを、「請求書ひな形」シートの「A21」セルに転記する場合、以下の4つのオブジェクトが関係してきます。

  • 「請求データ」シート
  • 「請求書ひな形」シート
  • 「請求データ」シートの「A2」セル
  • 「請求書ひな形」シートの「A21」セル

ワークシートを表すWorksheetオブジェクト

上の2つは、ワークシートを表すので「Worksheetオブジェクト」という種類のオブジェクトになります。

それぞれ、「Sheet1」「Sheet2」という表記で表現することができます(これはオブジェクト名といいまして、詳しくは次回以降の記事で解説をします)。

セル範囲を表すRangeオブジェクト

セルは「Rangeオブジェクト」という種類のオブジェクトになります。

なお、Rangeオブジェクトは「A2」などといった単体のセルだけではなく、「A2:D4」などといったセル範囲も表現することができます。

Cellsプロパティでセルを取得する

セルはワークシート上にありますので、ワークシートとセルは親子関係にあります。

ですから、「このワークシートのこの位置ですよ~」と表現することで、目的のセルを表すRangeオブジェクトを取得することができます。

そのために使うのがCellsプロパティと呼ばれるものです。

書式は以下になります。

Worksheetオブジェクト.Cells(行番号, 列番号)

行番号と列番号は数値で表現します。

例えば、「請求データ」シートの「A2」セルであれば、Worksheetオブジェクトは「Sheet1」、行番号は2、列番号は1ですから、以下のように表現することができます。

Sheet1.Cells(2, 1)

プロパティとは

プロパティとはオブジェクトの状態や値、持ち物などを表すものです。

オブジェクトの種類に応じて、プロパティは色々な種類があり、総じて以下の書式で表現されます。

オブジェクト.プロパティ

Worksheetオブジェクトであれば、シート名を表すNameプロパティなどがわかりやすい例ですね。

Valueプロパティで値を取得する

データの転記をするのを考えると、コピーをするのは、セルつまりRangeオブジェクトではなく、そのセルに入力されている「値」です。

セルの値を取得するには、Valueプロパティというものを使います。

以下のように表現します。

Rangeオブジェクト.Value

つまり、「請求データ」シートの「A2」セルの値であれば

Sheet1.Cells(2, 1).Value

と表すことができます。

Valueプロパティに値を設定する

プロパティは参照するだけでなく、値を設定することもできます。

Rangeオブジェクトの値、つまりValueプロパティを設定するのであれば、以下のように記述します。

Rangeオブジェクト.Value = 値

ですから、例えば以下のようなことであれば

Sheet2.Cells(21, 1).Value = Sheet1.Cells(2, 1).Value

「請求データ」シートの「A2」セルの値を、「請求書ひな形」シートの「A21」セルの値として設定せよ、という命令ということになります。

まとめ

以上、データ一覧から請求書を自動で作るマクロの最初の解説を送りしました。

  • オブジェクトとは何か
  • ワークシートを表すWorksheetオブジェクト
  • セル(およびセル範囲)を表すRangeオブジェクト
  • プロパティとは何か
  • Cellsプロパティでシートのセルを取得する
  • Valueプロパティでセルの値を取得する

などなど、けっこう盛りだくさんでしたが、どれも重要な基本になります。

しっかり押さえておいてくださいね。

次回は、Worksheetオブジェクトを指定するのに便利な「オブジェクト名」について解説をしていきます。

【初心者向けエクセルVBA】ワークシートをオブジェクト名で取り扱う方法
初心者向けエクセルVBAで請求書を作成するシリーズ。今回は、エクセルVBAで頻繁に取り扱うワークシートを「オブジェクト名」を使って指定する方法です。オブジェクト名とは何か、またその編集方法もお伝えします。

どうぞお楽しみに!

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

お仕事において特定のデータ一覧から必要な情報を抽出するということは頻繁にありうると思います。ここではデータ一覧から請求書を作るということを目標に、実務で使えるスキルをまっすぐに身に着けることを目的としています。
  1. 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
  2. 【初心者向けエクセルVBA】ワークシートをオブジェクト名で取り扱う方法
  3. 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
  4. 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
  5. 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
  6. 【初心者向けエクセルVBA】セル範囲を一気にまとめてコピーする方法
  7. 【初心者向けエクセルVBA】ワークシートのデータのある範囲だけをピッタリ取得する方法
  8. 【初心者向けエクセルVBA】セル範囲の平行移動をする方法・リサイズをする方法
  9. 【初心者向けエクセルVBA】日付データから年・月・日を取り出す
  10. 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
  11. 【初心者向けエクセルVBA】For~Next文でセル範囲を一行ずつ移動させる
  12. 【初心者向けエクセルVBA】セル範囲のクリア~ClearContentsメソッドとClearメソッド
  13. 【初心者向けエクセルVBA】ワークシート・セルを選択する方法の色々について
  14. 【初心者向けエクセルVBA】入力ダイアログを表示するInputBoxメソッドの使い方
  15. 【初心者向けエクセルVBA】日付データから月末日と翌月末日を自動算出する
  16. 【初心者向けエクセルVBA】ワークシートをコピーする方法とそのシート名を変更する方法
  17. 【初心者向けエクセルVBA】オブジェクトを変数にセットして取り扱う方法
  18. 【初心者向けエクセルVBA】Openメソッドで新たなブックを開く方法
  19. 【初心者向けエクセルVBA】現在マクロを書いているブックのフォルダパスを取得する
  20. 【初心者向けエクセルVBA】開いたブックとそのワークシートをオブジェクト変数にセットする
  21. 【初心者向けエクセルVBA】ワークブックを別名で保存して閉じる方法
  22. 【初心者向けエクセルVBA】取引先別に請求書を作成するマクロを作る
タイトルとURLをコピーしました