Microsoft Access Club >AccessTips >このページ >次頁 <前項  サイト内検索


日付を選択する際、年、月、日をコンボボックスで選択する方法 : AccessTips126



テーブルレコードを抽出する場合、日付フィールドに抽出対象となる日付を指定する場合が頻繁にあります。
一般的には、テキストボックスに yyyy/mm/dd 形式で入力するのですが、コンボボックスを用いて入力させるのではなく選択させる方法をご紹介します。

次のサンプルフォームは、From 〜 Toに年、月、日のコンボボックスを作成し、ユーザーが選択可能な仕様にしています。
選択した値は、クエリの抽出条件に用います。

テーブルの作成

サンプルテーブル(tbl_sample)を以下のように作成します。

ID 年月日 備考
1 2005/05/10 只今、テスト中
2 2005/05/10 明日の朝は晴天
3 2005/05/13 テストは大好き
4 2005/05/19 やっと、明日は金曜日

検索フォームの作成、コンボボックスの配置

以下の手順でフォームを作成し、コンボボックスを配置します。

  1. 新規フォームを作成し、コンボボックス、ラベルを配置します。

  1. 年を選択するコンボボックスの値集合ソースには、2005;2006;2007;2008;2009;2010 の6年間の西暦を記述します。値と値の間にはセミコロン(;)を記述します。集合タイプは値リストに変更します。

  1. 月を選択するコンボボックスの値集合ソースには、1;2;3;4;5;6;7;8;9;10;11;12 の12ヵ月の月を記述します。値と値の間にはセミコロン(;)を記述します。集合タイプは値リストに変更します。
  2. 日を選択するコンボボックスの値集合ソースには、1;2;3;4;(中略);30;31 の31日の日を記述します。値と値の間にはセミコロン(;)を記述します。集合タイプは値リストに変更します。
クリック時イベントプロシージャの作成

コマンドボタン(cmd検索)をフォームに配置し、コマンドボタンのクリック時イベントプロシージャを作成します。

Private Sub cmd検索_Click()

On Error GoTo エラー

    Dim vardate1, vardate2, strFormName, strSQLWhere As Variant
    strFormName = "frm_detail" '検索結果フォーム名を指定します。
    
    '日付を求めます。
    vardate1 = Me.cmb年From & "/" & Me.cmb月From & "/" & Me.cmb日From ' --- A
    vardate2 = Me.cmb年To & "/" & Me.cmb月To & "/" & Me.cmb日To
    '日付形式のチェックを行います。
    If IsDate(vardate1) = False Or IsDate(vardate2) = False Then ' --- B
        MsgBox "日付が空白であるか、または日付として認識ができません。", _
							vbCritical + vbOKOnly
        Exit Sub
    Else
        '日付/時刻型に変換しています。
        vardate2 = CDate(vardate2) ' --- C
        vardate1 = CDate(vardate1)
        'Where句を作成します。' --- D
        strSQLWhere = "年月日 BETWEEN #" & vardate1 & " # AND # " & vardate2 & "# "
    End If
    
    If vbYes = MsgBox("結果フォームを表示しますか?", vbCritical + vbYesNo) Then
        DoCmd.OpenForm strFormName, acFormDS, "", strSQLWhere ' --- E
    End If
    
    Exit Sub
    
エラー:

    MsgBox Err.Number & " : " & Err.Description
    Exit Sub

End Sub
解説
  1. &と/演算子を組み合わせて、yyyy/m/d 形式の日付を作成しています。
  2. IsDate関数を用いて 日付/時刻型として問題ないかチェックします。これは、例えば、2005/06/31のように実在しない年月日を選択していないか事前にチェックするためです。
  3. CDate関数を用いて日付/時刻型に変換しています。
  4. BETWEEN演算子を組み合わせたWhere句を作成します。
  5. OpenFormメソッドのWhere条件欄に先程作成したWhere句を配置します。
留意点

Where句を変数を用いて作成し、それをフォームを開くOpenFormメソッドの引数に配置して、フォームを開く際に対象となるレコードを抽出します。

検索結果フォームの表示

以下のようにデータシート形式で表示されます。

関連ページ

2005/05/28

ページの先頭へ 前ページへ戻る

 


日付を選択する際、年、月、日をコンボボックスで選択する方法 : AccessTips126


 

-Microsoft Access Club-