• ベストアンサー

エクセル、同じ行の別の列の文字列を抽出する関数

エクセル2010です。 例えば、図の上の表のように、担当ごとにある仕事をした日付を記入していく表があるとします。 そこに記入していくと、同時に別のカレンダー(図の下の表)に、日毎に誰が仕事をしたかまとめて書き出すような書類を作ろうとしてします。 日付を検索条件にして、その日付が書かれている同じ行のA列にあるセルの文字列を、ヒットするものだけ抽出して書き出す、という仕組みです。 カレンダーの日付はあらかじめ記入しているものとします。 こういう場合、どんな関数を使えばよいのでしょうか? 「この関数を使えばいい」というヒントだけでも結構です。どうぞよろしくお願いします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一例です。 ↓の画像のようにSheet1のデータをSheet2に表示するようにしてみました。 Sheet2の1行目(日付)は入力済みだとします。 とりあえずSheet1のZ列の100行目まで対応できる数式にしています。 Sheet2のA2セルに =IFERROR(INDEX(Sheet1!$A$1:$A$100,SMALL(IF(Sheet1!$B$1:ZG$100=A$1,ROW($A$1:$A$100)),ROW(A1))),"") これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定! この画面からコピー&ペーストする場合はA2セルに針具家後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを列・行方向にオートフィルでコピーで画像のような感じになります。m(_ _)m

markey08
質問者

お礼

ありがとうございます!早速試してみたところ、完璧に実現できました。 それにしても、こんなに複雑な式になるのですね。それに私がほとんど使ったことのない関数ばかりの複合技で、こんな高度な式になるなんてビックリです。 いちおう自分で、COUNTIF関数やIF関数を組み合わせて、名前の行が決まった形ならなんとかできたのですが、それだと実際に運用する表では空白が多くなって名前が飛び飛びしまい実用的ではないので、どうやったら上のほうにまとめて表示できるんだろうと、かなり悩んでいました。 こんなに早くズバリの回答をいただけて感動です。いただいた式の意味や機能を調べて、他にも応用できるように勉強します!

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! たびたびごめんなさい。 「お礼」書き込みの連絡メールが届いたので、再びこの画面を開いてみると 前回載せた数式の範囲指定に間違いがありました。 (タイピングミスです) もう一度数式を載せておきます。前回同様配列数式です。 =IFERROR(INDEX(Sheet1!$A$1:$A$100,SMALL(IF(Sheet1!$B$1:$Z$100=A$1,ROW($A$1:$A$100)),ROW(A1))),"") ※ Sheet1!$B$1:$Z$100=A$1 の部分で余計な「G」が入っていました。m(_ _)m

markey08
質問者

お礼

細かいところまで気を使ってくださり、ありがとうございます。 セルの範囲や番地は、当方のデータに合うように代入しましたので、問題ありませんでした。 IFERROR関数、INDEX関数、SMALL関数、ROW関数は今まで使ったことがなく、これらについて調べてなんとか式の意味がわかり、無事仕事のデータに応用することができる目途がたちました。本当に助かりました。 それにしても、エクセルはほんとになんでもできますね。

関連するQ&A

専門家に質問してみよう