• 締切済み

教えて!アクセス2007!/Access2007・期日指定で表示させる

教えて!アクセス2007!/Access2007・期日指定で表示させる方法 データーの日付は テキスト型で定型入力を>L99\年99\月99\日と設定し このように表示させてます→ H20年03月26日  このデーターからH20年03月26日からH22年07月31日までの 抽出方法を教えて下さい。

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

訂正です。 >説明の通りSQLにコピーして貼り付けてみるのですが >うまくいきません の原因だと思いますが、#4において、 ############################ 名前を Q期日指定 とします。 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([日付],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between [Forms]![F検索]![tx開始日] And [Forms]![F検索]![tx終了日])); ############################ としていましたが、中の[日付]を[納品日]にするのを 忘れていました。したがって、 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between [Forms]![F検索]![tx開始日] And [Forms]![F検索]![tx終了日])); が正しいです。確認しておいてください。 これで動作すると思います。 フォームで表示したい、ということなので設定の手順を 述べます。 (1) クエリの作成 Q期日指定と同じ内容ですが、フォームの名前を 変えておきます。 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between "H20年01月01日" And "H20年01月01日")); これで新規にクエリを作り、名前を「Q期日検索」としてください。 (2) フォームの作成 フォームの新規作成から、「オートフォーム表形式」を 選択し、「基になるテーブルまたはクエリの選択」で 「Q期日検索」を選択し、出来たフォームの名前を 「F期日検索」として保存してください。パラメータが 表示されますが (3) フォームの調整1 出来たフォームをデザインビューで開き、詳細のところに カーソルを当て、十字になったらクリックして下に3cmくらい 押し下げてください。ついでにラベルも下に移動させてください。 フォームの幅は適度に広くしておいてください。 空いたところに、テキストボックスを二つ、ボタンを 二つ設定してください。 テキストボックスの名前はそれぞれ、 「tx開始日」と「tx終了日」 にしてください。 それぞれのテキストボックスの定型入力に L99\年99\月99\日;;_ を貼り付けてください。 (4) フォームの調整2 二つのボタンの名前をそれぞれ、 「cmd抽出」と「cmd解除」 にしてください。 フォームのコード表を開き、以下を貼り付け 保存してください。 Private Sub cmd解除_Click() Me.RecordSource = "SELECT * FROM T日付 WHERE (((Format(CDate(Format([納品日],'@@@@\/@@\/@@')),'gee\年mm\月dd\日')) Between 'H20年01月01日' And 'H20年01月01日'))" End Sub Private Sub cmd抽出_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) Me.RecordSource = "SELECT * FROM T日付 WHERE (納品日 Between '" & Me!tx開始日 & "' AND '" & Me!tx終了日 & "')" End Sub (5) フォームの調整3 フォームのレコードソースのところに Q期日検索 と表示されていますが、これを消して、 改めて、(1) クエリの作成 のところにある「Q期日検索」のSQL文を コピーして貼り付けてください。 これにより、「Q期日検索」はいらなくなるので 削除してもかまいません。 以上で設定終了です。フォームを開いたときに はフォームのコントロールソースで Between 'H20年01月01日' And 'H20年01月01日' としているように特定の日を表示するように しておき、フォームにすべてのデータを表示 しないようにしておきます。選択したときに 選択したデータが表示されます。 cmd解除を押すと開いたときと同じになります。 もし、H20年01月01日の日付がテーブルに なければ何も表示されません。

107ravu
質問者

補足

いつもありがとうございます。 返事遅くなって申し訳ありません ずっとアドバイス通り、がエラーメッセージが次のようにでます 「式が正しく入力されてないか、数式に複雑な要素が多すぎます。 式を簡単にしてください」 色々してみるのですがうまくいきませんでした。 他に方法はあるのでしょうか?

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

フォームのテキストボックスを参照して 期日をしぼり、クエリを表示する方法 フォームの名前をF検索とします。フォームに テキストボックスを二つ。名前は、 tx開始日 tx終了日 とします。なお、それぞれのテキストボックスの プロパティの定型入力のところに、 L99\年99\月99\日;0;_ を設定してください。 続いて、ボタンを一つ名前を、 cmd検索 とします。 フォームのコード表を開き、以下をコピーし、 貼り付け、保存します。 Private Sub cmd検索_Click() DoCmd.OpenQuery ("Q期日指定") End Sub 次に、以下のクエリを作成します。 名前を Q期日指定 とします。 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([日付],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between [Forms]![F検索]![tx開始日] And [Forms]![F検索]![tx終了日])); これは、#3での、 Between [START] And [END] または、 Between "H20年03月26日" And "H22年07月31日" のところを、 Between [Forms]![F検索]![tx開始日] And [Forms]![F検索]![tx終了日] に変更したものです。 このほかにフォームにデータを表示することも できますが、少しややこしい設定が必要に なります。

