AccessのVBAでSQLのSELECT Between Andを使い、計算結果の範囲のレコードを抽出する|フォーム実行例

計算結果の範囲を抽出 : Between And

SELECT フィールド名 FROM テーブル名 WHERE 計算式 Between 値1 And 値2
計算式の結果から、値1 から 値2 の範囲のレコードを返します。

例: SQL = "SELECT 学生ID FROM 学生名簿 WHERE 体重 / (身長 * 身長 ) BETWEEN 23 AND 25 "
この場合、体重 / (身長 * 身長 )のBMIが23~25の学生IDを抽出します。

これを「AND」にすると
例: SQL = "SELECT 学生ID 学生名簿 WHERE 体重 / (身長 * 身長 ) >= 22 AND 体重 / (身長 * 身長 ) <= 25"
になります。



BackHome BackSQL Tips

サンプルソフト
[実行時の画面]
「最低打率」に抽出したい下限の打率を入力します。(3割の場合、0.3と入力)
「最高打率」に抽出したい上限の打率を入力します。

「Between And 打率抽出」ボタンをクリックすると、野球データベーステーブルから、
(安打/打数)から指定範囲内のレコードを表示します。

SQL = "SELECT 選手ID,打数,安打,(安打/打数) AS 打率 FROM 野球データベース WHERE (安打/打数) Between " & Me!テキスト2 & " AND " & Me!テキスト3

SQL = "SELECT 選手ID,打数,安打,(安打/打数) AS 打率 FROM 野球データベース WHERE (安打/打数) >= " & Me!テキスト2 & " AND (安打/打数) <=" & Me!テキスト3
と同じ結果になります。
サンプルソフトをダウンロードしお試しください。

■打率0.2~0.5で抽出した画面
打率の抽出

[野球データベース テーブル]
選手ID 打数  安打
10    120   30
11    150   25
13    130   20
16    100   45
野球データ

[コード]
Option Compare Database

Private Sub コマンド8_Click()
    Dim SQL As String
    Dim rs As Recordset
    If IsNull(Me!テキスト2) Then
        MsgBox "抽出する最低打率を入力してください。"
        Me!テキスト2.SetFocus
        Exit Sub
    End If
    If IsNull(Me!テキスト3) Then
        MsgBox "抽出する最高打率を入力してください。"
        Me!テキスト3.SetFocus
        Exit Sub
    End If
    Me!テキスト1 = Null
    SQL = "SELECT 選手ID,打数,安打,(安打/打数) AS 打率 FROM 野球データベース WHERE (安打/打数) Between " & Me!テキスト2 & " AND " & Me!テキスト3
    Set rs = CurrentDb.OpenRecordset(SQL)
    Do Until rs.EOF
        Me!テキスト1 = Me!テキスト1 & rs![選手ID] & ": " & rs![打数] & ": " & rs![安打] & " : " & rs![打率] & vbCrLf
        rs.MoveNext
    Loop
    Set rs = Nothing
End Sub

サンプルソフトのダウンロード

BackHome BackSQL Tips

Copyright(C) FeedSoft