みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
いよいよVBAの実用的な記事を更新させて頂きますよ!
今回から何回かにわたって請求データ一覧から請求書を自動で作成することを目標に進めていきたいと思います。
請求書でなかったとしても、特定のデータ一覧から特定の帳票を作成するというケースはビジネスの上ではかなり頻度が高いと思いますので、様々な場面で応用が利く内容といえます。
エクセルを使う日本の全ての方が、ここまでできるようになると、日本の生産性は飛躍的に上がるでしょう。
その日を夢見て…よろしくお願いします!
とその前に、VBAが全くの初心者という方は以下2つの記事をさらっていただけると良いです。
今回は、請求書マクロで目標としていることの説明とともに、エクセルVBAで重要な役割を持つオブジェクト、またそのプロパティという概念について簡単に解説していきます。
ちなみに、あまり時間がとれないよ~という方でも進められるように、都度必要となる最低限のVBAの学びに触れるのみで、がむしゃらに先に進んでいくスタイルをとりたいと思います。
なお、本記事は以下のYouTube動画と連動をしていますので、合わせてご覧いただければと思います。
では、行ってみましょう!
請求データと請求書のひな形を用意する
使用するエクセルファイルには「請求データ」と「請求書ひな形」の2つのシートが作成されているとします。
今回題材とする請求データはこちら。
数量、単価、価格といった元データが品目別に入力されています。
実務上は取引先情報や日付など、その他の情報もあるのでしょうが後程追加していきますので、今は無視しますよ~。
さて、こちらが請求書ひな形です。
なお、この請求書データについては以下からダウンロードいただいてもOKです。
どうぞご活用ください。
請求書マクロの目標
請求データから、請求書ひな形のに転記して目的の請求書を完成させる、というのを最初の目標とします。
具体的には以下赤枠部分を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では「ワークシート」や「セル」 など、プログラムで操作する対象をオブジェクトといいます。
例えば「請求データ」シートの「A2」セルを、「請求書ひな形」シートの「A21」セルに転記する場合、以下の4つのオブジェクトが関係してきます。
- 「請求データ」シート
- 「請求書ひな形」シート
- 「請求データ」シートの「A2」セル
- 「請求書ひな形」シートの「A21」セル
ワークシートを表すWorksheetオブジェクト
上の2つは、ワークシートを表すので「Worksheetオブジェクト」という種類のオブジェクトになります。
それぞれ、「Sheet1」「Sheet2」という表記で表現することができます(これはオブジェクト名といいまして、詳しくは次回以降の記事で解説をします)。
セル範囲を表すRangeオブジェクト
セルは「Rangeオブジェクト」という種類のオブジェクトになります。
なお、Rangeオブジェクトは「A2」などといった単体のセルだけではなく、「A2:D4」などといったセル範囲も表現することができます。
Cellsプロパティでセルを取得する
セルはワークシート上にありますので、ワークシートとセルは親子関係にあります。
ですから、「このワークシートのこの位置ですよ~」と表現することで、目的のセルを表すRangeオブジェクトを取得することができます。
そのために使うのがCellsプロパティと呼ばれるものです。
書式は以下になります。
行番号と列番号は数値で表現します。
例えば、「請求データ」シートの「A2」セルであれば、Worksheetオブジェクトは「Sheet1」、行番号は2、列番号は1ですから、以下のように表現することができます。
Sheet1.Cells(2, 1)
プロパティとは
プロパティとはオブジェクトの状態や値、持ち物などを表すものです。
オブジェクトの種類に応じて、プロパティは色々な種類があり、総じて以下の書式で表現されます。
Worksheetオブジェクトであれば、シート名を表すNameプロパティなどがわかりやすい例ですね。
Valueプロパティで値を取得する
データの転記をするのを考えると、コピーをするのは、セルつまりRangeオブジェクトではなく、そのセルに入力されている「値」です。
セルの値を取得するには、Valueプロパティというものを使います。
以下のように表現します。
つまり、「請求データ」シートの「A2」セルの値であれば
Sheet1.Cells(2, 1).Value
と表すことができます。
Valueプロパティに値を設定する
プロパティは参照するだけでなく、値を設定することもできます。
Rangeオブジェクトの値、つまりValueプロパティを設定するのであれば、以下のように記述します。
ですから、例えば以下のようなことであれば
Sheet2.Cells(21, 1).Value = Sheet1.Cells(2, 1).Value
「請求データ」シートの「A2」セルの値を、「請求書ひな形」シートの「A21」セルの値として設定せよ、という命令ということになります。
まとめ
以上、データ一覧から請求書を自動で作るマクロの最初の解説を送りしました。
- オブジェクトとは何か
- ワークシートを表すWorksheetオブジェクト
- セル(およびセル範囲)を表すRangeオブジェクト
- プロパティとは何か
- Cellsプロパティでシートのセルを取得する
- Valueプロパティでセルの値を取得する
などなど、けっこう盛りだくさんでしたが、どれも重要な基本になります。
しっかり押さえておいてくださいね。
次回は、Worksheetオブジェクトを指定するのに便利な「オブジェクト名」について解説をしていきます。
どうぞお楽しみに!
連載目次:データ一覧から請求書を自動で作る
お仕事において特定のデータ一覧から必要な情報を抽出するということは頻繁にありうると思います。ここではデータ一覧から請求書を作るということを目標に、実務で使えるスキルをまっすぐに身に着けることを目的としています。- 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
- 【初心者向けエクセルVBA】ワークシートをオブジェクト名で取り扱う方法
- 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
- 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
- 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
- 【初心者向けエクセルVBA】セル範囲を一気にまとめてコピーする方法
- 【初心者向けエクセルVBA】ワークシートのデータのある範囲だけをピッタリ取得する方法
- 【初心者向けエクセルVBA】セル範囲の平行移動をする方法・リサイズをする方法
- 【初心者向けエクセルVBA】日付データから年・月・日を取り出す
- 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
- 【初心者向けエクセルVBA】For~Next文でセル範囲を一行ずつ移動させる
- 【初心者向けエクセルVBA】セル範囲のクリア~ClearContentsメソッドとClearメソッド
- 【初心者向けエクセルVBA】ワークシート・セルを選択する方法の色々について
- 【初心者向けエクセルVBA】入力ダイアログを表示するInputBoxメソッドの使い方
- 【初心者向けエクセルVBA】日付データから月末日と翌月末日を自動算出する
- 【初心者向けエクセルVBA】ワークシートをコピーする方法とそのシート名を変更する方法
- 【初心者向けエクセルVBA】オブジェクトを変数にセットして取り扱う方法
- 【初心者向けエクセルVBA】Openメソッドで新たなブックを開く方法
- 【初心者向けエクセルVBA】現在マクロを書いているブックのフォルダパスを取得する
- 【初心者向けエクセルVBA】開いたブックとそのワークシートをオブジェクト変数にセットする
- 【初心者向けエクセルVBA】ワークブックを別名で保存して閉じる方法
- 【初心者向けエクセルVBA】取引先別に請求書を作成するマクロを作る