Excelで関数の検索方法について

このQ&Aのポイント
  • エクセルで利用する関数の検索方法について教えてください。
  • キャンプ参加者リスト作成中に、特定の条件で関数を利用して情報を表示させたいです。
  • VLOOKUP関数を使用して、会員番号に基づいて氏名と班名を表示させたいです。他の班の人の氏名を表示させる方法はありますか?
回答を見る
  • ベストアンサー

エクセルで関数の検索方法について

エクセルの関数を利用した検索方法について分からないところがありますので教えてください。 キャンプの参加者リスト作成中です。  A1、A2・・・には参加者の会員番号の数字が入っています。B1、B2・・・には氏名が入っています。C1、C2・・・にはキャンプの班名(A、B・・)が入っています。  次に、会員番号を入力し、VLOOKUP関数で氏名(D1セル)及び班名(D2セル)を表示させます。仮にこの人の班名がA班だとすると、この人以外のA班の人の氏名をE1、E2・・・に表示させるにはどうしたらいいでしょうか。 関数の詳しい方よろしくおねがいします!! もし関数では厳しいようならVBAでもいいです。

  • taku5
  • お礼率25% (14/56)

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答:No.3です。  済みません、A列に存在しない会員番号が入力された場合において、エラーを表示させない様にするために、先ほどの回答の中のF2セルに入力する関数は、その一部を変更して、次の様なものとして下さい。 =IF(OR($D$2="",ROWS($2:2)>COUNTIF($C:$C,$D$2)-1),"",INDEX($A:$A,MATCH($D$2,INDEX($C:$C,IF(MATCH($D$2,INDEX($C:$C,MATCH(F1,$A:$A,0)+1):INDEX($C:$C,ROWS($A:$A)),0)+MATCH(F1,$A:$A,0)=MATCH($D$3,$A:$A,0),MATCH($D$3,$A:$A,0),MATCH(F1,$A:$A,0))+1):INDEX($C:$C,ROWS($A:$A)),0)+IF(MATCH($D$2,INDEX($C:$C,MATCH(F1,$A:$A,0)+1):INDEX($C:$C,ROWS($A:$A)),0)+MATCH(F1,$A:$A,0)=MATCH($D$3,$A:$A,0),MATCH($D$3,$A:$A,0),MATCH(F1,$A:$A,0))))  同様に、「この人も含めたA班の全員の氏名を」という条件における、F2セルに入力する関数は次の様になります。 =IF(OR($D$2="",ROWS($2:2)>COUNTIF($C:$C,$D$2)),"",INDEX($A:$A,MATCH($D$2,INDEX($C:$C,MATCH(F1,$A:$A,0)+1):INDEX($C:$C,ROWS($A:$A)),0)+MATCH(F1,$A:$A,0)))

taku5
質問者

お礼

早速のご回答ありがとうございました! 参考にさせていただきます。

taku5
質問者

補足

 すいません、教えていただいた素晴らしい回答を実践してみたのですが、すべての行に関数を入れてしまうと、ファイルが重くなってしまって動きが遅くなってしまいました。  というのも、データ行自体が5万行あるんです。行すべてにコピーせずに、いくつかのセルだけで処理できませんか? お忙しい中申し訳ありませんが、よろしくお願いします。

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 回答:No.4です。 >行すべてにコピーせずに、いくつかのセルだけで処理できませんか?  回答:No.3、4の関数の場合は、5万行全てにコピーされる必要は御座いません。  最も人数が多い班のメンバー全員を表示出来るだけの行数があれば十分です。  但し、将来的に最も人数の多い班の人数がどの位まで増えるのかが不明の場合には、余裕を持って、行数を多目に用意しておかなければなりません。  後、あくまで念の為に申し上げておきますが、もしもの話ではありますが、同じ会員番号を持つ会員が複数人数おられる場合には、この方法では正しい結果を表示する事は出来無い場合が御座いますので御注意願います。

taku5
質問者

お礼

ありがとうございました。できました! とても助かりました(*^_^*)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

