- ベストアンサー
Access 日付抽出で困っている方への解決方法
- Access2010でコンボボックスによる日付抽出がうまくできない問題について、解決方法をご紹介します。
- 質問者様がタスクの迫って来ているデータを抽出しようとしている際に遭遇したAccess2010の日付抽出の問題について、簡単なコードの記述方法をご説明します。
- フィルタの設定で日付を自由に指定する方法について、詳しい手順をご説明します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
いずれ必要になると思いますので、先に述べておきます。 >ボタンに対する「マクロの登録」でそれを選べるのでマクロなのでしょうか。 >下記に記して頂いたPrivate sub~End subのコードです。 検索対象のテーブルを基にフォームを作成する、とします。 (出来ているフォームに機能の追加もできます。) (1) フォームの「新規作成」から「基になるテーブルまたはクエリの選択」 で、対象のテーブルを選択します。 (2) フォームは「オートフォーム表形式」を選択します。 (3) 「OK」を押すと自動的にフォームが作成されます。 (4) 出来上がったフォームを閉じるときに適当な名前で 保存します。 (5) このフォームをデザインビューで開きます。 (6) フォームの「詳細」の上部にマウスをあてるとマウスポインタが 十字になります。マウスボタンを押したまま、グイッと下に押し下げます。 ついでに、残ったラベルもすべて選択して「詳細」の上部にくっつけます。 (7) 空いたスペースにテキストボックスを二つ、ボタンを二つ設定します。 (8) テキストボックスの名前をそれぞれのプロパティシートで 「tx自日」、「tx至日」とします。 (9) ボタンの一つのプロパティシートを表示し、「名前」を「フィルタ実行」 とし、標題も「フィルタ実行」としておきます。 同じ、プロパティシートで「クリック時」の項目で「イベントプロシージャ」 を選択し、右のボタンをクリックすると、コードが表示されます。 コード表の、 Private Sub フィルタ実行_Click() End Sub というところのなかに、 Me.Filter = "日付>=Date() + 1 AND 日付<=Date() + 5" Me.FilterOn = True をコピーし、貼り付けます。つまり、 Private Sub フィルタ実行_Click() Me.Filter = "日付>=Date() + 1 AND 日付<=Date() + 5" Me.FilterOn = True End Sub のように、なります。このまま保存してボタンを押せば 「明日から5日間という期間を指定して抽出」 ということができます。 しかし、これでは、この機能だけになるので、質問の 「Access 日付(可変)抽出」ということを任意の期間で 実現できないので、「フィルタ実行」ボタンをクリックしたときの イベントを以下のようにします。(中身をコピーし貼り付けてください) なお、コード中の "日付 Between #" & Me!tx自日 & "# AND #" & Me!tx至日 & "#" で、最初の「日付」はフォームの日付を表示するテキストボックス の「コントロールソース」の名前です。この場合はテーブルの 日付を表示するフィールドの名前が「日付」という設定です。 テーブルのフィールドの名前が違っていたらこの部分を 書き変えてください。たとえば、「誕生日」というフィールド名 ならば、 "誕生日 Between #" & Me!tx自日 & "# AND #" & Me!tx至日 & "#" のように。 Private Sub フィルタ実行_Click() If Not IsNull(Me!tx自日) And Not IsNull(Me!tx至日) Then Me.Filter = "日付 Between #" & Me!tx自日 & "# AND #" & Me!tx至日 & "#" Me.FilterOn = True Else MsgBox "日付が入力されていません。" End If End Sub このようにすると、テキストボックスにたとえば、 「2015/06/12」、「2015/06/20」 と入力してボタンをクリックすると期間のデータが 表示されます。二つのテキストボックスに同じ日付 を入力してボタンをクリックするとその日のデータが 表示されます。なお、どちらかのテキストボックスに 日付を入れただけでその日のデータを表示することも できますが、少しコードが混雑するので必要ならば 書きます。 (10) 残りのボタンのプロパティシートで、「名前」を 「フィルタ解除」とし、「標題」も「フィルタ解除」 とします。 (9)と同様に、「クリック時」で「イベントプロシージャ」を 選択し、右のボタンをクリックし、コード表で、 Private Sub フィルタ解除_Click() Me.FilterOn = False End Sub のように、設定します。このボタンをクリックすると、 フィルタが解除されてデータがすべて表示されます。 以上です。わからないところがあれば補足してください。
その他の回答 (3)
- piroin654
- ベストアンサー率75% (692/917)
何も気にされなくていいです。どのような形であれ 問題が解決に向かうということが目的ですし、むしろ私も なるほどこういう質問もあるのだな、と思いましたし、 他の人が検索してこの質問に立ち寄った時に、役に 立つならばそれはいい資料としてのデータベースの 登録ということになりますから、言わば三方両得ということです。 わからないことが出てきたらぜひこのQ&Aをガンガン利用してください。
お礼
ありがとうございます(^^) 教えて頂いたコードを明日試してみます!
- piroin654
- ベストアンサー率75% (692/917)
No1です。 すみません。回答の 「Date」を「Date()」 にという部分は変らないのですが、 1 「Access2010、コンボボックスによる日付抽出」 2 「標準の日付のフィルターウィザード」 での 「">=" & Date + 1 ~/省略/~ "<=" & Date + 5」 としても同じ様に動作しません。 の二点があるので、一応、二番目のフィルタについて 「フィルタ/並べ替えの編集」を使ってのクエリビルダ での実行として回答しています。 最初のコンボボックスについてはコンボボックスが 一つなのか、二つなのか、あるいはどのような動きを するように設定してあるのかわからないので、No1の ような回答にしておきました。 読み返すと何となくVBAを使っておられるようですね。 マクロという言葉が目に付いたのでVBAは使っておられない と解釈していました。
お礼
ご回答ありがとうございます。 もともとクエリビルダで条件付けして絞り込んだ選択肢がリストされる1つのコンボボックスで、その「処理後○○」(←○○の部分は失念致しました。)の部分で、「マクロの記録」で出来上がったコードをコードビルダにコピペした状態です。 ボタンに対する「マクロの登録」でそれを選べるのでマクロなのでしょうか。 下記に記して頂いたPrivate sub~End subのコードです。 とりあえず会社でDate()を試してみます。 その結果を本件の補足欄に記入させて頂きます。 ありがとうございました(^^)
- piroin654
- ベストアンサー率75% (692/917)
>「">=" & Date + 1 ~/省略/~ "<=" & Date + 5」 この部分の、「Date」を Date() としたらどうなりますか? マクロはほとんど使わないのでよく分かりませんが、 たとえば、フォームでボタンを一つ設定し、 そのクリック時のイベントに、 Private Sub コマンド1_Click() Me.Filter = "日付>=Date() + 1 AND 日付<=Date() + 5" Me.FilterOn = True End Sub のようなVBAのコード設定をするとフィルタがかかります。 「Date」だけだと変数、あるいはパラメータとみなされます。 たぶん、動くとはおもいますが、 >「">=" & Date + 1 ~/省略/~ "<=" & Date + 5」 の前後省略されている部分がわからないので、回答は ここまでですが、わからないことがあれば補足してください。 なお、会社でVBAを使うことが禁止されていなければ なるべくならば、保守や拡張性を考えるとVBAでの開発を お勧めします。
お礼
ご回答ありがとうございます。 No.2の方へ本コメントを記入させて頂きます。
お礼
ご回答ありがとうございます。 誠に申し上げにくいのですが。 私は今エクセルのファイルで運用しているものをアクセスに移行しようと奮闘中でありまして、本質問を書いた時には相当頭がこんがらがっていたようでAccessではなくExcelで困っていた内容でした(><;;) しかも今日符号の向きが逆だっただけという事まで発覚し、会社でpiroin654さんに合わせる顔がない!と思っていましたorz 本当に申し訳ありませんでした!m(_ _)m でも、同じ事をアクセスでもしようと思っているので教えて頂きました内容は活かします!(^^;;) 本当に申し訳ありません。そしてありがとうございます!(><)