• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでデータ抽出→並べ替え)

エクセルで営業マンの月間訪問予定表を発行する方法

kagakusukiの回答

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.8

 抽出条件となる年と月を指定すれば、全員分の訪問予定表が、自動的に表示されるという方法は如何でしょうか? (但し、未記入の訪問予定表のフォーマットのみのページも表示されてしまいますので、印刷する際には、何ページ目までを印刷するのかを指定する必要はあります)  今仮に、御質問文にある様な元データの表があるシートが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行目のタイトル行の内容が、全てのページの冒頭部分に挿入されます)

smokeyjin
質問者

お礼

素晴らしいです。希望していたことができました。本当にありがとうございました。

関連するQ&A

  • エクセルについて

    エクセルについて、 山田太郎  150 154 155 156 佐藤花子  151 153 158 高橋二郎  152 159 162 163 164 165    : (それぞれ別のセルに入力) というようなシート(1)の横書きのデータをもとにして、別のシート(2)の 150 151 152 153 154 : という縦書きの数列の横に、シート(1)の対応する名前 150 山田太郎 151 佐藤花子  152 高橋二郎 153 佐藤花子 154 山田太郎  : を表示させる方法をご教授願います。 実際のデータはシート(1)、シート(2)ともに膨大なデータのため、手作業の処理は 困難な状況です。 よろしくお願いいたします。m(_ _)m

  • エクセルでのデータ抽出方法について

    Excel2010で、IDと氏名を結びつけたリスト表を作成しようと考えています。 例として以下のようなエクセル表があったとします。 ※列A・列B→ID及び氏名   列D・列E→列A・列Bから抽出したい情報        【列A】    【列B】    【列C】    【列D】    【列E】      【行1】   11111   山田 太郎    -      11119    (※「山田 九郎を」入れたい) 【行2】   11112   山田 二郎    -      11112    (※「山田 二郎を」入れたい)     【行3】   11113   山田 三郎    -       11118    (※「山田 八郎を」入れたい)     【行4】   11114   山田 四郎    -       11114    (※「山田 四郎を」入れたい) 【行5】   11115   山田 五郎              【行6】   11116   山田 六郎                【行7】   11117   山田 七郎           【行8】   11118   山田 八郎 【行9】   11119   山田 九郎         : D列は既に入力済み(確定)で、IDが割り振られている人の氏名をE列に挿入したい場合の エクセルの操作方法について教えていただきたく、よろしくお願いします。

  • エクセルデータ整理をVBAで行いたい

    シート1(表1)                シート2(表2)  A列 B列 C列 D列            A列 B列 C列 D列 1名前 開始日 内容 終了日      1名前 開始日 内容 終了日  2鈴木 21年1月1日 AAA ○○○    2鈴木 ○○○ ○○○ 21年11月1日  3高橋 21年1月8日 BBB ○○○    3山田 ○○○ ○○○ 21年11月1日  4鈴木 21年1月20日 AAA ○○○   4高橋 ○○○ ○○○ 21年11月10日 5鈴木 21年2月10日 BBB ○○○   5高橋 ○○○ ○○○ 22年9月30日 6山田 21年2月13日 AAA ○○○ 7佐藤 21年3月3日 CCC ○○○ 8高橋 21年11月24日 CCC ○○○ 9高橋 21年11月24日 AAA ○○○ 上記の表について下記の表になるように求めたいのですが、シート1のデータ数は約17万行、シート2のデータ数は約6万行になります。 他の方の質問を参考に関数で求めようとしましたが、処理が非常に重く、入力した関数も成功しませんでした。 「VBAを使って作業をする」という結論に達しましたが、プログラムを組む知識がなく時間もないため皆さんの力をお借りしたいです。 条件 表2のB~C列は表1を参照し、表1のD列は表2を参照する B列は、求めるセルのA列(名前)が一致する行を対象として、複数の行が該当する場合はその中でも終了日に最も近い開始日を求める もし同じ数値があった場合は先に検索で該当した方の値を参照し、求めているセルの文字を赤字へ変更する(下記の表ではシート2のB5が赤字で表示される) また、開始日<終了日である C列はB列で該当した開始日のある行のC列の値を求める D列は各行のA~C列の値が一致した行のD列の値を求める シート1(表1)                   シート2(表2)  A列 B列 C列 D列                A列 B列 C列 D列 1名前 開始日 内容 終了日          1名前 開始日 内容 終了日 2鈴木 21年1月1日 AAA ○○○       2鈴木 21年2月10日 BBB 21年11月1日  3高橋 21年1月8日 BBB 21年11月10日  3山田 21年2月13日 AAA 21年11月1日  4鈴木 21年1月20日 AAA ○○○      4高橋 21年1月8日 BBB 21年11月10日 5鈴木 21年2月10日 BBB 21年11月1日  5高橋 21年11月24日 CCC 22年9月30日 6山田 21年2月13日 AAA 21年11月1日 7佐藤 21年3月3日 CCC ○○○ 8高橋 21年11月24日 CCC 22年9月30日 9高橋 21年11月24日 AAA ○○○ 説明がへたくそで申し訳ないですが、よろしくお願いします。

  • 条件を抽出し、フラグを立てる関数

    下記条件の場合、D列に「○」フラグを立てたいです。 D列に入力する関数を教えてください。 どうぞよろしくお願い致します。 ・ B列が同じ名前の行を抽出。 ・ 抽出した行のC列に「鉛筆」「消しゴム」「ペン」が入力されている場合、   D列に「○」をつけたい。 ・ ただし、B列が同じでも、C列に「鉛筆」「消しゴム」「ペン」以外が入っていた 場合、D列には何も入れない。 ※B列には飛び飛びに同じ名前が入力されている場合もあります。 ※行は1000行ほどあります。 【前】      B列    C列 山田太郎  鉛筆 山田太郎  ペン 伊藤二郎  缶 伊藤二郎  鉛筆 鈴木五郎  ペン 鈴木五郎  消しゴム 木村三郎  消しゴム 木村三郎  鉛筆 山田太郎  消しゴム 鈴木五郎  パソコン 【後】   B列    C列    D列 山田太郎  鉛筆    ○ 山田太郎  ペン    ○ 伊藤二郎  缶 伊藤二郎  鉛筆 鈴木五郎  ペン 鈴木五郎  消しゴム 木村三郎  消しゴム  ○ 木村三郎  鉛筆    ○ 山田太郎  消しゴム  ○ 鈴木五郎  パソコン わかりにくくて申し訳ありませんが、よろしくお願いいたします。

  • EXCEL VBAの記述をお願いします

    添付ファイル1.の表は一カ月のシフト表です各記号で役割があります上段(1)(1)が午前、下段が午後(2)(2)です。お願いしたいのはこのシフト表から2.の表に実績として1日の(1)はだれ(1)はだれ、(2)はだれと代入したいのです。 お願いは代入する式をお願いしたい。 1.の表です 1月  1日 2日 3日 4日 鈴木 (1)  (1)  (2) (2)    これらは縦横の罫線が引いてあります 佐藤 (1)  (1)  (2)  (2) 山田  (1) (1)  (2) (2) 伊藤  (1)  (1)  (2)  (2) 2.の表です 1月 1日  2日 3日  4日 (1) 鈴木 伊藤 山田  山田 (1) 佐藤 鈴木 伊藤  佐藤 (2) 山田  佐藤 鈴木  伊藤 (2) 伊藤  山田 佐藤  鈴木 このように1.の表から代入するVBAでの式をお願いいたします 画像添付ファイルもあります

  • 【EXCEL関数】違うシートに抽出結果を出したい

    一覧表から「○」の条件が付いたデータのみを別シートに関数で抽出したいです。 フィルタではなく関数を使用したいのは、抽出したデータから名前の定義を使用して リスト表示をさせたいためです。ご教示のほど、宜しくお願いします。 シート1は一覧表となっており、A列に「○」のついたデータのみをシート2に表示 シート1(一覧表)   A  B 1  ○  山田太郎 2  ×  佐藤次郎 3  ○  高橋三郎 4  ×  鈴木四郎 5  ×  中村五郎 シート2(抽出結果を表示させる)   A  B 1  ○  山田太郎 2  ○  高橋三郎 3  4  5 フィルタオプション、当方の考え得る限りの配列関数等、色々試しましたが、 不勉強のために上手く結果が表示されませんでした。 ご教示のほど、宜しくお願い致します。

  • エクセルでこういうときは・・・?

    book1は   A B 1 1-1 山田 2 1-2 田中 3 1-1 佐藤 4 1-2 加藤 5 1-3 高橋 6 1-2 武田 7 1-3 岡田 と、なっております。この表から book2で 1-1 1-2 1-3 山田 田中 高橋 佐藤 田中 高橋 佐藤 加藤 高橋 #N/A 加藤 高橋 #N/A 武田 高橋 #N/A 武田 岡田 #N/A #N/A 岡田 と、いう表を作りたいのです。が、ご覧のとおりうまくいっておりません。(>_<) 上の表の検索はVLOOKを使っています。 なにかよい方法を教えてください。お願いします。

  • EXCEL 縦横ある顧客名から、重複をなくす方法を教えて下さい。

    下記の様なデータがあるとします。     1月度 高橋 佐藤 山田 2月度 佐藤 佐藤 山田 3月度 山田 高橋 高橋 4月度 山田 佐藤 高橋 ↓ これを結果、 高橋 佐藤 山田 と、重複をなくして、抽出させたいのです。 縦だけならば、フィルタオプションで出来たのですが、縦にも横にもたくさんデータがあるので、 方法に困っています。 良い方法を教えて下さい。

  • エクセルのデータ抽出、別シートへの表記

    こんばんは。 とても簡単かもしれませんが、私の力ではどうしようもありませんのでどなたかお教えください。 sheet2には下記のようなデータがあります。    A       B       C       D 1         吉田     山田     佐藤   2 10月1日   A 勤    C 勤    B 勤 3 10月2日   C 勤    B 勤    A 勤 4    ・・・以下、データが続く・・・ sheet1に、以下のような結果を表記したいのです。    A       B       C       D 1          A 勤    B 勤    C 勤 2 10月1日    吉田     佐藤    山田  3 10月2日    佐藤     山田    吉田 4   ・・・以下、データが続く・・・ 過去の質問を見ても解決できませんでした・・。かなり素人です。お助けください。

  • エクセルのデータ抽出、別シートへの表記について

    こんばんは。 昨晩同じ質問をしたのですが、やはりN/Aエラーが出てしまいますのであらためてお願いいたします。(昨晩の質問は締め切ってしまいました) sheet2には下記のようなデータがあります。    A       B       C       D 1         吉田     山田     佐藤   2 10月1日   A 勤    C 勤    B 勤 3 10月2日   C 勤    B 勤    A 勤 4    ・・・以下、データが続く・・・ sheet1に、以下のような結果を表記したいのです。    A       B       C       D 1          A 勤    B 勤    C 勤 2 10月1日    吉田     佐藤    山田  3 10月2日    佐藤     山田    吉田 4   ・・・以下、データが続く・・・ 過去の質問を見ても解決できませんでした・・。かなり素人です。お助けください。