会員番号や氏名、班名はそれぞれA,B,C列の2行目から下方にあるとします。 D2セルには会員番号を入力することでD3セルには該当の氏名をD4セルには班名を表示させるため次の式をD3セルに入力しD4セルまでドラッグコピーします。 =IF(COUNTIF(A:A,D$2)=0,"",VLOOKUP(D$2,A:C,ROW(A1)+1,FALSE)) E2セルから下方に該当する班で他の人の氏名を表示させるとして、そのための作業列をF列に作ります。F2セルには次の式を入力して下方にドラッグコピーします。 =IF(C2=D$4,IF(B2<>D$3,MAX(F$1:F1)+1,""),"") 作業列が目障りでしたらF列を選択して右クリックし「非表示」を選択すればよいでしょう。 E2セルには次の式を入力して下方にドラッグコピーします。 =IF(ROW(A1)>MAX(F:F),"",INDEX(B:B,MATCH(ROW(A1),F:F,0)))

taku5
質問者

お礼

早速のご回答ありがとうございました! 参考にさせていただきます。

taku5
質問者

補足

 すいません、教えていただいた素晴らしい回答を実践してみたのですが、すべての行に関数を入れてしまうと、ファイルが重くなってしまって動きが遅くなってしまいました。  というのも、データ行自体が5万行あるんです。行すべてにコピーせずに、いくつかのセルだけで処理できませんか? お忙しい中申し訳ありませんが、よろしくお願いします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

>A班の人の氏名をE1、E2・・・に表示させる だけでしたらまだ良かったのですが、 >この人以外の という条件が付けられているが故に、相当長ったらしい関数となりました。  まず、A1セルに「会員番号」等の何らかの文字列を入力して下さい。  次に、D1セルに次の関数を入力して下さい。 =IF($D$3="","",IF(COUNTIF($A:$A,$D$3),VLOOKUP($D$3,$A:$B,2,FALSE)&"","(該当者なし)"))  次に、F1セルに次の関数を入力して下さい。 =$A$1  次に、D2セルに次の関数を入力して下さい。 =IF(COUNTIF($A:$A,$D$3),VLOOKUP($D$3,$A:$C,3,FALSE)&"","")  次に、F2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($C:$C,$D$2)-1,"",INDEX($A:$A,MATCH($D$2,INDEX($C:$C,IF(MATCH($D$2,INDEX($C:$C,MATCH(F1,$A:$A,0)+1):INDEX($C:$C,ROWS($A:$A)),0)+MATCH(F1,$A:$A,0)=MATCH($D$3,$A:$A,0),MATCH($D$3,$A:$A,0),MATCH(F1,$A:$A,0))+1):INDEX($C:$C,ROWS($A:$A)),0)+IF(MATCH($D$2,INDEX($C:$C,MATCH(F1,$A:$A,0)+1):INDEX($C:$C,ROWS($A:$A)),0)+MATCH(F1,$A:$A,0)=MATCH($D$3,$A:$A,0),MATCH($D$3,$A:$A,0),MATCH(F1,$A:$A,0))))  次に、E2セルに次の関数を入力して下さい。 =IF(OR($F2="",COUNTIF($A:$A,$F2)=0),"",VLOOKUP($F2,$A:$B,2,FALSE)&"")  次に、E2~F2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  以上です。  因みに、 >この人以外のA班の人の氏名を という条件ではなく、「この人も含めたA班の全員の氏名を」という条件であれば、F2セルに入力する関数を次の様に多少短いものとする事が出来ます。 =IF(ROWS($2:2)>COUNTIF($C:$C,$D$2),"",INDEX($A:$A,MATCH($D$2,INDEX($C:$C,MATCH(F1,$A:$A,0)+1):INDEX($C:$C,ROWS($A:$A)),0)+MATCH(F1,$A:$A,0)))

taku5
質問者

お礼

早速のご回答ありがとうございました! 参考にさせていただきます。 図まで用意していただきわざわざご丁寧にありがとうございました。

回答No.2

先程の回答者です。返信遅れてごめんなさい。 寝る前にエクセル弄って、イメージ通りに作ってみました。 A~Eまでは記述通りの仕様です。 ★D列 D1⇒番号手入力、D2⇒名前反映、D3⇒班名反映 ★E列 ※⇒最後に説明 (以下参照用) ★F列(F2)  =INDEX(B1:B$XX(最終行),MATCH(D$3(班名参照),C1:C$XX(最終行),0))  ※下の行まで引っ張ります index(cの全体班名) から match(D3の班名) を検索して返します ★G列(G2)  =IF(COUNTIF(F$2:F2,F2)=1,ROW(),"")  ※下の行まで引っ張ります 左の参照結果から重複数字を割り出します ★H列(H2)  =IF(D$2=F2,"",G2)  ※下の行まで引っ張ります 検索対象を左の列から除外します ★I列(I2)  =IF(H2>0,H2,"")  ※下の行まで引っ張ります 余分なデータを削除します (ここまでで、F列からI列は非表示にしてもOKです) 最後に、 ★E列(E2)  =IF(COUNT(I:I)<ROW(A1),"",INDEX(F:F,SMALL(I:I,ROW(A1))))  ※下の行まで引っ張ります I列に数値があるもののみ、上詰めでF列の名前を返します 以上、複合関数よりは分かり易くまとめてみました。 いかがでしょうか?

