【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更

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


Alphabet

Counselling / Pixabay

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

まだまだ続きます請求データ一覧から請求書を自動で作成するシリーズのVBA講座の第4回目です!

以下の前回記事までで、請求データの請求書ひな形へのデータの転記をデータの数に限らず処理する、というところまでできました。

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

実はちょっとまだ片手落ちのところがありまして…。

今回は文字列を連結する文字列の書式を変更するといったいくつかのテクニックを駆使しまして、請求書を自動で作成するVBA序盤の完成をみたいと思います。

では、よろしくお願いします!

スポンサーリンク

前回のおさらい:ご請求金額は結局いくら…?

「請求データ」シートから「請求書ひな形」にデータを転記するというプログラムですが、Rows.Countなどの行を取り扱う技を活用して請求データの行数に限らず実行できるようになりました。

このプログラムをいざ実行してみましょう!

VBAで請求書-請求金額が出ていない

結局いくらなん!?

赤枠の箇所、合計金額が記載なしですね…ということで、まだ未完成でしたね…。てへ。

請求金額について手打ちで入力するでもいいのですが、せっかくなのでVBAプログラムを使って自動で入力させるようにしていきましょう。

文字列を&で連結する

今回の例の場合ですと、A18のセルに「ご請求金額:9,288,324円」と出るようにすれば良いということになります。

計算式によってD54セルに合計金額が算出されますので、これを活用するのが良いですね。

イメージとしては「”ご請求金額:” + D54セルの値 + “円”」のように各要素を文字列として連結できればOKですね。

VBAで文字列の連結する場合は演算子&を使いまして

文字列A & 文字列B

とします。

従いまして、今回の場合は

とすればOKです。

RangeオブジェクトとCells

Rangeというのが出てきましたが、セルの場所を指定することができます。

この場合、同じように使えるCellsがあるのですが記述方法が異なります。

Cellsはこのように行数、列数をカンマで区切って場所を指定

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

これに対して、Rangeはアルファベットと数字の組み合わせで指定したセル位置を用いて

Worksheetオブジェクト.Range(セル位置).Value

と表します。セル位置はエクセルではお馴染みのA1などという表現で、それをダブルクオーテーションで囲う必要があります。

例えばCells(1,1)とRange(“A1”)は同じということになります。

今回の場合は、For~Nextなどでセルを移動させることがなく、ピンポイントでセルの位置を指定するのでRangeの記述を使ったほうがわかりやすいということですね。

CalculateでWorkSheetの再計算

ではこれで実行してみましょう!

VBAで請求書-自動計算がされてない

って、あれ?0円!?

請求額が0円になってしまいました。これでは赤字です。

この原因なのですが本来は

  1. 請求データから請求書ひな形に転記
  2. D列の計算式の再計算
  3. ご請求金額の文字列の生成

という順番で行わなければいけないところを、VBAプログラムでは2の再計算を行われることなく3が実行されてしまっていることによります。

再計算を行う前はD54は0のままになっており、それを用いて文字列を生成しているので、当然「0円」という表示になってしまいます。

これを避けるために1と3の間にシートの再計算をプログラムすればOKです。

Worksheetオブジェクト.Calculate

これで指定したワークシートの再計算をします。簡単ですね。

今回の場合ですと、

とすれば良いということになります。

Format関数で指定の書式に変換

では早速実行してみましょう!

VBAで請求書-カンマ区切りがない

…って正しいは正しいのですが、ちょっとカッコ悪いですね。

何がかっこ悪いかというと、ビジネス文書としてはカンマ区切りが欲しいです。

このようなときは特定の値を指定した書式に変換するFormat関数というものを使います。

Format(値,書式)

書式についてですが、今回は”#,##0″というように指定してあげます。

何だこれ!?という感じですが、どこかで見たことありませんか?

エクセルで「特定のセルを右クリック→セルの書式設定→ユーザー定義」と操作した際の

セルの書式設定

これです。

「書式」は英語で”format”ですね。

“#,##0″は「3桁ごとにカンマを入れつつ値がゼロの時は0と表示する」という書式です。短い記述ですが、なかなか深みがありますね。

他にも色々な書式がありますが、それについては「セルの書式設定」もしくは以下ページで研究をしてみてください。

Excel VBA の Format 関数を紹介します。Format 関数は、値を指定した書式で文字列型 に変換します。数値や日付を指定の形式に変換したいときに使用します。四捨五入をするときにも使用します。

結果として今回のプログラムとしては

と記述すればOKです。これでカンマ区切りのご請求金額が表示されます。

まとめ

  • 文字列を&で連結する
  • CalculateでWorkSheetの再計算
  • Format関数で指定の書式に変換

などのテクニックを駆使して請求データから請求書を自動で作成するというVBAプログラムを完成させることができました。

今回のプログラムはこちらです。

文字列の処理はこれから何回もお世話になる基本テクニックですので、ぜひマスターして頂ければと思います。

さて、完成とは言いましたが

  • 年月が複数混在しているデータ群の中から対象となる年月のデータだけ転記したい
  • 取引先が複数混在しているデータ群の中から対象となる取引先のデータだけ転記したい

というニーズは当然出てきます。当然です。

ということで、第5回はVBAで今後しこたまお世話になるIf~Thenの超入門編をマスターしつつ、このプログラムをさらに発展させていきますので、合わせてお読みください。

【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
請求データ一覧から請求書を自動で作成するシリーズのVBA講座も第5回目です。今回は間違いなくお世話になる条件分岐If~Thenの使い方の超基本をマスターしていき特定のデータのみ転記するように改良していきます。

引き続きどうぞよろしくです!

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

  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】ファイルのコピーを使って取引先別の請求書を作る