【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門

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


Left, And Right

Stigson_united / Pixabay

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

請求データ一覧から請求書を自動で作成するシリーズのVBA講座ですが、なんと今回で5回目となりました。

前回までで請求データの請求書ひな形へのデータの転記はほぼ完成という形になりました。

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

しかしながら、エクセルとVBAの技を駆使することで、もっともっと実用的にそして便利にしていくことができます。

気持ち的にはこれの100倍くらいは便利にすることができます。

今回は、今後それはもうお世話になりまくりになるはずの条件分岐If~Thenの使い方をマスターすることで、特定の月のデータだけを請求書ひな形に転記するというプログラムにパワーアップをしていきます。

それではどうぞよろしくお願いします!

スポンサーリンク

請求データに納品日が追加されました

今回から請求データには以下のフォーマットを使います。前回と比べるとA列に納品日のカラムが挿入された形です。

請求データに納品日を追加

納品がされた品目については納品日の列にその日付が”YYYY/MM/DD”の日付形式で記録されています。まだ納品がされていない品目については未記入となっています。

一般的に請求書を作る場合は、ひと月ごとに締めて、その月内に納品がなされた品目について請求書を作成しますよね。

請求書を作成する対象月が5月だったとすると、この請求データでいうと4,5,7行目のみを拾って請求書ひな形に転記するという条件分岐の処理が必要になってきます。

まさかフィルタで絞ってコピペとかやってませんよね?

毎月のお仕事ならVBAで組んでしまったほうがはるかに時短できますよ。

前回のプログラムのおさらい

さて、請求データをそのまま全て請求書ひな形に転記するプログラムを前回までの記事で完成させています。今回はここからスタートをします。

請求データのフォーマットが変更になっているので、前回の記事で完成したプログラムに少し修正を加えています。よろしければ、どこがどう変更になっているか確認してみてください。

対象月の分のみのデータを取得すべく方針を整理

上記プログラムを修正して2015年5月に納品された分のデータのみを転記するようにしたいと思います。

まず、上記プログラムではカウント変数iを使ったFor~Nextで、請求データの2行目から7行目まで順番になめていきます。

その際にそれぞれの行について、納品日が2015年5月のものかどうかについて判断すればよいですね。

もしそうならば転記をする、そうでなければ転記の処理をスルーする、という流れです。

プログラム風に書くとこのような感じですね。

隅付き括弧の部分をIf~Thenを使って記述していくということになります。

その前に、今回は条件として納品日の年、月を知る必要がありますので、先にその方法を解説していきます。

年、月、日を取得

日付から年、月、日を取得するには以下のように記述します。

Year(日付)
Month(日付)
Day(日付)

なんだかそのまんまですね。例えば

を実行すると

年月日の取得結果

と表示されます。年、月、日がそれぞれ取得できていることがわかりますね。

If~Thenを使った条件分岐の書き方

条件分岐の記述は

If 条件式 Then

(処理)

End If

と書きます。

ただ今回は、年が2015でかつ月が5である、といったように複数の条件を使ったIf文になりまして

If 条件式A And 条件式B Then

(処理)

End If

を使います。

今回の場合の条件式は年が2015でかつ月が5であれば良いわけですから

とすればOKです。

余談になりますが、AndがあればOrもあるだろうということで、補足しておきます。

複数条件を使う場合にまたはで条件式をつなぎたい場合は

If 条件式A Or 条件式B Then

(処理)

End If

と記述すればOKです。

今回のプログラム

以上のIf~Then文をプログラムに組み込んでみますと

となります。

変数dayDataを使わずに、wsData.Cells(i, 1).Valueをそのまま使用してもいいのですが、If文がとても長くなってしまうので変数を使うことにしました。

まとめ

If~Then文を使って特定の条件のデータのみを請求書ひな形に転記するというプログラムに修正をしました。

と思いきや、今回のプログラムには不備がいくつかありまして…

次回の記事で不備を修正しながら、プログラムをスッキリする方法についてお伝えしていますので、合わせてご覧くださいませ。

【初心者向けエクセルVBA】Public変数の宣言とSubプロシージャの呼び出し
請求データ一覧から請求書を自動で作成するシリーズも第6回目となりました。Public変数の宣言、別のSubプロシージャの呼び出しなどによりプログラムをスッキリしつつ、うっかり発見した不具合を直していきます。
どうぞお楽しみに!

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

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