もし~だったらの条件分岐エクセル関数IFをVBAで代用する方法

エクセル検索
HOMEUserForm印刷画面ファイル図形
日付・時刻データセル関数VBA関数

条件分岐というと難しいですが、もし~だったら、そうでなかったらってよくありませんか?

そしてエクセル関数でも使うIF関数をエクセルVBAでも高頻度で使うので、基本からご紹介します。

条件によって処理を振り分けるIFステートメント

基本的な考え方は「IF関数」と全く一緒なので、書き方だけをマスターすればいろいろなVBAコードに応用できます。

ここでは「和暦西暦変換対応カレンダー」を作った時に、黒色文字で日付を表しますが土日祝日だったら赤色文字にするとい例を簡単に記載しています。

1つの条件を満たした時だけ処理を実行する

下の図のセルD12の値は「0」になっています。セルD13の値のように「0」以外の数字もあります。

D列の値はカレンダーの関係上祝日は月によって替わるので、基本は「0」にしておいて祝日の時だけ文字列表示しています。

考え方としては、『もしセルD5の値が「0」だったら、文字色を黒色にする』という、1つの条件を満たした時だけ処理を実行するVBAコードを使っています。

カレンダー日付一覧

この場合、IFステートメントを使いこのような式になります。

IF 条件式 Then
処理
End If

実例の式をVBAコードで書くとこのようになります。

VBAコード

Private Sub CommandButton1_Click()
If Range(“D12”).Value = 0 Then
CommandButton1.ForeColor = RGB(0, 0, 0)
End If
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. もしセルD12の値が「0」だったら
  3. コマンドボタン1の文字色を黒色にする
  4. Ifステートメント終了
  5. マクロ終了

これで、条件に合った時だけ処理をして、合わない時は何もしないということができるようになります。

1つの条件を満たした時の処理と満たさなかった時で処理を振り分ける

次に、IF関数と同じように「もし~だったら、○○、そうでなかったら××」をVBAコードで書いていきます。

下の図は住所録を抜粋した画像で、「更新済」と「未更新」を振り分けています。

住所録更新状況

画像にはありませんが、セルP2に基準日が入力されています。

この基準日以降に手続きをしていれば更新「済」、そうでなければ「未更新」と処理を振り分けています。

この場合、IFステートメントを使いこのような式になります。

IF 条件式 Then
処理1
Else
処理2
End If

先ほどと違うのは、Elseの後に満たさなかった時の処理が加わっています。

VBAコード

Private Sub CommandButton1_Click()
If Range(“AV2”).Value >= Range(“P2”) .Value Then
Range(“AX2”).Value = “済”
Else
Ranbe(“AX2”).Value = “未更新”
End If
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. セルAV2の値がセルP2の値より大きかったら
  3. セルAX2の値を「済」にする
  4. そうでなかったら
  5. セルAX2の値を「未更新」にする
  6. Ifステートメント終了
  7. マクロ終了
波乗りアヒル

エクセルのワークシートで使うIF関数同様にVBAでも使用頻度が高いので、応用しながらマスターしましょうね。

関連記事

どこかにビューーン
ちょっとの工夫で往復無料の時代が来た!!

新着ページ

よく見られているページ

大容量無料ファイル転送サービス【ACデータ】 無料イラスト【イラストAC】

紅葉スポット

2024年5月11日からマイルと楽天ポイントとの相互交換提携開始!

交換レート0.5:1なので半分になってしまいますが、使い方次第で実質3倍の価値まで引き上げられる方法です。