重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

MSアクセスを使い、データを表形式で表示させています。
同じ日付のレコードが沢山あるのですが、本日分のみを表形式で一覧表示させるにはどうすればよいでしょうか。

また、例えばボタンをクリックすれば、表の中身だけが入れ替わり、
翌日分が表示される、という風にするにはどうすればよいでしょうか。

今はテーブルからクエリで本日分だけ抽出し、それを表示させているのですが、
前日、前々日、3日前‥と遡ろうとするとその分だけクエリを作成しないといけないので、
何かやり方が間違っていると思いますので‥。

ご教授のほど、よろしくお願いします。

A 回答 (4件)

こんにちは


フォームのFilterプロパティを利用するとうまくいくと思います。
・フォームのRecodeSouceに該当テーブルを指定する
・フォームのFilterに抽出条件を設定する
・フォームのFilterOnをTrueにする

本日分表示のためのボタンクリックイベントに
Me.Filter = "HIZUKE = '" & Date & "'"
Me.FilterOn = True

前日分表示のためのボタンクリックイベントに
Me.Filter = "HIZUKE = '" & DateAdd("d", -1, Date) & "'"
Me.FilterOn = True

このままだとフォーム表示の際、テーブルの全レコードが表示されます。
最初から本日分を表示するならフォームロードイベントに本日分のFilter設定を行ってください。
    • good
    • 0

少し、質問文を私なりに整理してみました。



<TEST>
ID__日付___________DATA_1__DATA_2
1___2007/06/15__1A_1_____2A_1
2___2007/06/16__1A_2______2A_2
3___2007/06/16__1A_3______2A_3
4___2007/06/17__1A_4______2A_4
5___2007/06/17__1A_5______2A_5

これを、レコード移動ボタンを持たない帳票フォームに本日分を表示するようにしています。
しかし、これでは常に本日分しか表示されないので困っています。
そこで、表示[対象日]を配置しボタンで更新し、それにフォームを連動させようと考えています。

・フォームヘッダーに抽出・表示する日付を示す[対象日]を配置。
・その横に[→][←]の[cmdNextDay][cmdPreviousDay]というコマンドボタンも配置。

この辺りまでは考えつきましたが、以下の点が不明です。

1、フォーム起動時、[対象日]を本日に設定する方法。
2、フォーム起動時、[対象日]に対応したデータを表示する方法。
3、[対象日]が変更されたら、それに応じて再表示する方法。

さて、これだけのことですと、実は8行程度のVBAコードを書けば実現できます。

Option Compare Database
Option Explicit

Private Sub cmdNextDay_Click()
  Me.対象日 = Me.対象日 + 1
  UpdateRecordSource Me.対象日
End Sub

Private Sub cmdPreviousDay_Click()
  Me.対象日 = Me.対象日 - 1
  UpdateRecordSource Me.対象日
End Sub

Private Sub Form_Load()
  Me.対象日 = Date
  Me.RecordSource = "SELECT * FROM TEST WHERE 日付=#" & Date & "#;"
End Sub

Public Sub UpdateRecordSource(ByVal NewDay As Date)
  Me.RecordSource = "SELECT * FROM TEST WHERE 日付=#" & NewDay & "#;"
  Me.Requery
End Sub

さて、クエリを使い、かつ、VBA のコードを最小にするには一体どういう手を使ったらいいのでしょうか?

*******************************************

Option Compare Database
Option Explicit

Private Sub cmdNextDay_Click()
  Me.対象日 = Me.対象日 + 1
  Me.Requery
End Sub

Private Sub cmdPreviousDay_Click()
  Me.対象日 = Me.対象日 - 1
  Me.Requery
End Sub

*******************************************

Me.対象日の既定値を利用して日付を設定すれば VBA コードは不要です。
ですから、書くべきコードは僅か4行。

クエリがフォームに配置されている[対象日]を参照している訳ですからリクエリすればOKという訳です。
つまり、No2 の回答が全てですよ。

<アドバイス>

**** と **** との間の仕掛けをしてから、No2 さんの回答に従ってクエリを改造してみて下さい。
そして、上手くいかなかったら、そのクエりを[SQLビュー]モードで表示し、それを回答者に示して下さい。
そうすれば、一発で解決します。
    • good
    • 0

> ボタンをクリックすれば、表の中身だけが入れ替わり、翌日分が表示される



そのボタンが設置されているフォームの名前を「フォーム1」とし、日付を入力する
テキストボックスとして『対象日』を新設したとすると、クエリの日付フィールドの
抽出条件を以下のようにすればよいと思います;

Forms!フォーム1!対象日

この回答への補足

説明不足で申し訳ありません‥。日を入力して検索、ではなく、クリックで表示、という形でやりたいと思っています。

よろしくお願いします。アドバイスありがとうございます。

補足日時:2007/06/16 09:53
    • good
    • 0

クエリの抽出条件を書く欄に


(= 2007/06/16とか書きますよね)
[日付を入れてください]
と入れてみてください
([]←を忘れないでくださいね)
between [日付FROM] and [日付TO]
といれれば、複数連続日を抽出できます

何はともあれ[日付を入れてください]を試して
動きを確認してみてください

この回答への補足

すみません!説明不足でした!
クリックまたはホイールマウスを回す度に次の日または前日が表示されていくようにしたいのです!

アドバイスありがとうございました!

補足日時:2007/06/16 09:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す