MS Access Tips/Sample and VBA and Blog customize etc...

レポートで6ヶ月分のカレンダー表示

以前の記事でレポートでカレンダー形式表示するする方法は紹介しました。それは1ヶ月分を表示するものでしたが、コメント欄で半年分(6ヶ月)表示できないかととの質問があったので、回答するためにサンプルを作成したので紹介しておきます。

レポートでカレンダー形式表示

レポートで6ヶ月分カレンダー

難易度:

6ヶ月分を6ページで出力する

とりあえず6ヶ月分を連続して6ページで出力する方法から。

レポートでカレンダー形式表示 複数予定に対応 - hatena chips

上記のサンプルを元に改良していきます。

前回の方法は1ヶ月表示が前提ですので、そのまま抽出する期間を6ヶ月にしてもうまくいきません。

6ヶ月分繰り返し出力する必要がありますので、下記のテーブルを作成します。

テーブル名 T_月
フィールド 月 数値型

この月に 0~5 の数値を入力。

テーブル:T_月

Q_カレンダー のSQL文を下記のようにする。

SELECT
DateSerial([Forms]![F_予定]![年],[Forms]![F_予定]![月]+[月],[Num]) AS 日付,
T_月.月, T_Num.Num
FROM T_Num, T_月
WHERE
T_Num.Num Between 2-Weekday(DateSerial([Forms]![F_予定]![年],[Forms]![F_予定]![月]+[月],1)) And Day(DateSerial([Forms]![F_予定]![年],[Forms]![F_予定]![月]+1+[月],0));

Q_予定カレンダー のSQLは、

SELECT Q_カレンダ.月, Q_カレンダ.Num, Q_カレンダ.日付, T_予定.予定
FROM Q_カレンダ LEFT JOIN T_予定 ON Q_カレンダ.日付 = T_予定.日付;

レポートのグループ化の設定で Num グループの上位に 月 グループを作成して、グループヘッダーを表示させます。月ヘッダーの高さは 0 にします。
改ページを「カレントセクションの前」に設定します。

これで、F_予定 フォームのコンボボックスで選択した年月を先頭に6ヶ月分カレンダーが6ページで出力されます。

これが完成すれば、ページ設定から、プリンターの設定で、1用紙に6ページを割り付ける設定にして印刷すればいいでしょう。

当方のプリンタの場合の設定例
プリンター設定ページ割付

1ページに6ヶ月分をレイアウトする

プレンタードライバーにページ割付の機能がないという場合や、Access側だけで実現したいという場合は、サブレポートを使う方法になります。

サブレポートは現状のレポートのサイズを1/6に縮小します。下記で紹介している関数を使うと簡単に縮小できます。

レポートのサイズを拡大縮小する関数 - hatena chips

「T_月」テーブルをレコードソースとするレポートを作成して、ページ設定のページレイアウトで列数を2、セクションの高さを用紙高さの1/3より小さくします。これで、2列×3行の6レコード分が1ページに収まります。

これをメインレポートとして、詳細セクションに上記のサブレポートを配置します。

メインレポート_サブレポート_デザインビュー

設定の詳細はサンプルを参照ください。

これで冒頭のタイトル画像のレポートになります。

サンプルファイルが下記からダウンロードできます。
RptCalendar3_07.zip (Access 2007-2010 形式 - 43kb)
RptCalendar3.zip (Access 2002-2003 形式 - 39kb)
RptCalendar3_2k.zip (Access 2000 形式 - 39kb)

拍手する

5 Comments

ひろぽん says...""

ありがとうございました。先日教えていただいた方法でできました。でも今回のサンプルのがカッコイイです。ページヘッダーを表示させたかったので、サブレポートのほうを利用させていただきたいと思います。
もう1点お伺いしたいのですが、F_予定に非連結のテキストボックスを作成し、顧客IDで絞込みをしたいと思っています。R_カレンダ_MのNumフッタに予定を挿入。T_予定に顧客IDの項目を追加しました。Q_予定カレンダにT_予定と顧客IDの項目を追加、抽出条件に[Forms]![F_予定]![顧客ID]としたところ、カレンダは表示されるのですが、予定のある日付のみ表示され、その他の日付は空白になってしまいました。すべての日付を表示させることは可能でしょうか?なにか良い方法あればご教示ください。

2014.05.18 18:10 | URL | #sSHoJftA [edit]
hatena says..."予定抽出"

テーブル「T_予定」からクエリを作成して、そこに抽出条件 [Forms]![F_予定]![顧客ID] を設定します。

Q_予定カレンダ の T_予定 を削除して、代わりに Q_予定 を追加します。
Q_予定 から 予定 を追加します。
Q_カレンダ.日付→Q_予定.日付 となるように結合します。

あるいは、Q_予定カレンダ を SQLビューにして、T_予定 を Q_予定 に書き換えてもいいです。
以上でどうでしょうか。

2014.05.19 00:23 | URL | #5uE6dEgY [edit]
ひろぽん says...""

できました!前半の方法で成功です。本当に感謝感謝です。ありがとうございました!

2014.05.19 23:42 | URL | #sSHoJftA [edit]
あおこ says..."ウィークデイだけのカレンダー"

いつも活用させていただいています。ありがとうございます。

こちらのサンプルを活用させていただき、1年分のカレンダーを作成しました。

ウィークデイのみに開催される会議のスケジュールであり、少しでも大きく表示したいので、土日を削除したものを作成したいと考え、クエリに条件をつけ週休日以外のデータを抽出するようにしたところ、大方はうまくいったのですが、土曜始まりの月のみ土曜のデータが消えているため、1行目に空欄が並んで2行目から3日(月)が始まる表示となってしまいました。

これを解消したいのですが何かいい方法がありますでしょうか。

現状自分で考え付く方法としては、土曜始まりの月を特定し、その場合Numが0より小さいデータを消すという方法です。
ワークテーブルを利用して削除しようかと考えていますが、Q_カレンダやQ_予定カレンダの条件指定等で可能な方法があればぜひご教示ください。

2015.03.02 12:55 | URL | #- [edit]
hatena says..."re:ウィークデイだけのカレンダー"

> ウィークデイのみに開催される会議のスケジュールであり、少しでも大きく表示したいので、土日を削除したものを作成したいと考え、クエリに条件をつけ週休日以外のデータを抽出するようにしたところ、大方はうまくいったのですが、土曜始まりの月のみ土曜のデータが消えているため、1行目に空欄が並んで2行目から3日(月)が始まる表示となってしまいました。
>
> これを解消したいのですが何かいい方法がありますでしょうか。

レポートでカレンダー形式表示 - hatena chips
http://hatenachips.blog34.fc2.com/blog-entry-56.html

上記の追記で1列目の曜日を変更する方法を紹介しています。
この方法で土曜日が1列目になるようにします。

具体的には、Q_カレンダー のWHERE句を下記のようにします。

WHERE T_Num.Num Between 2-Weekday(DateSerial([Forms]![F_予定]![年],[Forms]![F_予定]![月]+[月],1),7) And Day(DateSerial([Forms]![F_予定]![年],[Forms]![F_予定]![月]+1+[月],0));


つぎに Q_予定カレンダーのSQLに下記のWHERE句を追加します。

WHERE Weekday([日付],7)>2

これで土日以外の曜日が抽出されます。

あとはレポートの列数を5に設定すれば完成です。

2015.03.02 23:53 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/413-8b0a00ac
該当の記事は見つかりませんでした。