VBA・SQL|AccessでBETWEEN ANDを使い範囲内の日付のレコードを抽出する

エクセルVBA VBAでSQL



VBAを使ったSQLで、ある範囲内の日付のレコードを抽出するには、

BETWEEN a AND b

を使います。

今回は日付を期間指定するための方法として

  • 具体的な使用例のサンプル
  • 日付の範囲指定に変数を用いた場合の書き方
  • 入力フォームから日付を指定してレコードを抽出する方法

についてお伝えしていきますね☆



VBA・SQL|Accessで範囲内の日付のレコードを抽出する

Accessのレコードをある範囲内の日付で絞ってレコードを抽出するには、BETWEEN a AND b を使用します。

範囲内の日付を抽出するにはBETWEEN a AND bを使う

BETWEEN a AND b の構文は以下のようになります。

▶範囲を指定するBETWEEN演算子の構文

WHERE BETWEEN フィールド名 BETWEEN 開始日 AND 終了日

開始日から終了日までの期間内における、フィールド名のレコードを抽出することができます。

具体的に日付を入れた書き方は、日付を#で囲み、以下のように書きます。

WHERE BETWEEN 日付フィールド BETWEEN #2021/6/21# AND #2021/6/30#

BETWEEN ANDを使ったサンプルコード

実際のサンプルコードは以下のようになります。

以下のSQLの動作は、作業員が入力した作業時間(定時時間、残業時間)について、ある範囲内の作業日で絞り、各人の作業時間合計を抽出します。

vSQL = "SELECT 氏名,"
vSQL = vSQL & "SUM([定時時間]),"
vSQL = vSQL & "SUM([残業時間]),"
vSQL = vSQL & "SUM(IIF([定時時間] IS NULL,0,[定時時間])+IIF([残業時間] IS NULL,0,[残業時間])) AS 小計 "
vSQL = vSQL & "FROM 作業集計 "
vSQL = vSQL & "WHERE 作業日 BETWEEN #2021/6/21# AND #2021/6/30# "
vSQL = vSQL & "GROUP BY 氏名 "
vSQL = vSQL & "ORDER BY 氏名 ASC;"

これで2021/6/21~2021/6/30までの日付の期間内のレコードを抽出できます。

日付範囲に変数を使った場合の書き方

さて、それでは、あらかじめ日付が決められていない場合に、入力フォームから日付を入力して日付範囲を指定することはできるのでしょうか?

その場合は日付の「開始日」と「終了日」を変数に置き換えます。

期間指定に変数を使った記載方法は、以下のようになります。

WHERE 作業日 BETWEEN #" & vDate1 & "# AND #" & vDate2 & "# 

というように、

BETWEEN #” & 開始日の変数 & “# AND #” & 終了日の変数 & “#

と記載します。

変数を使うと書き方がとてもややこしくなるので、このままコピペした方が間違いなさそうですよね(;´・ω・)

ちなみに、日付を変数に置き換えた際の実際のサンプルコードは以下のようになります。

変数には、任意の値を指定してください。

例えば、

vDate1 = Cells(1,1).Value

vDate2 = Cells(2,1).Value

のように、セルに入力した日付を入れて指定することも可能です。

Dim vDate1 As Date '開始日
Dim vDate2 As Date '終了日
vDate1 = Cells(1,1).Value
vDate2 = Cells(2,1).Value
SQL = "SELECT 氏名,"
vSQL = vSQL & "SUM([定時時間]),"
vSQL = vSQL & "SUM([残業時間]),"
vSQL = vSQL & "SUM(IIF([定時時間] IS NULL,0,[定時時間])+IIF([残業時間] IS NULL,0,[残業時間])) AS 小計 "
vSQL = vSQL & "FROM 作業集計 "
vSQL = vSQL & "WHERE 作業日 BETWEEN #" & vDate1 & "# AND #" & vDate2 & "# "
vSQL = vSQL & "GROUP BY 氏名 "
vSQL = vSQL & "ORDER BY 氏名 ASC;"

月ごとのレコードを抽出するにはFormat関数を使う

ちなみに、例えば「4月」だけのレコードを抽出したいという場合は、VBAのFormat関数を使って、以下のようにコードを書きます。

WHERE Format(入社年月日, 'm') = '4'

まとめ

今回はVBAを使ったSQLで、ある範囲内の日付のレコードを抽出する方法についてお伝えしました。

日付の範囲指定には、

BETWEEN 開始日 AND 終了日

を使います。

日付の範囲指定に変数を使った場合の書き方は、

WHERE 作業日 BETWEEN #” & vDate1 & “# AND #” & vDate2 & “#

のように記載します。

また、月ごとのレコード集計には

WHERE Format(入社年月日, ‘m’) = ‘4’

のように書きます。

Accessでは、日付の範囲指定でレコードを抽出するのは日常茶飯事なので、ぜひ覚えておいてくださいね☆




VBAでSQL
ブイサバ【Excel VBAサバイバル】~とりあえずここに来れば解決できる~

コメント

タイトルとURLをコピーしました