107ravu
質問者

補足

いつもありがとうございます 説明の通りSQLにコピーして貼り付けてみるのですが うまくいきません (既存のデーターに使ってみました、すると「式が複雑すぎるので簡単にしてください」というような メッセージがでました) できればフォームで表示したいのです 宜しくお願いしまう。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

一旦、#1と#2はスルーしてください。 説明をし直します。 対象のテーブルを「T日付」とし、テキスト型のフィールド「納品日」 があるものとします。 (1) まず、テーブルの「納品日」はテキスト型ですから、 このままでは日付として計算はできません。方法としては、 「納品日」をフォーマットしてテキスト型を Accessが日付として認識できる「日付型」に 変更して「納品日」を日付として期間の抽出を 行なう方法。 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between [START] And [END])); このクエリもパラメータが二つ出てきますが、この場合は それぞれのパラメータに、H20年03月26日 と H22年07月31日 を入力すれば、期間が抽出されます。 直接クエリに入力しておくには、 SELECT T日付.納品日 FROM T日付 WHERE (((Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日")) Between "H20年03月26日" And "H22年07月31日")); のようにします。 (2) クエリに条件の入れ方がわからない、ということですが、 まずは(1)のようにテーブルを作ってデータを入れて(1) で表示したSQL文を新しいクエリを作り、そのSQLビューに 貼り付けてみてください。それからデザインビューに戻します。 そうすると、 フィールド | 納品日 | (1) | テーブル  | T日付  |   | 並べ替え  |     |   | 表示    |     |   | 抽出条件  |     | (2) | または   |     |   | (1)に Format(CDate(Format([納品日],"@@@@\/@@\/@@")),"gee\年mm\月dd\日") (2)に Between [START] And [END] または、 Between "H20年03月26日" And "H22年07月31日" が入っているのが確認できると思います。

107ravu
質問者

お礼

できました! 感激です!ありがとうございます☆☆☆☆☆ クエリで期間限定で表示できるようになりました これをフォーム上で日にち指定するにはどうすれば良いでしょうか? 引き続き宜しくお願いします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

訂正です。 クエリの最初、 SELECT T日付.日付, T日付.名前 にいらないものがありました。 SELECT T日付.日付 にしてください。 SELECT T日付.日付 FROM T日付 WHERE (((Val(Right(Format([日付],"yyyy\,mm\,dd"),6))) Between [START] And [END])); です。

107ravu
質問者

補足

回答、有難うございます。 初心者のせいか WHERE (((Val(Right(Format([納入日],"yyyy\,mm\,dd"),6))) Between [H20年03月26日] And [H22年07月31日]));   ↑ どこに入れたら良いのかわからなくて・・・ お手数おかけしますが、もう少し解り易くお願いします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

方法はいろいろあります。VBAを組み込む 方法もありますが、一応一番簡単であろう という前提を勝手において、以下のように。 「T日付」というテーブルに「日付」という フィールドを設定します。主キーである必要 はありません。「日付」フィールドの型と 定型入力は質問の通りとします。 以下のクエリを作ってみてください。 SELECT T日付.日付, T日付.名前 FROM T日付 WHERE (((Val(Right(Format([日付],"yyyy\,mm\,dd"),6))) Between [START] And [END])); [START] と [END] はたとえば、 [この日から] と [この日まで] というようにするとわかりやすいかもしれません。 WHERE (((Val(Right(Format([日付],"yyyy\,mm\,dd"),6))) Between [START] And [END])) のところでRightは取り出した日付の右から6文字取り出しています。 これは余分なHを取り除くためです。 Valは必要ないかも知れませんが数値型に変換しています。 Formatについてはこれから使われることも 出てきます。Format関数などで調べてみて ください。 このクエリを実行するとパラメータが出てきます。 SARTのパラメータに200326と入れ、 ENDのパラメータに220731といれます。 このような、感じですが、何かフォーム上で 取り出したりするのであれば Between [START] And [END] の部分を変更する必要があります。 場合によってはVBAが必要になります。 何か不都合が生じるようであれば捕捉をしてください。

関連するQ&A