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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
- Access(アクセス) アクセスで教えてください。 クエリで2日前を抽出する計算式を 入力して表示させると ちゃんとyyyy 1 2023/06/08 21:05
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Access(アクセス) access レポート 請求書について 2 2022/07/04 22:52
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Visual Basic(VBA) 過去日付、年の切り替え 6 2022/05/26 12:41
- Access(アクセス) Accessのデータ型の日付/時刻型について 1 2023/04/02 17:03
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
フォームの値をクエリーに反映したい
その他(Microsoft Office)
-
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
-
4
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
5
Access サブフォームでの選択行の取得
その他(データベース)
-
6
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
7
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
8
アクセスVBAのMe!と[ ]
Access(アクセス)
-
9
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
10
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
-
11
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
12
「年」と「月」だけの日付の表示方法
Excel(エクセル)
-
13
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
14
クエリで割り算する方法を教えてください
Access(アクセス)
-
15
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
-
16
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
17
日付型のテキストボックスに数値を入れて日付にしたい
Access(アクセス)
-
18
アクセス 日付抽出(年月のみ) 独特のテーブルデータをご了承ください。 毎月、先月分、先々月分の2ヶ
Access(アクセス)
-
19
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
20
アクセスで月単位の抽出
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンで購入したデーターが...
-
「24日の0時」って・・・
-
回覧板の日付について質問です...
-
「時間」、「期日」、「日付」...
-
ACCESSで日付ごとに自動連番(...
-
エクセルで6ヵ月後を自動入力で...
-
Accessにて24時を越えた場合の表示
-
エクセル マクロ 名前を付けて...
-
PCの日付が起動のたびにリセ...
-
日付の大小の表現
-
勤務表をエクセルで作る際、 最...
-
Excelでヘッダに前日の日付を表...
-
Mozilla Thunderbird で日付が...
-
ストリートビューの過去ってど...
-
差し込み印刷に当日の日付が入...
-
アンドロイドスマホ。カメラに...
-
Access VBA SQL文で教えてください
-
SQL 複数条件での検索について
-
Excel関数:日付にナノ秒を足し...
-
wordのグラフ、横軸数字が何度...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「24日の0時」って・・・
-
パソコンで購入したデーターが...
-
差し込み印刷に当日の日付が入...
-
日付の大小の表現
-
回覧板の日付について質問です...
-
「時間」、「期日」、「日付」...
-
エクセル マクロ 名前を付けて...
-
Excelの関数について質問です。
-
エクセルで6ヵ月後を自動入力で...
-
履歴書の日付間違いで落ちますか。
-
エクセルで日付別にシートを分...
-
差込印刷 縦書きで和暦(漢数...
-
WEEKDAYが反映されない
-
ACCESSで日付ごとに自動連番(...
-
EXCELで日付を****年上期、****...
-
2つの日付の中間の日付 エク...
-
エクセルで日付け表示で、明治...
-
アンドロイドスマホ。カメラに...
-
勤務表をエクセルで作る際、 最...
-
下の画像はアンドロイドタブレ...
おすすめ情報