2020.08.29
Excelで使われているIf関数が、AccessではIIf関数に相当します。
IIf関数は、ExcelのIf関数とほぼ同じ働きをします。
IIf関数はVBAでも使えますが、VBAで条件分岐の記述に使うのはIfになります。
IIf関数は、次の式で表され、条件が真(True)か偽(False)かいづれか一つの値を返します。
IIf([式],[真],[偽])
(例)クエリで[借方科目]がフォーム上のテキスト枠と同じであれば[借方金額]を表示させ、そうでなければ[0]を表示させる。
借金額: IIf([借方科目]=[Forms]![f_メニュー]![テキスト元帳],[借方金額],0)
(例)偽のところでさらにIIf関数で条件を付けていくこともできます。
(例)クエリで[借方科目]がフォーム上のテキスト枠と同じであれば[借方金額]を表示させ、そうでなければ[0]を表示させる。
相手方科目: IIf([借方科目]=[Forms]![f_メニュー]![決算元帳コンボ],[貸方科目],IIf([貸方科目]=[Forms]![f_メニュー]![決算元帳コンボ],[借方科目],""))
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 というのもあるので、これを使えば、コードがすっきりとします。
フォームやレポートを開くとき、データの有無をメッセージボックスで知らせるサンプルコードです。
Private Sub cmd_レポート_Click()
If IsNull(DLookup("日付", "tb_データ")) = True Then
MsgBox "データがありません。", vbExclamation, "処理結果"
Exit Sub
End If
End Sub
データテーブルの日付を参照してレコードがない場合、メッセージボックスを表示して処理を終了する。
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レコード場合、メッセージボックスを表示して処理を終了し、それ以外はレポートを表示する。
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
フォーム上のテキストボックスに入力があるかどうか順番に確認していき、未入力の場合はメッセージボックスを表示して処理を終了する。すべて入力されている場合は、記述されている処理を実行する。
IIf関数とIfは、ソフトになくてはならない存在です。
【AD】