• ベストアンサー

エクセル 日程表

作業時間を別フォームに転記するため、日にち指定で項目&時間を抜き出す方法がありましたら教えて下さい。 項目1...項目2...1.....2.....3..←日にち AAA.....QQQ......8..........←時間 BBB.....WWW.............6 CCC.....EEE..............2 上記のフォームを読み込み、 "別シート"に日にちを指定すると項目と時間が表示される。 例えば「2」日と指定すると BBB.....WWW...........6 CCC.....EEE.............2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 参照元の表が Sheet1 にあり、 表の範囲は A1:L10 だとします。 (項目数:9、日にち:10日まで) 別シートを Sheet2 として B2 に 日にちを入力するものとします。 以下、作業列を使用する方法です。 * * * Sheet1 の M2セルに↓の式を入れてください。 ----------------------------------------------------- =IF(INDEX($C$2:$L$10,ROW(A1),Sheet2!$B$2)=0,"",ROW()) ----------------------------------------------------- 以下、M10 まで数式をコピーしてください。 Sheet2 の B3セルに↓の式を入れてください。 ----------------------------------------------------- =IF(COUNT(Sheet1!$M$2:$M$10)<ROW(A1),"",INDEX(Sheet1!$A$2:$L$10,SMALL(Sheet1!$M$2:$M$10,ROW(A1))-1,COLUMN(A1))) ----------------------------------------------------- Sheet2 の C3セルに↓の式を入れてください。 ----------------------------------------------------- =IF(B3="","",INDEX(Sheet1!$B$2:$B$10,MATCH(B3,Sheet1!$A$2:$A$10,0))) ----------------------------------------------------- Sheet2 の D3セルに↓の式を入れてください。 ----------------------------------------------------- =IF(B3="","",INDEX(Sheet1!$C$2:$L$10,MATCH(B3,Sheet1!$A$2:$A$10,0),$B$2)) ----------------------------------------------------- B3:D3 を選択して、11行目までオートフィルでコピーしてください。 (項目数が 9個とすれば) B2 に日にち(2 とか 3とか)を入力すれば、該当項目が表示されると思います。 Sheet1 の作業列(M列)が目障りなら、非表示にしてください。 範囲、セル位置は実際の表に合わせて適宜変更してください。

beakichi
質問者

お礼

ありがとうございます。 イメージとおりに抽出することが出来ました。

その他の回答 (3)

  • tresbien
  • ベストアンサー率51% (51/99)
回答No.4

#1です ごめんなさい、訂正してください B3は  =VLOOKUP(A3,Sheet1!$A$1:$B$4,2,0)    または  =VLOOKUP(A3,Sheet1!$A$1:$B$4,2,FALSE) でした。 C列のも整数だけなら同様に付け足しても良いですよ、昇順に並んでいるからどっちでも良いです。

beakichi
質問者

お礼

昇順というのも条件ですね ありがとうございました。

回答No.3

Sheet1に下記のようなデータがあるとします。   A    B   C  D   E   F    G   H   I 1 項目1 項目2 1   2   3   4   5   6   7 2 AAA   QQQ  8 3 BBB   WWW      6 4 CCC   EEE      2 Sheet2のA1セルに日付を入力し、A3以下に項目1、B3以下に項目3、C3以下に時間を表示するものとします。 Sheet2のA3セルに =IF(C3="","",Sheet1!A2) B3セルに =IF(C3="","",Sheet1!B2) C3セルに =IF(INDEX(Sheet2!$C$1:$AG$10,ROW()-1,$A$1)=0,"",INDEX(Sheet2!$C$1:$AG$10,ROW()-1,$A$1)) を入力して、行番号4以下に項目の数だけコピーして下さい。 C3セルの式がややこしいですが、IF関数は、時間がないところ(0と表示される)は""として何も表示しないようにするために使っています。 index関数が本来の機能で、日付の欄を探すのに、 時間が入っている範囲を指定し、 行はROW()-1(sheet2のA、B列はSheet1より1段下から始まる)で、 列は日付そのものが列番号に使えますので、そうしています。 もし、項目数が10行以上の場合は、C3セルの式の $AG$10 の10を20とか30とかに変えて下さい。 時間がない項目の行は空行になってしまいますが、それをつめていこうとすると、さらに式が複雑になってしまいます。 そこまで行くとマクロを使った方がすっきりするかも。

beakichi
質問者

お礼

空行は発生はマクロということですね ありがとうございました。

  • tresbien
  • ベストアンサー率51% (51/99)
回答No.1

   A _____ B _____ C _____D _____E・・・ 1  項目1...項目2...1.....2.....3..←日にち 2  AAA.....QQQ......8..........←時間 3  BBB.....WWW.............6 4  CCC.....EEE..............2 がSheet1 にあって Sheet2には A1に2を入力することにした場合  A _______ B ______ C _______ 1 ________ 2  3  BBB.....WWW....... 4  CCC.....EEE....... B3 =VLOOKUP(A3,Sheet1!$A$1:$B$4,2) B4にコピー C3 =HLOOKUP(A1,Sheet1!$C$1:$AG$4,3)  C4 =HLOOKUP(A1,Sheet1!$C$1:$AG$4,4)

beakichi
質問者

お礼

ありがとうございます。 Sheet2のC列はうまくいくのですが、B列が#N/Aになりました。式はコピーして実行したのですがうまく表示できませんでした。よろしくご教示願います。

関連するQ&A