- ベストアンサー
全ての月初の日付を表示させたいのですが
アクセスなのですが コンボボックスに 2000年から2013年の全ての月初の日付を表示させたいのですが クエリで作ることは可能でしょうか? 2000/1/1 2000/2/1 2000/3/1 2000/4/1 2000/5/1 2000/6/1 2000/7/1 2000/8/1 2000/9/1 2000/10/1 2000/11/1 2000/12/1 . . . こんな感じでクエリで作りたいのですが、 テーブルに値を入れないと不可能でしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
比較的、メンテナンスの簡単だと思われる例です。 年と月のテーブルを作成します テーブル :: T_年 フィールド : 年 年に 2000 ~ 2013 の値を入力します。 テーブル :: T_月 フィールド : 月 月に 1 ~ 12 の値を入力します。 クエリを作成します。 SELECT DateSerial([年],[月],1) AS 年月日 FROM T_年, T_月 ORDER BY DateSerial([年],[月],1); デザインビューでは添付画像のようになります。 2014年を加える場合も 「T_年」 に 1レコード追加するだけですみます。 ※ユニオンクエリなどを駆使すれば、新しいテーブルを作らなくても何とかなるのですが、 新しい年を追加したいときに、 ユニオンクエリのSQLビューを編集するのは、実際的ではないですよね?
その他の回答 (4)
- chayamati
- ベストアンサー率41% (260/624)
- piroin654
- ベストアンサー率75% (692/917)
No2です。 変数の宣言のところが重なって宣言されていました。 Dim db As DAO.Database Dim rs As DAO.Recordset Dim dStart As Date Dim dEnd As Date Dim dBase As Date です。
お礼
ありがとうございました。
- piroin654
- ベストアンサー率75% (692/917)
クエリでは無理だとおもいますが。 あっさり、テーブルを作ったほうが 早いと思います。 テーブル名を「T日付」として、 日付 日付/時刻型 のフィールドを作成します。 以下のコードを標準モジュールに貼り付け 実行してみてください。 インプットボックスが出るので、 「始める日付」に 2000/01/01 「終わる日付」に 2013/12/01 と入力してください。 なお、DAOを使っているのでコード表でツール、参照設定で DAOのチェックを確認しておいてください。 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim dStart As Date Dim dEnd As Date Dim dBase As Date Set db = CurrentDb Set rs = db.OpenRecordset("T日付", dbOpenDynaset) dStart = InputBox("始める日付") dEnd = InputBox("終わる日付") rs.AddNew rs!日付 = dStart rs.Update dBase = dStart Do While dBase < dEnd rs.AddNew rs!日付 = DateAdd("m", 1, dBase) dBase = DateAdd("m", 1, dBase) rs.Update Loop End Sub 作成したテーブルをコンボボックスの レコードソースにします。
お礼
ありがとうございました。
- kmetu
- ベストアンサー率41% (562/1346)
選択肢にいれたいということでしょうか ということでしたら 値集合タイプで値リストにして 値集合ソースを 2000/1/1,2000/2/1,2000/3/1,2000/4/1,2000/5/1,2000/6/1,2000/7/1,2000/8/1,2000/9/1,2000/10/1,2000/11/1,2000/12/1 にすればクエリでなくても可能です。 クエリで作りたいのでしたら、データのあるテーブルが必要です。
お礼
ありがとうございました。
お礼
ありがとうございました。