taku5
質問者

お礼

早速のご回答ありがとうございました! 参考にさせていただきます。 何度も回答していただき、ご親切にありがとうございました。

taku5
質問者

補足

 すいません、教えていただいた素晴らしい回答を実践してみたのですが、すべての行に関数を入れてしまうと、ファイルが重くなってしまって動きが遅くなってしまいました。  というのも、データ行自体が5万行あるんです。行すべてにコピーせずに、いくつかのセルだけで処理できませんか? お忙しい中申し訳ありませんが、よろしくお願いします。

回答No.1

明確な回答でないかもしれませんが、失礼を。 ●リストについて 上記の場合、a1に"会員番号"、b1に"氏名"、c1に"班名"という ヘッダーを入れたほうが良いかと思います。 ●他班員名表示について  フィルターを使ってコピぺ、や、  ピボットを使っての抜き出しじゃいけないのでしょうか?  vlookup利用であれば、班名を基準(左端)にして、別シートにリスト作成をし、  if式等と組み合わせて強引に表示も可能です。  ……が、この場合、班名リストが出来てしまうのであんまり意味ないですね。 『全体リスト表示 + 個人名入力による他班員表示』、 がしたいということになるのでしょうか。  

taku5
質問者

補足

早速のご回答ありがとうございます(*^^*) ピボットやフィルタで処理を行うのではなく、会員番号を入力するだけでその人と同じ班名を持つ他の人の氏名をリストアップしたいのです。 宜しくお願い致します。

