【VBAリファレンス|実務向け】実践的なIF関数~日付関係においてのIF関数~(Excel2016)

スポンサーリンク

1. 導入:なぜ日付×IF関数が重要なのか

Excel業務において、支払日や期限の管理は避けて通れない作業です。「15日締めなら翌月20日払い」「土日なら前倒し」といった複雑なルールを手作業で計算していませんか?これらはヒューマンエラーの温床となりやすく、非常に非効率です。
本稿では、IF関数と日付関数を組み合わせることで、こうした「条件付きの日付計算」を自動化する方法を解説します。実務における業務効率化の第一歩として、ぜひマスターしてください。

2. 基礎知識:組み合わせるべき日付関数

IF関数は「条件を満たすか否か」で値を切り替える関数ですが、単体では日付の判定が難しい場合があります。そこで、以下の関数を補助的に用います。

DAY関数:日付から「日」の部分だけを取り出します(例:15日なら15を返す)。
WEEKDAY関数:日付から「曜日」を数値(1~7)で返します。土日の判定に必須です。
EOMONTH関数:指定した月の末日を算出します。翌月の1日を求める際にも便利です。
DATE関数:年・月・日の数値から正しい日付形式を作成します。

3. 実装:支払日を自動算出するロジック

例えば、「15日以前なら翌月20日、16日以降なら翌々月20日」というルールを実装する場合、IF関数は以下の論理で組み立てます。

「もし、購入日の『日』が15以下なら、『翌月の20日』を表示せよ。そうでなければ、『翌々月の20日』を表示せよ」

これをExcel関数に落とし込む際、DATE関数を使って年・月を操作することで、月をまたぐ計算(12月の翌月は1月にするなど)をExcelに自動で処理させることが重要です。

4. サンプルプログラム(VBAでの応用)

Excel関数だけでなく、VBAで同様のロジックを組むと、より柔軟な処理が可能です。以下は、セルに入力された日付を判定し、支払日を算出するマクロの例です。

Sub CalculatePaymentDate()
Dim purchaseDate As Date
Dim paymentDate As Date

‘ セルA1から日付を取得
purchaseDate = Range(“A1”).Value

‘ 15日以前かどうかの条件分岐
If Day(purchaseDate) <= 15 Then ' 翌月の20日を設定 paymentDate = DateSerial(Year(purchaseDate), Month(purchaseDate) + 1, 20) Else ' 翌々月の20日を設定 paymentDate = DateSerial(Year(purchaseDate), Month(purchaseDate) + 2, 20) End If ' 結果をセルB1に出力 Range("B1").Value = paymentDate MsgBox "支払日は " & paymentDate & " です。" End Sub

5. 応用・注意点:現場でのトラブル回避

・うるう年と月末の処理
DATE関数やVBAのDateSerial関数は、存在しない日付(例:2月30日)を指定すると、自動的に翌月へ繰り越して補正してくれます。この性質を理解しておくと、複雑な計算式を簡略化できます。

・土日の判定ミスに注意
WEEKDAY関数を使用する際は、引数の「種類」を意識してください。デフォルト設定では日曜日が「1」となります。土曜日を6、日曜日を7として判定する場合(種類2)など、用途に合わせて適切な引数を指定しないと、週末の判定でバグを引き起こす原因になります。

・メンテナンス性
数式が複雑になりすぎる場合は、作業用の列を設けるか、上記のようなVBAを活用して処理を分解することをお勧めします。誰が見てもロジックが追える状態にしておくことが、長期的な運用の鍵となります。

タイトルとURLをコピーしました