【脱エクセルVBA初心者】請求書作成マクロの全体おさらいと総仕上げ

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


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

脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックについて連載でお伝えしてきました。

前回の記事はコチラ。

【脱エクセルVBA初心者】Vlookupで出てしまうエラーをいい感じに回避する方法
脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックをお伝えしています。今回はエクセルVBAでVlookupを使ったときに発生し得るエラーを回避する方法についてお伝えします。

Vlookup時に発生するエラーを上手に回避する方法についてお伝えしました。

これにて、請求書作成プログラムはだいぶ出来上がってきまして、残す処理はほんの少しとなりました。

過去の記事でお伝えしたテクニックも多く含まれますが、おさらいも含めまして総仕上げの解説をしていきます。

前回までのおさらい

前回までで作成したプログラムはこちらです。

請求データを年月×取引先の範囲ごとにまとめる

「請求データ」シートはこちら。

エクセルの請求データ

まずこのシートについて、wsDataSortで並び替えをします。

並び替えをした、「請求データ」シートを1行目から走査して、同じ納品月、同じ取引先である範囲をひとまとまりとします。

その判定を行っているIf文が24行目です。firstDayは日付を1日に揃える関数でこちらです。

【脱エクセルVBA初心者】データが含まれる範囲全体を一発で取得してSortで並び替え
脱エクセルVBA初心者向けのテクニックとして、CurrentRegionプロパティでデータ範囲を塊で取得して、それをSortメソッドで並び替えをする方法についてお伝えしていきます。
【脱エクセルVBA初心者】コピペはRangeが効率的なのでその範囲を見つけるプログラム
脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックについてシリーズ。請求データを塊つまりRangeで見つけられれば一気にコピペできるようになります。その「塊」を効率よく見つける方法です。

年月×取引先ごとにワークブックを作成する

範囲のまとまりごとに請求書を作成(つまり、年月×取引先ごと)しますが、個々のワークブックを新規作成しシート等の準備をしている箇所が28行目~38行目です。

こちらの「請求書ひな形」シートをコピーしてワークブックを作成します。

エクセルの請求書ひな形

【脱エクセルVBA初心者】新規のワークブックを作成、シートのコピーと名前の変更
エクセルVBAで「請求書を自動で作る」をテーマに、新規のワークブックを作成して請求書ひな形シートをコピーする方法、ワークシートのシート名を変更する方法、ブックやシートに関するTIPSについて書きました。

PDF出力の設定と実行

41行目~50行目でPDFの出力に関する設定を行い、69行目で実際に出力をしています。

【脱エクセルVBA初心者】PDFでの出力とファイル名の指定保存そして閉じる
脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックをお伝えしていますが、今回はエクセルVBAでワークブックを別名で保存しつつ、PDF出力して閉じる方法についてお伝えします。

請求データを範囲でコピー&ペースト

行目はたった1行ですが、対象とする範囲をまるっとコピーして、新しく作ったワークブックにペーストをする処理です。

【脱エクセルVBA初心者】Copyメソッドで範囲まるごとを一発でコピペする
脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックについての連載です。。今回は、範囲単位でまるごとコピペをする方法についてお伝えしつつ、請求書作成プログラムを作り込んでいきます。

Vlookupで取引先情報の抽出とエラー処理

57行目~61行目で以下の「取引先マスタ」シートから各種情報を抽出してきて、請求書に転記をします。

エクセルの取引先マスタ

Vlookupで目的のキーワードでヒットしない場合はエラーになってしまうので、それを回避するのが55行目の処理となります。

【脱エクセルVBA初心者】Vlookupで出てしまうエラーをいい感じに回避する方法
脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックをお伝えしています。今回はエクセルVBAでVlookupを使ったときに発生し得るエラーを回避する方法についてお伝えします。

今回のお題:請求書を整えていく

上記プログラムを実行して出力されるPDFはこのようになります。

エクセルVBAで作成した請求書

まだいくつか足りない部分がありますね。

  • 価格列と請求額金額総額が計算されていない
  • 請求日・支払期限が正しくない
  • 余計な行がたくさん含まれている

