- ベストアンサー
エクセルの関数、おしえてください。
エクセルで何時間も悩んでいます。 添付画像の左側のカレンダーに、右側のエクセルに記載している業務予定を入れたいのですが、 数式で飛ばすなど、何か言い方法はないでしょうか? いくつものパターンを、数年分作成しなければなならいため、ベタ打ちは厳しく。。。 何かいい方法があれば教えてください。 よろしくお願いします
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
単純に左側の表中に記入されている日付と、同じ日付の件名を、左側の表から飛ばすとしても、左側の表中に同じ日付が複数存在する事も考えられます。 ですから、左側の表中に同じ日付が存在する場合には、日付欄における、その日付の下のセルは空欄とし、その日付に該当する全ての件名を並べる事が出来る様に、次の日付は間隔を空けて記入する様にした方が、良いと思います。 その方法の一例は以下の通りです。 今仮に、右側の表のSheet名がSheet1、左側の表のSheet名がSheet2であり、Sheet2のB列には5行目から下に向かって日付が並んでいて、各日付の左側に件名が並んでいて、それらのデータを、Sheet1の2行目以下に日付順に並べ替えて表示するものとし、その際、A列に日付、B列に件名を表示するものとします。 まず、Sheet1のA2セルとA3セルの書式設定を日付にして下さい。 次に、Sheet1のB2セル書式設定の表示形式において、分類欄を ユーザー定義 とした後、種類欄に aaa と入力して、[OK]ボタンをクリックして下さい。 次に、Sheet1のA3セルに次の数式を入力して下さい。 =IF(ISNUMBER($A$2),IF(ROWS($1:3)-MATCH(MAX(A$2:A2),A$2:A2)>COUNTIF(Sheet2!$B:$B,MAX(A$2:A2)),MAX(A$2:A2)+1,""),"") 次に、Sheet1のB2セルに次の数式を入力して下さい。 =IF($A2="","",$A2) 次に、Sheet1のC2セルに次の数式を入力して下さい。 =IF(ROWS($1:2)-MATCH(MAX($A$2:$A2),$A$2:$A2)>COUNTIF(Sheet2!$B:$B,MAX($A$2:$A2)),"",INDEX(Sheet2!$A:$A,SUMPRODUCT(ROW(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$B:$B)))*(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$B:$B))=MAX($A$2:$A2))*(COUNTIF(OFFSET(Sheet2!$B$1,,,ROW(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$B:$B)))),MAX($A$2:$A2))=ROWS($1:2)-MATCH(MAX($A$2:$A2),$A$2:$A2))))) 次に、Sheet1のB2~C2の範囲をコピーして、Sheet1のB3~C3の範囲に貼り付けて下さい。 次に、Sheet1のA3~C3の範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。 後は、並べ替える日付範囲の中の、最初の日付を、Sheet1のA2セルに入力すると、自動的に並べ替えた表が表示されます。 尚、Sheet1のA2セルには、必ずSheet2のB列中で、最も古い日付が入力されると決まっている場合には、Sheet1のA2セルに次の数式を入力して下さい。 IF(COUNT(Sheet2!$B:$B)=0,"",MIN(Sheet2!$B:$B))
その他の回答 (4)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! Shee2に業務予定表がありSheet1に表示するとします。 画像を拝見すると同一日で複数の業務予定がある場合があるみたいなので、 その場合は列方向に個別に表示するようにしてみました。 一例です。 Sheet1のC2セルに =IF(COUNTIF(Sheet2!$B:$B,$A2)<COLUMN(A1),"",INDEX(Sheet2!$A$1:$A$1500,SMALL(IF(Sheet2!$B$1:$B$1500=$A2,ROW($A$1:$A$1500)),COLUMN(A1)))) これは配列数式になってしまいますので、この画面からコピー&ペーストしただけではエラーになると思います。 C2セルに貼り付け後、数式バー内で一度クリックします。編集可能になりますので Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 このC2セルを列方向と行方向にオートフィルではどうでしょうか? 尚、数式はSheet2の1500行目まで対応できるようにしていますが、 配列数式はデータが多すぎるとコンピュータにかなりの負担となりますので、 VBA等の方法が良いかもしれません。 参考になれば良いのですが・・・m(__)m
お礼
お礼が遅くなって、大変申し訳ありませんでした;_; 丁寧なご回答、ありがとうございました! これまでINDEXという関数を全く使用したことがなかったので 本当に勉強になりました! 実際に現在、また別の業務で活用させていただいております。 ホントにありがとうございました!!
- Kensyusei
- ベストアンサー率30% (25/81)
No.1で回答した者です。 画像が小さくて肝心の数式が見えませんね、すみません。 上部の吹き出しにはこう書いてあります。 作業リストの日付(数式)列には、日付列から月日だけを取り出す数式を入力しました。 これによりVLOOKUP関数を適用しやすくなります。 F3のセルに入力されている数式は以下の通りです。 =MONTH(E3)&"/"&DAY(E3) 下部の吹き出しにはこう書いてあります。 カレンダーの作業内容(数式)列には、カレンダーの日付と作業リストの日付(数式)が一致するセルの検索を行う数式を入力しました。 C11のセルに入力されている数式は以下の通りです。 =IFERROR(VLOOKUP(MONTH(A11)&"/"&DAY(A11),F$3:G$5,2,FALSE),"")
お礼
お礼が遅くなって大変申し訳ありませんでした(涙) 画像付で丁寧にご回答いただいてホントにありがとうございました。 おかげで業務に反映することができました! 皆さん、ホントによくエクセル関数を熟知してらして頭が下がる思いです。 ホントにありがとうございました!!!
- kagakusuki
- ベストアンサー率51% (2610/5101)
添付画像を拡大して見ましたが、文字が潰れて読めないため、質問者様がどの様な基準に従って、右側の表から、左側の表にデータを飛ばされたいのか判りません。 どの様になされたいのか、文章で説明しては頂けないでしょうか。(右表のSheet名と左表のSheet名もお教え願います)
- Kensyusei
- ベストアンサー率30% (25/81)
お礼
お礼がおそくなって、大変申し訳ありません。 ありがとうございました! 大変分かりやすかったです! 無事に業務に反映できました☆