関連するQ&A

  • エクセル2003関数について

    対戦結果表を作っています。エクセルの関数を入れ込みたいと思いますので、御知恵をお貸しください。仮に氏名A(B1セル)と氏名B(D1セル)が戦い、氏名A(B1セル)が2点先取し(C1セル)に2を入力、氏名B(D1セル)が1点を取り(E1セル)に1を入力しました。勝者は氏名Aの為、関数によって(F1セル)に自動的に氏名Aを表示させたいのです。パターンは2対1,1対2,0対0の3通りです 0対0は空白状態にしたいのです。困っています助けてくださいお願いします。

  • エクセルVLOOKUP関数の検索値について

      A   B     C     D     E 1 あ AAA 2 い  BBB 3 う  CCC 4 え  DDD 5         お   い  =VLOOKUP(C5,A1:A4,2,0) VLOOKUP関数にて、質問です。 検索値候補1=C5のセル 検索値候補2=D5のセル 範囲=A1:B4 E5=関数 (ここに式を入れたい) 検索値候補1がない時は、候補2を検索する そんな式はどうすればよいですか? 素人ですので、おたすけください

  • エクセル関数のことで困っています。

    今、簡単な表計算の表を作っていますが、先に進まず困っています。 A1~A200のセルに1~200の番号が昇順で入っています。そしてデータとして,B2,C2,D2,E2 に各々a、b、c、dが入っており,,B3,C3,D3,E3 にa1、b1、c1、d1・・・・・・・・・・・・B200,C200,D200,E200にw,x,y,zのようにB,C,D,E列に適当な数が入っています。 そこで、E列の値で昇順  SMALL(D$1:D$200,A1)  に並べ替え、同時にB,C,D,Eの値も返したいのです。つまりエクセルの並べ替え機能を関数で自動で行いたいのです。 今は、関数の、ROW,SUMPRODUCT,COUNT,INDEX,LARGE,COUNTIF,COLUMN,などを使い関数バーに5行ほどになり、処理にとても時間がかかります。 何とか、簡単で早い計算式はないでしょうか。 よろしくおねがいします。

  • エクセル(Excel)で困っています

      A   B   C   D   E  1 2 氏名 得点 氏名 得点 3 あ君 90 い君 85 4 い君 80 う君 75 5 う君 70 あ君 65 6 7 8 9 以上の様な表を作りました。(わかりにくくてすみません。) そこで例えば、セル番号A1に『う君』と入力すると、 セル番号A5の「う君」と セル番号B5の「70」と セル番号C4の「う君」と セル番号D4の「75」だけが、 太字になるような方法を、お教え下さい。 わかりにくい説明で申し訳ございませんが、よろしくお願いいたします。

  • Excel VBAを使って会員検索

    Sheet1のA列に会員番号、B列に氏名、C列にフリガナ、D列に住所といったデータがあります。 Sheet2のA列に会員番号のみがあります。 この2つのデータを照合して、一致した場合のみ、Sheet1の該当会員データの横のセルに“一致”もしくは“1”などの値(上の例だとSheet1のE列に)を入力できるようなVBAを組みたいのですが、教えていただけますでしょうか?

  • VBA複数セルで検索

    VBA複数セルで検索 VBA初心者です。 1つのシートにA列氏名1、B列番号1、c列エラー、D列氏名2、E列番号2と並んでます。 例) a*1001* *a*1001 a*1005*該当なし *a*1002 a*1000* *c*1003 c*1003* *e*1005 c*1005*該当なし *d*1004 以下続く(*はセル区切り) 氏名1と番号1の組み合わせが氏名2、番号2にあるかどうかチェックして ないものは、C列に「該当なし」とエラーを表示させたいです。 Find関数を使用してやってみたのですが、氏名と番号をセットで検索する方法がわかりません。 氏名と番号をくっつけて検索すればいいのでしょうか?

  • if関数とVLOOKUP関数について

    if関数とVLOOKUP関数について エクセル2003で以下のような表を2枚 (シート1とシート2です)作成しています。 上段がシート1で、左上「NO」からA1セルに なっています。 下段がシート2で、特別番号が付番される 人の対象者リストで、「氏名」 がA1セルです。 図が乱れてすいません。 シート1のB列の売上日、C列の氏名は 別ファイルから貼り付けています。 シート2は、特別番号を付番する人の 氏名リストですが、ここでは、便宜上 小文字のアルファベットにしています。 ここでしたい処理ですが、売上日及び氏名を シート1に貼り付けた際に、特別番号対象者 (シート2のリストに挙がっている人) が入ってきたとき、自動的にシート1の A列のNOの列に「特別番号」 との文言を表示させたいのです。 実際に数字を表示するのではなく、 「特別番号」の文字列を表示させたいです。 IF関数とVLOOKUP関数でできると思うのですが よくわかりませんでしたので、教えてください。 NO 売上日 氏名 1 1月1日 A 2 1月2日 B 特別番号 1月3日 a 特別番号 1月4日 b 特別番号 1月5日 c 3 1月6日 D 4 1月7日 E 特別番号 1月8日 e 特別番号リスト(シート2) 氏名 住所 a 東京都 b 大阪府 c 神奈川県

  • sheet2からsheet1へのデータの飛ばし方(エクセル関数)

    Sheet1 A  B C D E (列) ―――――――――――――――――――――――― 1| 番号  氏名   所属  入社  生年月日 2| 1000  斉藤   東京  10/4  (入力箇所) sheet2 A B C D (列) ――――――――――――――――――― 1| 番号  氏名  所属  生年月日 2| 1000  斉藤  東京  1988/11/1 sheet1のE行(生年月日)にsheet2を参照し、同じ番号の人の生年月日が表示されるようにしたいのですが、どのような式(関数)を入れたら表示されるでしょうか? ほかの似たような質問の解答を見てMatchやvlookupを使ってみましたが、できなかったので教えてください。 よろしくお願いします。

  • エクセル関数で、ご教示下さい

    例として、セルA1~A10に、1.2.3.・・・・10と番号を入れて       セルB1~B10には、商品の在庫数が入力されているとします。 この時、セルC1に集計の開始番号 セルC2に集計の終了番号を入力すれば、      D1に開始番号から終了番号までのB列の合計を表示させたいのですが、      このような集計ができるD1に入れる関数はあるでしょうか。 例えば、B列の3行目から6行目までの合計をD1に表示させたい場合に      C1にA列番号の3を入力、C2には6を入力すれば、D1にB3からB6の合計を      表示してくれる、といった関数です。      開始番号、終了番号は、何番~何番までと、その都度変わります。 どなたか、よろしく、お願いいたします。         

  • 【急】エクセル こんなときの関数!

    A列に会員番号、B列に氏名が入っています。 会員番号を入力すると氏名が自動付与されるようにするには、どのような関数を使えば良いのでしょうか! 尚、同一シート内での入力です。

専門家に質問してみよう