• ベストアンサー

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

エクセル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

  • エクセル 関数 別シートへの抽出

    エクセル関数について質問します。 「数値の入ったセルだけを、その行ごと丸々別シートに抽出する方法」 について教えてください。 例、C列に空白セルと1、2や3など、数値の入ったセルがあります。空白セル以外の数値の入ったセルを、その行ごと別シートに抽出したい。 C3とC5に数値が入ってる→3行目と5行目を別シートに抽出する。 このようなことは関数でできるのでしょうか? マクロでないと無理でしょうか? お力をお貸しください。 よろしくお願いします。

  • エクセル:文字列間の行を抽出

    エクセルファイルで1つのシートに複数の表がひたすら縦に並んでいます。それぞれの表が別々のシートに記載されるようにしたいと思っています。 どの表も基本的な書式は同じなので列数は同じなのですが、行数は表ごとに異なります。 また各表の右下(C列)にTotalという文字列が必ずあります。 文字列Totalがある行の直下の行から次のTotalのある行まで抽出して、シートを作成できれば良いのだと思うのですが、どうすれば可能になるのか分かりません。 どなたか教えていただけ無いでしょうか。

  • 指定した文字列が抽出できる関数

    Excelで、指定した文字列だけを抽出表示する場合、「文字列を先頭(左)から抽出する」などの関数は「LEFT関数」や「RIGHT関数」がありますが、位置の指定ではなく、文字列の中にある、特定の文字だけを指定して抽出してできる関数は何でしょうか? たとえば「ラーメン」「うどん」「そば」いずれかを「含む」文字列が入っているセルの中から、「うどん」のセルだけを抽出して表示するという場合です。

  • EXCELのINDEX関数(数行ごと抽出)について

    たくさん検索をして、数行ごとの値を抽出するしくみはおよそ解りました。 (OFFSETやINDIRECT関数もふまえてどれが最適かピンときていない;;) ひとまずINDEX関数を使ってみようかと思いましたが、 例えば「8行ごと抽出」の場合、 先頭がA1…でなく、数行飛ばして1つ目がA6にある時はどうすればよいでしょうか。 なかなか検索で出て来なくてエラーで困っています。よろしくお願いします。

  • エクセルで、データのある行だけを抽出したい。

    エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。

  • エクセル関数について教えてください

    エクセル関数についてご教授ください。 添付図のようなデータ入力シートがあり入力者は山田、太田、斉藤の3名が入力します。 今、山田さんが7/29日の数学の列の10:40-12:10行のセルに「伊藤」と入力し、太田さんが同日のEnglishの列の13:00-14:30行のセル に「伊藤」と入力し、さらに斉藤さんが同日の国語の列の14:40-16:10行のセルに「伊藤」と入力した場合にsheet2(シート名:伊藤)の表に図で示すようなデータを自動で入力させたいと考えています。 sheet1の日付は横に1週間分あります。同様にSheet2(伊藤)にも同じ日付で1週間分あります。 このようなことは可能でしょうか? エクセル関数初心者で非常に困っています。 どうかご指導いただきたいです。

  • Excelセル内の改行を含む文字列の1行目抽出

    Excelセル内の改行を含む文字列があり、関数を使って、その1行目だけ抽出したい。 たとえば、下記のような式を書きました。「改行コード」おかしみたいで動作しません。 Left("A1", Find(vbCrLf, "A1")) (改行コードをさがして、そこまでの文字列を切り取る) これをVBAで書く方法があれば、コードを教えてください!

  • 【エクセル】特定の文字列(番号)の行だけ抽出したい

    現在資料を作っていて、またもや困ったことがあったので教えてください。 特定の文字が含まれる行のデータを抽出するにはどうしたらいいのでしょうか。 具体的にいうと ____|A|B|C|D|E| [01]|F|1|0|3|5| [02]|G|0|2|5|7| [03]|H|0|3|4|8|    中略 [21]|F|0|0|9|6| [22]|G|6|4|5|1| [23]|H|3|3|2|2|    中略 [31]|F|2|2|4|6| [32]|G|5|3|7|9| [33]|H|8|2|6|4|    以下略 *[]の中身は行番号 一番上段のA B C D Eは列の軸 |はセルの区切りを示している のような表でGのBのところ(行番号が10n+2のところのA列)だけのデータを合計したいのです。 つまり上の表でいえば =A2+A22+A32+A42+A52…(=0+6+5+…)ということをしたいのですが 数が600行近くあるので手入力だとかなり面倒くさいのです。 SUM関数を使うのかなとも思いましたが、それでもセルの指定の面倒くささは変わらないし… 何か簡単にできるようにする方法がありましたらご教授お願いします。

  • 関数にて一番最後の数値を抽出

    関数にて一番最後の数値を抽出するのに困っています。 列に店舗名、行に日付を設定し各日での売上額が入力されている表があります。 各店舗の最終行に一番最後に入力された売上額と日付を抽出したいのですが入 力数0のセルもある為に自学ではどうしても0を抽出してしまいます。 どうかご伝授のほど、宜しくお願い致します。       1日   2日   3日   4日   抽出日   抽出最終金額 A社    10    0     0    0     1日      10 B社    10    0    20    0     3日      20

  • エクセルで抽出した結果の最早時間取り出し

    エクセルの表において、該当の日付の中から、一番早い時間を抽出したいのですが、どういう関数を使ってどう書けばいいのでしょうか。 具体的には、以下のようにA列に日付があり、1行目に該当日付(抽出日付)が あるとして、2行めに抽出結果を出したいです。 計算結果 (1) "" (2) 15:00 (3) 07:29 (4) 15:45 (5) 03:45 以上、よろしくお願いします。

専門家に質問してみよう