抽出条件となる年と月を指定すれば、全員分の訪問予定表が、自動的に表示されるという方法は如何でしょうか?
(但し、未記入の訪問予定表のフォーマットのみのページも表示されてしまいますので、印刷する際には、何ページ目までを印刷するのかを指定する必要はあります)
今仮に、御質問文にある様な元データの表があるシートがSheet1であり、Sheet3のA列~D列を作業列として使用して、Sheet2に、その月に訪問する予定のある、各顧客向けの訪問予定表を、縦に並べて表示するものとします。
又、訪問予定表のレイアウトが不明なため、仮に、各訪問予定表のA列の各印刷ページ毎の1行目が年月欄で、同じくA列の各印刷ページ毎の5行目に、各顧客の氏名を表示し、A列の各印刷ページ毎の10行目以下に、各顧客毎のその月の訪問予定日時を表示するものとします。
まず、Sheet3のB2セルに次の関数を入力して下さい。
=IF(AND(ISNUMBER(1/DAY(INDEX(Sheet1!$A:$A,INT((ROW()-ROW(B$2))/2)+ROW(Sheet1!$A$1)+1))),ISNUMBER(INDEX(Sheet1!$B:$E,INT((ROW()-ROW(B$2))/2)+ROW(Sheet1!$A$1)+1,MOD(ROW()-ROW(B$2),2)*3+1))),INT(INDEX(Sheet1!$A:$A,INT((ROW()-ROW(B$2))/2)+ROW(Sheet1!$A$1)+1))+MOD(INDEX(Sheet1!$B:$E,INT((ROW()-ROW(B$2))/2)+ROW(Sheet1!$A$1)+1,MOD(ROW()-ROW(B$2),2)*3+1),1),"")
次に、Sheet3のA2セルに次の関数を入力して下さい。
=IF(ISNUMBER($B2),COUNTIF($B:$B,"<"&$B2)+COUNTIF($B$1:$B2,$B2),"")
次に、Sheet3のC2セルに次の関数を入力して下さい。
=IF(ISERROR(1/(INDEX(Sheet1!$C:$F,INT((MATCH(ROWS($2:2),$A:$A,0)-ROW($A$2))/2)+ROW(Sheet1!$A$1)+1,MOD(MATCH(ROWS($2:2),$A:$A,0)-ROW($A$2),2)*3+1)<>"")/(TEXT(SMALL($B:$B,ROWS($2:2)),"yyyy/m")=TEXT(Sheet2!$A$1,"yyyy/m"))),"",INDEX(Sheet1!$C:$F,INT((MATCH(ROWS($2:2),$A:$A,0)-ROW($A$2))/2)+ROW(Sheet1!$A$1)+1,MOD(MATCH(ROWS($2:2),$A:$A,0)-ROW($A$2),2)*3+1)&"◆"&COUNTIF(C$1:C1,INDEX(Sheet1!$C:$F,INT((MATCH(ROWS($2:2),$A:$A,0)-ROW($A$2))/2)+ROW(Sheet1!$A$1)+1,MOD(MATCH(ROWS($2:2),$A:$A,0)-ROW($A$2),2)*3+1)&"◆*")+1)
次に、Sheet3のD2セルに次の関数を入力して下さい。
=IF(ROWS($2:2)>COUNTIF($C:$C,"*?◆1"),"",SUBSTITUTE(VLOOKUP("*?◆1",IF(ROWS($2:2)=1,$C$1,INDEX($C:$C,MATCH(D1&"◆1",$C:$C,0)+1)):INDEX($C:$C,ROWS($C:$C)),1,FALSE),"◆1",))
次に、Sheet3のA2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。
次に、Sheet3のD2セルをコピーして、Sheet3のD3以下に、(顧客の人数を上回るのに十分な行数となるまで)貼り付けて下さい。
次に、Sheet2のA1セルの書式設定の表示形式を[日付]の
2001年3月
として下さい。
次に、Sheet2のB2セルに「訪問予定表」、B5セルに「様」(鉤括弧は無要)、A9セルに「訪問予定日時」と入力して下さい。
次に、Sheet2の印刷時における1ページ目に、各種の定型文等を入力して、1ページ目のレイアウトを作成して下さい。(顧客名や訪問日時は除く)
次に、Sheet2のA5セルに、次の関数を入力して下さい。
=IF(COUNTIF($B$1:INDEX($B:$B,ROW()),"様")>COUNTIF(Sheet3!$D:$D,"*?"),"",INDEX(Sheet3!$D:$D,COUNTIF($B$1:INDEX($B:$B,ROW()),"様")+ROW(Sheet3!$D$1)))
次に、Sheet2の印刷時における1ページ目の行範囲である5行目(定型文ではないセルが含まれている最初の行)~15行目の範囲をコピーして、 Sheet2の印刷時における2ページ目の先頭行に貼り付けて下さい。
次に、Sheet2のA10セルに、次の関数を入力して下さい。(これは「訪問予定日時」と入力されているのが、A9セルとA20セルの場合の関数です)
=IF(MOD(ROW()-ROW($A$9),ROW($A$20)-ROW($A$9))>COUNTIF(Sheet3!$C:$C,INDEX(Sheet3!$D:$D,COUNTIF($B$1:INDEX($B:$B,ROW()-1),"様")+ROW(Sheet3!$D$1))&"◆*?"),"",SMALL(Sheet3!$B:$B,MATCH(INDEX(Sheet3!$D:$D,COUNTIF($B$1:INDEX($B:$B,ROW()-1),"様")+ROW(Sheet3!$D$1))&"◆"&MOD(ROW()-ROW($A$9),ROW($A$20)-ROW($A$9)),Sheet3!$C:$C,0)-ROW(Sheet3!$C$1)))
次に、Sheet2のA10セルの書式設定の表示形式を[ユーザー定義]の
yyyy"年"m"月"d"日 "aaaa h"時"mm"分"
として下さい。
次に、Sheet2のA10セルをコピーして、Sheet2のA10以下と、A21以下のそれぞれに、訪問予定日時欄の行数(空欄も含む)の分だけ貼り付けて下さい。
次に、Sheet2の印刷時における2ページ目の行範囲をコピーして、 Sheet2の印刷時における3ページ目の先頭行以下に貼り付けて下さい。
次に、Sheet2の印刷時における各ページの末尾に、改ページを挿入して下さい。
次に、印刷の「ページ設定」の[シート]タブを開いて、1行目~4行目を印刷時の「タイトル行」に設定して下さい。
以上で準備は完了で、後はSheet2のA1セルに、
2013年11月
等と入力する事で、データを抽出する月(要年数)を指定しますと、全員分の月間の訪問予定表が表示されます。(印刷時には、1~4行目のタイトル行の内容が、全てのページの冒頭部分に挿入されます)
お礼
素晴らしいです。希望していたことができました。本当にありがとうございました。