Access:クエリからVBAのプロシージャを呼び出し、その戻り値で抽出する方法

クエリからVBAのFunctionプロシージャを実行し、その戻り値で抽出する方法です。

BackHome Backクエリ

この方法ですと、VBAで作成するので戻り値を自由に設定したり、入力してもらうことなどができるので自由度が上がります。

クエリの作成は簡単で、抽出条件にFunctionプロシージャを指定するだけです。

ここでは変数に代入したシンプルな例とInputBox関数を使用した2種類を掲載します。

関連する「クエリとVBAで先頭と全体の文字を大文字か小文字か判定し抽出する」を掲載していますので参考にしてください。




VBAのプロシージャを呼び出し、戻り値の変数で抽出するクエリの作成方法

クエリの元になる商品一覧テーブルです。

単価フィールドから抽出するクエリを作成します。

クエリの元になる商品一覧テーブル

■ VBAのFunctionプロシージャを呼び出すクエリの作成

テーブルからクエリを作成し、単価の抽出条件に >MyTanka() と入力します。

MyTanka()がVBAで作成するプロシージャ名です。

単価の抽出条件に >MyTanka() と入力

VBAで作成したMyTanka()プロシージャです。

VBAで作成したMyTanka()プロシージャ

・戻り値が抽出条件になるので、Functionプロシージャで作成します。

・これでMyTankaは50000が返ります。

Function MyTanka() As Long
    MyTanka = 50000
End Function


クエリを実行した結果です。

クエリの抽出条件がVBAの戻り値の5000なので、単価が50000円を超えるレコードが表示されています。

クエリを実行した結果

■ InputBox関数を使い、入力値で抽出する

InputBox関数で単価を入力するように変更したVBAです。

InputBox関数で単価を入力するように変更したVBA

・InputBox関数はキャンセルが選択された場合、長さ0の文字列が返るので、判定しエラーを防止しています。

・IsNumericで入力値が数値かどうか判定しています。


Function MyTanka() As Long
    Dim s As String
    
    s = InputBox("単価?")
    If s <> "" Then
        If IsNumeric(s) Then
            MyTanka = s
        End If
    End If
End Function


クエリを実行すると、InputBoxが表示されるので単価を入力します。

InputBoxが表示されるので単価を入力

実行結果のクエリです。

VBAで入力した、単価が30000円を超えるレコードが表示されています。

実行結果のクエリ

BackHome Backクエリ

Copyright(C) FeedSoft