
ACCESS フォームで入力した日付をクエリで読み替えたい
ACCESS フォームで入力した日付をクエリで使用しているテーブルの書式に変換したい
フォーム テキスト名:日付にyyyymmdd で入力します
クエリ テキスト名:日付はパラメータとして使用しています
クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです
パラメータは 「日付始」と「日付終」の2箇所のテキストに入力されたデータを使用しています。以下がパラメータです。
Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終]
フォームのテキストボックスにyyyymmddと入力してもクエリでエラーが出ることない パラメータを日付に設定したいのですがどうしたらよいでしょうか?
ちなみに、以下の式を入れたらエラーです。
Between CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) and CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) と入力しましたところ、、、、「式が複雑すぎるか、、、」のエラーメッセージが出てしまいました。
どなたか助けてください。お願い致します。
No.1ベストアンサー
- 回答日時:
> Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終]
これで合ってると思います。
> クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです
フォームの値が正しく日付として認識できてますか?
YYYYMMDDのつもりで8桁の入力なら、ダメですよ。
YYYYMMDDのつもりの8桁の入力なら、betweenを設定する日付の列をformat文で
yyyymmddに編集してテキスト同士として比較するとか。
この回答への補足
ご回答ありがとうございます。
下記のパラメータの日付は
フォームで yyyymmdd の書式で入力されますが、ここで使用しているテーブルのデータが
yyyy/mm/dd のためフォーム入力の値を変換する指揮をいれる必要があります。
日付入力のテキストは1つで複数のコマンドボタンに対応しているため一律yyyymmddで日付を入力されています。
Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終]
Between句では Between CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) and CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) と入力しましたところ、自信はなかったもののエラーが出てしまい無理でした、、、、
No.3
- 回答日時:
> フォームのテキストボックスにyyyymmddと入力してもクエリでエラーが出ることない パラメータを日付に設定したいのですがどうしたらよいでしょうか?
前のお二方の回答で解決だと思いますが、このような方法もあるということで別案を。
フォーム上のテキストボックス「日付始」「日付終」の定型書式を下記のように設定します。
0000/00/00;0;_
こうしておけば、ユーザーは 20130607 と入力すれば、テキストボックスの表示は、2013/06/07 となります。
クエリの抽出条件も下記でOKになります。
Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終]
ユーザーにとって入力の手間は同じで、表示は 2013/06/07 と見やすくなるので、お勧めです。
大変丁寧な回答ありがとうございます。とても勉強になりました。
お陰様で無事にクエリを通すことができました。
今後ともよろしくお願い致します。
No.2
- 回答日時:
エラーの原因から。
まず、
Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終]
これがエラーを返す理由から。
これにフォームに入力された[日付始]と[日付終]を代入すると、例えば
Between 20130601 and 20130610
こうなりますね。
ザックリ言ってしまうと、
「日付型」で「2013/6/7」とされているデータは、
内部的には「41432」と言うシリアル値で保存されています。
当然、上記式のBetweenには該当しないわけです。
アクセス(と言うかMS-Officeソフト)が「日付として認識できる最大のシリアル値」は、
「2,958,465=9999/12/31」です(便宜上、カンマ区切りしました)。
これより先(西暦5桁)は日付に変換できない仕様です。
今回は例えば
「20,130,601(⇒2013/6/1)」
と言うシリアル値での抽出を試みていますから、
当然、アクセスとしては「日付として認識できないシリアル値が入ってきた」となるのですね。
なので、
Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")
このFormat式はエラー(複雑すぎ・・)を返します。
そもそも「yyyy/mm/dd(日付型)に変換できないシリアル値だから」です。
では、対策です。
結論から先にいくと
Format([Forms]![フォーム]![日付始],"@@@@/@@/@@")
これだと正常に「yyyymmdd(8桁)→yyyy/mm/dd(日付)」の変換が可能です。
「@」はその位置にある「数字」を返すカスタム書式記号です。
参考)http://office.microsoft.com/ja-jp/access-help/HA …
なので、8桁入力されてくると8個の「@」をそれぞれその数字に置き換えて、
正しく日付(のような)文字列に変換してくれる、と言う寸法です。
ですので、CDateを使って、
CDate(Format([Forms]![フォーム]![日付始])
が通り、Betweenで括っても
Between CDate(Format([Forms]![フォーム]![日付始],"@@@@/@@/@@")) And CDate(Format([Forms]![フォーム]![日付終],"@@@@/@@/@@"))
としてやると処理を通ってくれます。
人間の目で見る範囲だと「yyyy/mm/dd」の方が解り易いんですが、
ここは「日付←→シリアル変換に関する仕様なのだからしょうがない」と割り切って
盲目的に覚えておくしかなさそうです。
以上、参考になりますかどうか。
補記)
DateSerial・Mid関数を使って
DateSerial(Mid([forms]![フォーム]![日付始],1,4),Mid([forms]![フォーム]![日付始],5,2),Mid([forms]![フォーム]![日付始],7,2))
こんな書き方でも「yyyymmdd→yyyy/mm/dd」の変換が出来ます。
つまり、
Between DateSerial(Mid([forms]![フォーム]![日付始],1,4),Mid([forms]![フォーム]![日付始],5,2),Mid([forms]![フォーム]![日付始],7,2)) And DateSerial(Mid([forms]![フォーム]![日付終],1,4),Mid([forms]![フォーム]![日付終],5,2),Mid([forms]![フォーム]![日付終],7,2))
なのですが・・・この場合、[日付始][日付終]は必ず8桁である事が条件です。
解り易い関数ではあるのですが、長すぎてスマートとは言いづらい式ですね。
大変丁寧なご説明ありがとうございます。
とても参考になりました。おかげさまで無事にクエリを通すことができました。
今後ともよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
フォームの値をクエリーに反映したい
その他(Microsoft Office)
-
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
-
4
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
5
年月日を持つテーブルから年月を指定して抽出したいのですが
その他(データベース)
-
6
access テキストボックスの値取得
Access(アクセス)
-
7
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
8
アクセスクエリ(複数)→マクロ→エクセル出力(ワークシート別)
その他(パソコン・スマホ・電化製品)
-
9
ACCESS クエリの抽出条件に他のテーブルの値を参照する方法
Access(アクセス)
-
10
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
11
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
12
クロス集計クエリの結果をテーブルにしたい
Access(アクセス)
-
13
IIF関数の使い方
Visual Basic(VBA)
-
14
テキストボックスに入れた内容をAccessのテーブルに登録する方法を教えてください。
Visual Basic(VBA)
-
15
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
16
アクセス2000 クエリ抽出でBetweenを記述したところ・・
Access(アクセス)
-
17
フォームからクエリの抽出期間を指定するにあたって
Access(アクセス)
-
18
フォームで入力された文字をクエリのフィールド名として反映させたい 【Microsoft Access】
Access(アクセス)
-
19
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
20
OR関数
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付の大小の表現
-
マクロボタンを押すと、ファイ...
-
差し込み印刷に当日の日付が入...
-
「24日の0時」って・・・
-
回覧板の日付について質問です...
-
「時間」、「期日」、「日付」...
-
回転印の使い方
-
エクセルで日付別にシートを分...
-
2つの日付の中間の日付 エク...
-
会社や役所などに提出する書類...
-
履歴書の日付間違いで落ちますか。
-
Array関数のネスト
-
日付以外のデータを抽出したい...
-
Excelについて
-
最新データ取得
-
Accessにて24時を越えた場合の表示
-
Excelで1週間毎の集計(今週と...
-
フォームの値をクエリーに反映...
-
エクセルで6ヵ月後を自動入力で...
-
アクセスのレポートにおいて日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロボタンを押すと、ファイ...
-
「24日の0時」って・・・
-
日付の大小の表現
-
差し込み印刷に当日の日付が入...
-
「時間」、「期日」、「日付」...
-
回覧板の日付について質問です...
-
エクセル マクロ 名前を付けて...
-
Excelについて
-
エクセルで日付別にシートを分...
-
EXCELで日付を****年上期、****...
-
会社や役所などに提出する書類...
-
履歴書の日付間違いで落ちますか。
-
エクセルで日付け表示で、明治...
-
スクリーンショットで撮影する...
-
フォームの値をクエリーに反映...
-
日付以外のデータを抽出したい...
-
2つの日付の中間の日付 エク...
-
Excelでヘッダに前日の日付を表...
-
ACCESSで日付ごとに自動連番(...
-
差込印刷 縦書きで和暦(漢数...
おすすめ情報