表内のデータを指定した条件で抽出し、別の表に転記したいケースはよくあります。ここでは、売上のデータの表から、指定した顧客のデータを抽出し、請求書を自動作成するVBAを解説します。
売上のデータが格納される表はワークシート「売上」のA4~F26セルとします(見出し行も含む)。列は左から日付、顧客、商品、単価、数量、金額とします。B2セルに目的の顧客名を入力し、右隣にある[請求書作成]ボタンをクリックすると、ワークシート「請求書」にその顧客の請求書が作成されます(図1)。
ワークシート「請求書」には、請求書のひな形をあらかじめ用意しておきます。[請求書作成]ボタンをクリックすると、A3セルに宛名として顧客名がワークシート「売上」のB2セルから転記されます。さらに指定した顧客の売上データを抽出して、6行目以降の表に転記します。転記するのは、「顧客」の列を除いたすべてです。これらの処理をマクロで自動化します。なお、E21セルの合計を求めるのにはマクロを使わず、あらかじめSUM関数を入力しておくとします。
以上の機能を備えたプログラムがリスト1にあるSubプロシージャ「請求書作成」です。コードは標準モジュールのModule1に記述しています。ワークシート「売上」の[請求書作成]ボタンは図形の角丸四角形で作成しており、右クリック→[マクロの登録]からSubプロシージャ「請求書作成」を登録することで、クリックで実行可能としています。
同SubプロシージャではString型変数cstmrを用意し、ワークシート「売上」のB2セルに入力された目的の顧客の文字列を格納して、以降の処理に用いています。まずは請求書の宛名欄に顧客名を入力する処理に用いています(1)。また、Subプロシージャ全体で、ワークシート「売上」のオブジェクトである「Worksheets("売上")」の記述はWithステートメントを利用してまとめています(2)。