- ベストアンサー
エクセル:複数の検索結果を表示するには?
エクセルで下記のようなシフト表から掃除当番表を作っています。 A B C D E 1 名前 2/1 2/2 2/3 2 山田 1 10 清掃 3 田中 2 清掃 10 清掃 4 木下 2 清掃 清掃 5 中村 1 清掃 有給 ・ ・ B列には各人の清掃回数がCOUNTIFで入力されます。 ここの表以外のセル(シートは別でも同じでも可)に清掃の人の名前だけを 日別に抽出して表示するにはどうしたらよいでしょうか? 一日の清掃当番は二名と決まっています。 基本のシフト表は行、列をいじれないので、表の範囲以外に表示したいです。 似たような例は検索であったのですが、エクセルを始めてまだ間もなく、 理解力不足もあっていまいち応用がきかないので、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「清掃」当番が1日2名に限定されるなら C列の下方の空いている行に =INDEX($A:$A,LARGE(INDEX((C$1:C$5="清掃")*ROW(C$1:C$5),),3-ROW(A1))) を貼り付けて、その下のセルにコピー。および右方向にもコピー。
その他の回答 (2)
- zap35
- ベストアンサー率44% (1383/3079)
#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行目 中村 木下 木下
お礼
実際のシートには表題が入ったりして、こちらにのせた表とは セル位置がずれていたのでそれでエラーになってしまったようです。 今確かめたらきちんとできました。 こちらのミスで申し訳ありません。 確認作業までしていただいて、ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
>エクセルを始めてまだ間もなく のものが立ち向かう課題では難しすぎる。 ーー エクセルでは苦手の課題です。 理由はエクセルはその列で上から初めて現れる「清掃」の行は捉えられるが、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はこの関数を公式関数化すれば判りやすいのにと思う。
お礼
初心者にはレベルが高い課題だったのですね。 おっしゃるように難しさに気づきませんでした。 ユーザー関数というのは初めて聞きました。 こんなのもあるのですね。奥が深い… 難しそうですがリンク先を見て勉強してみます。 式の意味まではまだ理解できてませんが、とりあえずそのとおりに 書き写したらできました。 丁寧に説明していただいて、ありがとうございました。
お礼
そのとおりにコピーペーストしてみたのですが、 #NAME?エラーがでてしまいました。 どこがおかしいのか… でも考え方の参考になりました。 もう少し試してみますね。 ありがとうございました。