ExcelVBA・SQL・Access|指定した日付のレコードをFormatで抽出する

エクセルVBA VBAでSQL



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関数を使って指定する日付のレコードを抽出する方法を使ってくださいね☆




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

コメント

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