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

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

以前の記事 レポートでカレンダー形式表示 に下記のような要望がありました。

同じ日にに複数の予定(レコード)が存在する場合があります。1日(1マス)に複数の予定を改行して表示することはできないでしょうか。

上のサンプルでは、複数フィールドインデックスを設定してあるので、同じ日に複数の予定を登録できないようになっていますが、複数の予定を登録したいことは良くあることですよね。

RptCalendar2.png

さて複数予定表示ですが、上記のカレンダー形式レポートとやはり以前の記事 faviconグループ内のデータを横連結する の方法を組み合わせれば簡単に実現できます。

上記ではカンマ区切りで連結してますが、それを改行区切りで連結すればいいだけです。

難易度:

テーブルは前回のサンプルと同じものですが複数フィールドインデックスを削除して、同じ日に複数の予定を登録できるようにしておきます。

日付 予定
2008/12/05 ○○さんの誕生日
2008/12/15 結婚記念日 
2008/12/15 忘年会 
2008/12/15 町内会 
2008/12/25 クリスマスパーティー 

12/15 が予定が立て込んでいますね。

前回のカレンダーのレポートに、T_Num.Num でグループ化して、グループヘッダーとグループフッターを表示させます。

詳細セクションにあったテキストボックス等のコントロールをすべてグループフッターに移動させます。予定のテキストボックスのコントロールソースを削除して(非連結にして)、名前を txt予定 と変更します。

詳細セクションに、予定 をテキストボックスとして配置します。グループヘッダーと詳細セクションの「可視」は「いいえ」にします。

グループヘッダーと詳細のフォーマット時のイベントプロシージャを下記のように記述します。

以上で完成です。

サンプルMDB が下記からダウンロードできます。
RptCalendar2_07.zip (Access 2007 形式 - 33kb)
RptCalendar2.zip (Access 2002-2003 形式 - 35kb)
RptCalendar2_2k.zip (Access 2000 形式 - 31kb)

2016/08/06 追記:サンプルファイル内の祝日判定用関数を「山の日」対応の最新版に変更しました。また、前月の予定や祝日が表示されていたのを表示されないように変更しました。

拍手する

13 Comments

フアン says..."複数表示"

RptCalendar2.zip (Access 2002-2003 形式 - 30kb)

レポートでカレンダーを前後1カ月(すなわち3カ月)を表示するには?
もっと、利用できそうなですが!
ヒントだけでもお願いできませんか?

2010.04.10 08:49 | URL | #qthh18ms [edit]
hatena says..."どのようなレイアウトでしょうか"

3つのカレンダーを3ページに分けてでしょうか。
それとも、1ページに縦に3つならべるのでしょうか。
それとも、横に3つならべるのでしょうか。

それによって、設計も変わってきますので。

2010.04.10 11:39 | URL | #5uE6dEgY [edit]
nomadex says..."縦並びのカレンダーについて"

初めてコメントいたします。
上記の予定表を使って、日付を縦に並べ、その横に複数の予定を
表示したいと考えております。
色々試してみたのですが、うまくいきません。
お教えくださいますようお願いいたします。

2011.07.11 00:14 | URL | #t18uTLdg [edit]
hatena says..."re: 縦並びのカレンダーについて"

nomadexさん。
サンプルではページ設定で列数を7に設定しているのですが、列数を1にすれば日付は縦に並びます。

縦に並べる場合は開始位置を考慮する必要はないので、レコードソースのSQLも下記のように変更します。

SELECT
DateSerial([年], [月],[Num]) AS 日付, T_Num.Num
FROM T_Num
WHERE
Num Between 1 And Day(DateSerial([年],[月]+1,0));


下記の記事の内容も理解しておいてください。
レポートでカレンダー形式表示 - hatena chips
http://hatenachips.blog34.fc2.com/blog-entry-56.html

2011.07.11 00:35 | URL | #5uE6dEgY [edit]
nomadex says..."複数の予定について"

hatenaさん、早速のコメントありがとうございます。
おかげで、日付は縦に並びました。
ただ、同日に予定が複数ある場合について、日付の横に
並べて予定を表示する事が出来ずに、また悩んでおります。
ご教授願えれば、幸いです。

2011.07.11 01:35 | URL | #t18uTLdg [edit]
hatena says..."re:複数の予定について"

> ただ、同日に予定が複数ある場合について、日付の横に
> 並べて予定を表示する事が出来ずに、また悩んでおります。

その方法をここの記事で紹介しているのですが、
内容を理解してその通りに設定すればできると思うのですが、
上手くいきませんか。

具体的にどこまで出来て、どこでどのように上手くいかないのか具体的に説明してもらえますか。

2011.07.11 11:52 | URL | #5uE6dEgY [edit]
glve says..."非連結テキストの書式"

初めまして。参考にさせていただいています。
テーブルデータをクエリで計算したデータをテキストボックスで表示し、今回の予定に非連結で読みだしたのですが、小数点以下の桁数の指定が効きません…。
プロパティで「書式-固定」「小数点以下桁数-2」と指定しても(詳細、Numフッタ両方)、15桁表示されてしまいます。
解決方法があれば教えていただきたいです。
よろしくお願いします。

2011.11.04 08:15 | URL | #3NdeTRJg [edit]
hatena says..."re: 非連結テキストの書式"


テキストボックスに代入するコードは、サンプルのままですか。
だとしたら、代入するときにFormat関数で書式を設定してください。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  Me.txt予定 = Me.txt予定 & Format(Me.予定,"0.00") & vbCrLf
End Sub

2011.11.08 23:36 | URL | #5uE6dEgY [edit]
glve says..."Re: re: 非連結テキストの書式"

返信ありがとうございます。
書かれた通りに入れてみましたら、ちゃんと望み通りの形を得ることができました!
プロパティでなく、実際にFormat関数を記述するんですね。
勉強になりました。ありがとうございました。

2011.11.09 18:16 | URL | #3NdeTRJg [edit]
ひろぽん says..."6カ月"

初めまして。いつも参考にさせていただいています。
任意の半年分のカレンダーを印刷したいと考えていています。なにかレポートの方法を変えれば可能でしょうか。お時間ありましたらご教示ください。
-----
|1月2月|
|3月4月|
|5月6月|
-----

といった具合です。よろしくお願いします。

2014.05.11 17:38 | URL | #sSHoJftA [edit]
hatena says..."re:6カ月"

> -----
> |1月2月|
> |3月4月|
> |5月6月|
> -----

ここのサンプルを元に下記のように改良します。

まず、下記のテーブルを作成します。

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

月に 1~6 の数値を入力。

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のサイズにして、
T_月をレコードソースとするメインレポートにサブレポートとして配置して、
リンクフィールドを月にして、ページ設定のレイアウトで2列に設定すればいいでしょう。

2014.05.13 05:34 | URL | #5uE6dEgY [edit]
ひろぽん says...""

お忙しいところありがとうございます。今試せないのでまたコメントさせていただきます!

2014.05.14 21:58 | URL | #sSHoJftA [edit]
hatena says..."カレンダー6ヶ月表示"

6ヶ月表示のカレンダーの作成について、記事にしましたので、参照ください。サンプルもあります。

レポートで6ヶ月分のカレンダー表示 - hatena chips
http://hatenachips.blog34.fc2.com/blog-entry-413.html

2014.05.17 23:25 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

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