自動化に欠かせないIIf関数とIf|みどシステム工房
自動化に欠かせないIIf関数とIf
事務処理をするときには、いろいろな手順があります。
アプリに事務処理の手順を組み入れないと自動化できません。
IIF関数やIfが、手順通りに処理の流れを変えます。

ゴールデンゲートブリッジ
フリーウエイ164とサンディエゴダウンタウン
【アメリカ合衆国カルフォルニア州】


はじめに

Excelで使われているIf関数が、AccessではIIf関数に相当します。

IIf関数は、ExcelのIf関数とほぼ同じ働きをします。

IIf関数はVBAでも使えますが、VBAで条件分岐の記述に使うのはIfになります。

IIf関数

IIf関数は、次の式で表され、条件が真(True)か偽(False)かいづれか一つの値を返します。

IIf([式],[真],[偽])

(例)クエリで[借方科目]がフォーム上のテキスト枠と同じであれば[借方金額]を表示させ、そうでなければ[0]を表示させる。

借金額: IIf([借方科目]=[Forms]![f_メニュー]![テキスト元帳],[借方金額],0)

(例)偽のところでさらにIIf関数で条件を付けていくこともできます。

相手方科目: IIf([借方科目]=[Forms]![f_メニュー]![決算元帳コンボ],[貸方科目],IIf([貸方科目]=[Forms]![f_メニュー]![決算元帳コンボ],[借方科目],""))

 

【AD】

 

If

VBAで条件分岐の記述に使います。

If関数は、次のようにステートメントを実行します。

1 条件が真の時にステートメントを実行する。

If [条件] then
[条件が真のときに実行するステートメント]
End If

2 Ifの[条件]が偽の場合、Elseのステートメントを実行します。

If [条件] then
[条件が真のときに実行するステートメント]
Else 
[条件が偽のときに実行するステートメント]
End if

3 Ifの[条件]が偽の場合、Elseifの[条件]を検証し、偽の場合、Elseのステートメントを実行する。

If [条件] then
[条件が真のときに実行するステートメント]
Elseif [先の条件が偽のときの条件] then
[条件が真のときに実行するステートメント]
Else
[条件が偽のときに実行するステートメント]
End if

Elseifで条件をいくつも付けていくこともできますが、条件が増えていくとかなり複雑になり、コードも読みづらくなります。

そんな時は、Select Case というのもあるので、これを使えば、コードがすっきりとします。

 

VBAサンプルコード

フォームやレポートを開くとき、データの有無をメッセージボックスで知らせるサンプルコードです。

 

サンプルコード1

Private Sub cmd_レポート_Click()
If IsNull(DLookup("日付", "tb_データ")) = True Then
    MsgBox "データがありません。", vbExclamation, "処理結果"
    Exit Sub
End If
End Sub

データテーブルの日付を参照してレコードがない場合、メッセージボックスを表示して処理を終了する。

  1. DLookup関数で[tb_データ]デーブルの[日付]を参照し、IsNull関数でレコードが存在しないことを確認する。
  2. メッセージボックスを表示する。
  3. 処理を終了する。

 

サンプルコード2

Private Sub cmd_レポート_Click()
If DCount("日付", "tb_データ", "日付=Forms!f_メニュー!tx_日付") = 0 Then
MsgBox "データがありません。", vbInformation, "処理結果"
Exit Sub
Else
DoCmd.OpenReport "rp_レポート", acViewPreview
End If
End Sub

フォーム上に表示されている日付のレコードをカウントし、0レコード場合、メッセージボックスを表示して処理を終了し、それ以外はレポートを表示する。

  1. DCount関数でメニュー(フォーム)上の日付と同日の[tb_データ]デーブルの[日付]レコードをカウントし、0を確認する。
  2. メッセージボックスを表示する。
  3. 処理を終了する。
  4. カウントしたレコード数が0ではない場合、レポートを表示する。

 

サンプルコード3

Private Sub cmd_ボタン_Click()
If IsNull(tx_日付) = True Then
    MsgBox "日付が未入力です", vbExclamation, "処理結果"
  Exit Sub
ElseIf IsNull(tx_摘要) = True Then
    MsgBox "摘要が未入力です", vbExclamation, "処理結果"
  Exit Sub
ElseIf IsNull(tx_金額) = True Then
    MsgBox "金額が未入力です", vbExclamation, "処理結果"
  Exit Sub
Else
(処理の記述)
End If
End Sub

フォーム上のテキストボックスに入力があるかどうか順番に確認していき、未入力の場合はメッセージボックスを表示して処理を終了する。すべて入力されている場合は、記述されている処理を実行する。

  1. 日付のテキストボックスが未入力の場合、メッセージボックス表示し処理を終わる。
  2. 摘要のテキストボックスが未入力の場合、メッセージボックス表示し処理を終わる。
  3. 金額のテキストボックスが未入力の場合、メッセージボックス表示し処理を終わる。
  4. 未入力がない場合、Else以下の処理をする。

 

まとめ

IIf関数とIfは、アプリになくてはならない存在です。

 

【AD】