ExcelVBAを使ってAccess内の指定した日付を条件にレコードを抽出するにはFormat関数を使います。
Format関数を使えば、「日」のみならず「月」や「曜日」などで抽出することが可能です。
今回はAccessデータベースにFormat関数を使って指定した日付のレコードを抽出する方法について徹底的にお伝えしていきます。
ExcelVBA・SQL・Access|指定した日付のレコードをFormatで抽出する
VBAを使ってAccess内の指定した日付のレコードを抽出するには、Format関数を使います。
▶構文:Format関数を使って指定した日付のレコードを抽出する
WHERE Format(フィールド名,指定値の書式)=指定値
Format関数は指定したフィールドを、「指定値」で抽出します。
その際に「指定値」をどのような書式にするかを指定します。
例えば、4月のレコードを抽出したいときは、
- 指定値 → ‘4’
- 指定値の書式 → ‘m’ (mは月を表します)
として、
"WHERE Format(入荷日,'m')='4';"
のように記述します。
このとき、「指定値の書式」及び「指定値」を「’(シングルクォーテーション)」で囲みます。
Format関数で指定できる種類については後述します。
まずはFormat関数を使って指定した日付で抽出するサンプルコードを見てみましょう。
テーブル「商品マスタ」のフィールド「入荷日」で「4月」のレコードを抽出したいときの記述方法は以下のとおりになります。
【テーブル「商品マスタ」】
Sub 指定月のレコードを抽出する()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
'Connectionオブジェクトを作成
Set cn = New ADODB.Connection
'Recordsetオブジェクトを作成
Set rs = New ADODB.Recordset
'データベースを開く
cn.Open _
"Provider=Microsoft.ACE.OLEDB.16.0;" & _
"Data Source=" & ThisWorkbook.Path & "\テスト.accdb;"
Dim vSQL As String
vSQL = "SELECT * FROM 商品マスタ "
vSQL = vSQL & "WHERE Format(入荷日,'m')='4';"
'SQLを実行
cn.Execute vSQL
'「商品マスタ」テーブルのデータを取得してA1セルに転記
rs.Open vSQL, cn
Range("A1").CopyFromRecordset rs
rs.Close
cn.Close
End Sub
【実行結果】
実行結果のように、4月のレコードで抽出されていることがわかりますね。
【参考】日付を範囲指定してレコードを抽出したい場合の記事
それではFormat関数で指定できる値の種類について見てみましょう。
Format関数で指定できる値の種類
Format関数で指定できる値の種類は以下のようになります。
文字 | 説明 | 指定値の例 |
d | 日を1桁または2桁の数字で指定 | 1,3,10,31 |
dd | 日を2桁の数字で指定 | 01,03,10,31 |
ddd | 曜日を英語の省略形3文字で指定 | Sun, Wed |
m | 月を1桁または2桁の数字で指定 | 1,2,10,12 |
mm | 月を2桁の数字で指定 | 01,02,10,12 |
q | その日が属する四半期で指定 | 1,2,3,4 |
yy | 西暦の下2桁で指定 | 01,02,19,20,99 |
yyyy | 西暦の4桁で指定 | 1980,2021 |
h | 時を1桁または2桁の数字で指定 | 0,1,10,23 |
hh | 時を2桁の数字で指定 | 00,01,10,23 |
n | 分を1桁または2桁の数字で指定 | 0,1,10,59 |
nn | 分を2桁の数字で指定 | 00,01,10,59 |
s | 秒を1桁または2桁の数字で指定 | 0,1,10,59 |
ss | 秒を2桁の数字で指定 | 00,01,10,59 |
また、「2021年7月」を指定する場合のように複数の指定値を用いたいときには、以上の指定方法を組み合わせて以下のように記述します。
"WHERE Format(入荷日,'yyyym')='20214';"
'または
"WHERE Format(入荷日,'yyyymm')='202104';"
のように指定したいものを組み合わせて記述します。
まとめ
今回はAccess内の指定した日付を条件にレコードを抽出する方法についてお伝えしました。
指定した日付のレコードを抽出するにはFormat関数を使います。
Format関数の構文は以下のとおりです。
WHERE Format(フィールド名,指定値の書式)=指定値
たとえば「2021年7月」のレコードを抽出したいときの記述は以下のようになります。
"WHERE Format(入荷日,'yyyymm')='202104';"
Accessのレコードは指定する条件で抽出してなんぼみたいなところがあります。
ぜひ今回のFormat関数を使って指定する日付のレコードを抽出する方法を使ってくださいね☆
コメント