• ベストアンサー

エクセル:複数の検索結果を表示するには?

エクセルで下記のようなシフト表から掃除当番表を作っています。    A   B   C    D     E  1 名前      2/1   2/2    2/3 2 山田  1   10    清掃  3 田中  2   清掃   10    清掃 4 木下  2        清掃   清掃 5 中村  1   清掃        有給 ・ ・ B列には各人の清掃回数がCOUNTIFで入力されます。 ここの表以外のセル(シートは別でも同じでも可)に清掃の人の名前だけを 日別に抽出して表示するにはどうしたらよいでしょうか? 一日の清掃当番は二名と決まっています。 基本のシフト表は行、列をいじれないので、表の範囲以外に表示したいです。 似たような例は検索であったのですが、エクセルを始めてまだ間もなく、 理解力不足もあっていまいち応用がきかないので、よろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

「清掃」当番が1日2名に限定されるなら C列の下方の空いている行に  =INDEX($A:$A,LARGE(INDEX((C$1:C$5="清掃")*ROW(C$1:C$5),),3-ROW(A1))) を貼り付けて、その下のセルにコピー。および右方向にもコピー。

stilzchen
質問者

お礼

そのとおりにコピーペーストしてみたのですが、 #NAME?エラーがでてしまいました。 どこがおかしいのか… でも考え方の参考になりました。 もう少し試してみますね。 ありがとうございました。

その他の回答 (2)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。#NAME!エラーですか? 式を貼り付けた際に、手を加えていませんか? 私のPCでC6セルに#01の式を貼り付けて下と右方向にコピーすると以下のようになりますよ。また式中のデータ範囲(C$1:C$5の部分2カ所)は実際のシートにあわせてくださいね。       A列 B列  C列   D列   E列 1行目 名前      2月1日 2月2日 2月3日 2行目 山田    1   10    清掃 3行目 田中    2   清掃   10   清掃 4行目 木下    2        清掃   清掃 5行目 中村    1   清掃        有給 6行目            田中   山田   田中 7行目            中村   木下   木下

stilzchen
質問者

お礼

実際のシートには表題が入ったりして、こちらにのせた表とは セル位置がずれていたのでそれでエラーになってしまったようです。 今確かめたらきちんとできました。 こちらのミスで申し訳ありません。 確認作業までしていただいて、ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>エクセルを始めてまだ間もなく のものが立ち向かう課題では難しすぎる。 ーー エクセルでは苦手の課題です。 理由はエクセルはその列で上から初めて現れる「清掃」の行は捉えられるが、2つ目以後を捉える関数がないからなのです。 こういうタイプの質問は多いのですが、難しさに気づかなくて、質問回答を繰り返している。 回答者はVBAか既回答のような、初心者中級者が意味を掴むのが難しい式を載せざるを得ない。 ーーー もし下記のようなユーザー関数を作るとすると、考えやすくなる。 (関数の意味は、例えばC列において、a(例えば清掃という文字列)が、n番目に現れた行番号を返す関数です。) 標準モジュールに貼り付ける。 ユーザー関数は興味あれば http://www.excel.studio-kazu.jp/lib/e1iw/e1iw.html で勉強して。 Function fnd(C, a, n) col = C.Column f = 0 For i = 1 To 100 If Cells(i, col) = a Then f = f + 1 If f = n Then fnd = i Exit Function End If End If Next i End Function ーー C15に =INDEX($A:$A,fnd(C1,"清掃",ROW()-14)) これをE1まで式を複写、 C15:E15をC16:E16まで式を複写で 結果C15:E16に 2/1 2/2 2/3 田中 山田 田中 中村 木下 木下 とでる。 早くMSはこの関数を公式関数化すれば判りやすいのにと思う。

stilzchen
質問者

お礼

初心者にはレベルが高い課題だったのですね。 おっしゃるように難しさに気づきませんでした。 ユーザー関数というのは初めて聞きました。 こんなのもあるのですね。奥が深い… 難しそうですがリンク先を見て勉強してみます。 式の意味まではまだ理解できてませんが、とりあえずそのとおりに 書き写したらできました。 丁寧に説明していただいて、ありがとうございました。

関連するQ&A