これらを直していく必要がありますね。上記プログラムでいうと67行目の箇所にこれらを直す処理を入れていきます。

数式の再計算と請求金額総額の表示

まずシートの再計算ですが、Worksheetオブジェクトに対するCalculateメソッドです。

Worksheetオブジェクト.Calculate

これで指定したシートの再計算を行います。

ですから今回の場合は

です、次にセルA18セルに請求金額を表示します。

これは、なんてことはないですね。

Formatを使って、カンマ入りにしています。以下の記事で詳しく説明しています。

【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
エクセルVBAで文字列を連結する、文字列の書式を変更するなどの「文字列」に関するいくつかのテクニックを紹介しつつ、データ一覧から請求書を自動で作成するというシリーズ連載の序盤の完成を目指します。

請求日と支払期限を算出

こちらは事前にdayCutoffというDate型の変数を宣言しておいて

とすればOKですね。DateSerialの第3引数をゼロにすると前月末になるというのがミソですね。

【初心者向けエクセルVBA】InputBoxでの日付入力と月末日の自動算出
請求データ一覧から請求書を自動で作成するシリーズのVBA講座の7回目です!今回はInputBoxによる入力フォームの表示と月末日の自動算出を活用して実用に耐えうるプログラムの完成を目指していきます。

余計な行を隠す

行を隠す場合はRowsオブジェクトに対するHiddenプロパティをTrueにします。

Worksheetオブジェクト.Rows(“開始行:最終行”).Hidden = True

今回の場合、品目の行数は(i-startRow)ですから

とすればOKです。

【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
今回は行数をカウントする、行を隠す、などの「行を取り扱うテクニック」を紹介しています。いずれもデータや帳票を扱ったエクセルVBAではかなり重宝するテクニックですので、知っておいて損はありませんよ。

実行結果

上記の各命令を66行目の下に挿入して実行します。

エクセルVBAで作成した請求書

全てバッチリ、きちんと反映されていますね。

まとめ

これまで8回に渡って、「脱エクセルVBA初心者」を目指して請求書作成プログラムを作成してきました。

  • PDFで出力する
  • データのコピペを範囲単位で実施
  • エラーの回避

など、より実用的かつプログラムの高めるような内容をいくつか習得頂けたのであれば嬉しく思います。

また実用的なVBAプログラムの作り方をお伝えしていきたいと思いますので、どうぞ楽しみにしていてください。

連載目次:【脱エクセルVBA初心者】請求書を自動で作る際のテクニック集

「請求書を自動で作る」というニーズはとても多いですから、その際に便利な機能やテクニックをシリーズにてお伝えしていきます。脱エクセルVBA初心者をターゲットにしています。
  1. 【脱エクセルVBA初心者】新規のワークブックを作成、シートのコピーと名前の変更
  2. 【脱エクセルVBA初心者】確認メッセージを表示させずにワークシートを削除する方法
  3. 【脱エクセルVBA初心者】PDFでの出力とファイル名の指定保存そして閉じる
  4. 【脱エクセルVBA初心者】データが含まれる範囲全体を一発で取得してSortで並び替え
  5. 【脱エクセルVBA初心者】コピペはRangeが効率的なのでその範囲を見つけるプログラム
  6. 【脱エクセルVBA初心者】Copyメソッドで範囲まるごとを一発でコピペする
  7. 【脱エクセルVBA初心者】Vlookupで出てしまうエラーをいい感じに回避する方法
  8. 【脱エクセルVBA初心者】請求書作成マクロの全体おさらいと総仕上げ

コメント

  1. nasu より:

    一生懸命みてやってみていますが、どうしてもできません、、、ここまでの結果のサンプルデータは公開されていないですよね、、、?

    • nasuさん

      コメントありがとうございます!
      当ブログではサンプルデータの配布はさせて頂いておりません。
      配布したツールをそのまま利用いただくのではなくて、VBAを学んでいただきたいという想いがありまして…申し訳ないです。