• ベストアンサー

複数一致からの検索

シート1のような様な表があります。シート2に日付、部屋番を入力するとシート1の日付、部屋番の一致から※C1に名前が表示されるようにしたいです。 シート2のC1にどのような関数を入力したらよろしいでしょうか? よろしくお願い致します。 シート1   A   B   C   日付  部屋  名前 1  1/1  101  太郎 2  1/1  102  花子 3  1/1  201  次郎 4  1/2  101  花子 5  1/2  102  太郎 シート2    A B C   日付  部屋  名前 1  1/1  102  ※花子

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

>ROW関数の前の100は何を示しているのでしょうか? ((Sheet1!A2:A100=A2)+(Sheet1!B2:B100=B2)<2)*100+ROW(A2:A100) この数字は条件に合致しない場合に、データ数よりも大きな行番号を返すための係数です(したがって1000でも10000でもOKです)。 配列数式の知識がないとわかりにくいところがありますが、数式を説明すると、Sheet1!A2:A100がA2と等しくSheet1!B2:B100がB2と等しい場合は、この2つの式を加算した式は2を返しますが、それ以外のセルは1または0を返します。 したがって、2つの式が2未満の条件に合致する場合はTRUEとなり、それに100を掛けると100になりますが、この条件に合致しない場合(すなわちA列とB列が一致するデータの場合)は、FALSEとなりこれに100を掛けると0が返ります。 この数字に行番号を加算すると、A列とB列が一致するデータの場合はそのまま行番号を返しますが、合致しないセルはデータの行番号よりも100大きい数字となります(この行は空白行)。 この配列の中から最小値(2つの列が一致する100より小さい数字)の行番号をC列からINDEX関数で引っ張ってくる数式になっています。 ちなみに最後の「&""」は該当データがない場合に、数式で求めた行番号が空白行の行番号となり、空白セルを参照した時の「0」が表示されるのを防ぐために入力しています。 >あとシート1が100を超えそうな場合はどうしたらよいでしょうか? 上記のように、この数字は特に大きな意味がある数字ではないので、たとえばデータが1000以内なら1000としてください(多くのセルに配列数式を入力すると、計算負荷がかかりますので、配列部分のセル範囲は必要以上に大きめに設定しないようにしてください)。

supercar02
質問者

お礼

ありがとうございました。関数って奥が深いですね まだまだ勉強しないといけないと感じました。楽しいから続けられるんですがね。 助かりましたまた何かあればよろしくお願いいたします

その他の回答 (5)

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

えNo.2です! たびたびごめんなさい。 補足に >あとシート1が100行を超える時が来ると思います。その時はどうしたらよ いでしょうか? >指定の範囲をC全行などとしたらかなり動きが遅くなってしまいます。アドバイスお願いします。 とありましたので再びお邪魔しました。 当方使用のExcel2003の場合ですが 最終行は65536行目になると思います。 最終行までオートフィルでコピーするのも大変でしょうから、 そこで一つの方法ですが、 最終行まで数式をあらかじめ入力する方法です。 前回の画像で説明させていただくと Sheet1の作業列D2セルにとりあえず、 =A2&B2 という数式を入れます。 そして、D列全てを範囲指定(列番号の「D」の部分でクリックすると列全てが範囲指定されます)  → 右クリック → 挿入 これで作業列がE列に移動しましたので、 挿入したD2セルに「2」と入力 D2セルをアクティブにし、メニュー → 編集 → フィル →連続データの作成 を選択すると↓の画面がでますので、 ここで範囲を「列」・「停止値」欄に「65536」と入力してOK これで最終行まで連続データが作成されましたので 先ほど移動したE2セルのフィルハンドルでダブルクリック これで最終行まで数式が入力されます。 最後にD列全てを削除してSheet1の操作は完了です。 同様にSheet2のC2セルに数式を入力します。 この場合の数式は =IF(COUNTBLANK(A2:B2)>0,"",INDEX(Sheet1!$C$2:$C$65536,MATCH(A2&B2,Sheet1!$D$2:$D$65536,0))) となります。 その後の操作は先ほどSheet1で行った操作と同様に、C列全てを範囲指定し、列を挿入 → 最終行まで連続データを作成し、移動したD2セルのフィルハンドルでダブルクリック 最後にC列全てを削除して完了です。 Sheet2も最終行まで数式が入っているはずです。 尚、だるるクリック後、表示されるのに若干時間がかかるかもしれません。 どうも何度も失礼しました。m(__)m

supercar02
質問者

お礼

詳しい説明ありがとうございました 参考になりました。また何かありましたらよろしくお願いいたします

回答No.4

みなさまが既に回答されている方法と大差はないのですが、 こういうやり方もできますのでご参考までに。。。 手順としては  (1)Sheet1のC列に作業列を作成  (2)C1=A2&B2 の関数をうめこみ  (3)Sheet2のC列に   =VLOOKUP((A2&B2),Sheet1!C2:D6,2,0)  (4)気になるようであれば、作業列(Sheet1/C列)を非表示にする   →C列にマウスをあわせ、右クリック⇒非表示を選択 作業列は&のかわりにconcatinateを使ってもよいと思います。

supercar02
質問者

お礼

ありがとうございました。何とかできました

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

2つの条件に合致するセルの値を表示するなら以下の式をC2セルに入力します。 =INDEX(Sheet1!C:C,MIN(INDEX(((Sheet1!A2:A100=A2)+(Sheet1!B2:B100=B2)<2)*100+ROW(A2:A100),)))&"" Sheet2の3行目以下にも検索データがあるなら、Sheet1のデータ範囲を絶対参照にしてください。

supercar02
質問者

補足

ありがとうございます。作ることができました。 ROW関数の前の100は何を示しているのでしょうか? あとシート1が100を超えそうな場合はどうしたらよいでしょうか? お手数掛けますがご指導よろしくお願い致します

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

こんばんは! 色々方法はあるかと思いますが・・・ 一例です。 ↓の画像でSheet1に作業用の列を設けています。 作業列D2セルに =A2&B2 としれオートフィルでずぃ~~~!っと下へコピー。 Sheet2のC2セルに =IF(COUNTBLANK(A2:B2)>0,"",INDEX(Sheet1!$C$2:$C$100,MATCH(A2&B2,Sheet1!$D$2:$D$100,0))) という数式を入れ、オートフィルで下へコピーすると 画像のような感じになります。 尚、数式はSheet1の100行目まで対応できるようにしています。 以上、参考になれば良いのですが 他に良い方法があれば読み流してくださいね。m(__)m

supercar02
質問者

補足

回答ありがとうございます。出来ました (1)あとシート1が100行を超える時が来ると思います。その時はどうしたらよ いでしょうか?  指定の範囲をC全行などとしたらかなり動きが遅くなってしまいます。  アドバイスお願いします。 (2)シート1がいっぱいになった時にを入力する際いちいち行を足さなくても自動で増やすことは出来 ますか?

  • Tofu-Yo
  • ベストアンサー率33% (36/106)
回答No.1

シート1のB列とC列の間に1列設けて、非表示にするは反則ですか? もしよいのなら 1.追加した新しいC列のC1に、「=MONTH(A1)*100000+DAY(A1)*1000+B1」と入力し、C5までコピペします。 2.シート2のC1に、「=vlookup(MONTH(A1)*100000+DAY(A1)*1000+B1,シート1!$C$1:$D$5,2,0)」と入力します。 複数のKeyで検索するときはこのように結合させたひとつのKeyを作るとVLOOKUPが使えて便利です。 なお、Keyの見た目にこだわらなければMONTH(A1)*100000+DAY(A1)の代わりにA1そのものを使っても大丈夫です。

supercar02
質問者

お礼

ありがとうございました 参考になりました。また何かありましたらよろしくお願いいたします

関連するQ&A

  • 2つの条件一致から検索

    エクセル2007で下の様な表を作っているのですが日付と名前から部屋を検索したいです。 6Aに1/1、6Bに花子と入力し6Cに102号と表示させたいのですが どうもうまく出来ません。解る方どうぞ教えて頂けませんか?よろしくお願い致します。   A   B   C    1 1/1  太郎  101号   2 1/1  花子  102号 3 1/1  次郎  103号 4 1/3  五朗  101号 6 1/1  花子 ※102号

  • Excel : データを部分一致で参照したい

    こんにちは。 部分一致の方法をご存知でしたら教えてください。 以下のような二つのシートがあります。 <シート1> セルA 山田太郎 木村次郎 佐藤花子 <シート2> セルA  セルB    セルC 山田  太郎  03-1234-5678 木村   次郎  03-****-***** 佐藤   花子  03-****-***** シート1にシート2の電話番号を参照して表示させたいのですが、 シート2には苗字と名前が別のセルになっていて、 完全一致ができません。 シート2に1セル足して、苗字名前を両方表示させてもいいのですが、 できるだけ、シート2はいじらずに、苗字だけ一致させるか、あるいは二つのセル(苗字と名前)を参照して、シート1に電話番号を表示させる方法さがしていますがうまくいきません。どなたか詳しい方がいらっしゃいましたら、ご教示いただけませんか。よろしくお願い致します。

  • 重複を削除し顧客リストを作成

    いつも回答いただきありとうございます。とても助かり勉強になってます。 シート1に下記のような日付別の利用管理表があります。この表から重複する名前を削除したシート2のような顧客リストを作成したいのですがどうしたらいいでしょうか?ご指導よろしくお願いいたします。 シート1    A   B   C   1  日付  名前  住所  2  1日  太郎  ○市 3  1日  花子  □市 4  3日  太郎  ○市 5  4日  花子  □市 シート2    A   B      1  名前  住所  2  太郎  ○市 3  花子  □市

  • エクセルの集計での質問

    A列に日付、BからF列に担当者名(1~5)が入っています。 この表で誰が何日稼働したか調べたいのですが、日付の被りがあるのと、例えば▲▲さんが「担当者1」、●●さんが「担当者2」と決まっているわけでなく、早いもの順に「担当者1~5」までに名前が入っています。 A B C D E F 日 担1 担2 担3 担4 担5 1/3 太郎 次郎 花子 三郎 和子 1/3 次郎 太郎 三郎 美和 和子 1/4 花子 次郎 孝夫.......... この場合求められたものが 1/3 太郎 ×1、次郎 ×1、三郎×1、花子×1、和子×1 、美和×1 1/4 花子×1、次郎×1、孝夫×1 なので 太郎1日 次郎2日 三郎1日 花子2日 和子、美和、孝夫各1日 という風にエクセルで集計できないでしょうか?

  • エクセルで複数条件を満たす値を表示する方法

     質問初めてで失礼しますが、よろしくお願いします。 エクセルにおいて  下記のようにシート「犬」に基礎となるデータがあります。     A   B  C  D  E   ・・・ 1        花子 太郎 次郎 2 1994 6月 200 100 320  3 1994 7月 700 300 500 4 1995 6月 800 500 100 5 1995 9月 900 800 300 6 1996 6月 500 200 200 ・ ・ ・  これを別のシート「猫」に花子の情報のみ一覧表示したいのですが、B3、B4・・・C3、C4・・・にどのような数式をいれればよいでしょうか?  なお、このようにして、太郎や次郎もシート毎に一覧表示させる予定です。    A B C D E   ・・・ 1 花子 2     6月 7月 8月 9月 3 1994  4 1995  5 1996  6 1997  7 1998  ・ ・ ・  よろしくお願いします。  

  • #N/Aとは?(すみません長文です)

    いつも参考にさせていただいています。 Windows98のExcelでIF関数とVLOOKUP関数を使った表を作っているのですが、 式を入力したセルが『#N/A』となってしまい困っています。 <Sheet1>                A   B   C   D          1 コード  氏名  項目1 項目2 2 0001 佐藤太郎 3 0002 佐藤次郎      4     ・ 5     ・ <Sheet2>   A    B   C   D 1 氏名  項目1 項目2 2 佐藤次郎 2 10 3 加藤花子  4 15   4 佐藤太郎  1 8 5 <Sheet2>に元のデータが入っています。<Sheet1>の"C2"以降に式をいれ、 氏名で検索してデータを参照できるようにしたいです。 それで式を =IF(A2="","",(VLOOKUP(B2,Sheet2!$A$1:$K$126,2,FALSE))) と入れたのですがエラーになってしまいました。 できればどちらのシートも並べかえずに使いたいと思っています。 どなたか解決策をご存知でしたら教えて下さい。よろしくお願い致します。

  • Excelで表1からある文字列を検索し、HITした同一行にある数値を計算し、表2に反映させたい

    はじめまして。Excelの関数を利用して、 以下のような仕組みを作りたいと思います。 毎日の作業を表にまとめた(表1)から、 作業を抜き出して、作業毎の時間と件数の累計をまとめた(表2) を作成したいと思います。 表1から作業と作業毎の時間と件数を抽出し、 計算して出力するような式を書きたいのですが、 うまい方法が思いつく方がいらっしゃいましたら、 ご教授いただければと思います。 ※表1と表2はシートを分けたいです。 何卒よろしくお願いします。 (表1)  日付  作業  担当者 作業時間 作業件数 --------------------------------------------- 1月10日  A   太郎    7    500 1月10日  B   花子    8    300 1月11日  A   太郎    7    500 1月11日  C   花子    8    400 1月12日  B   太郎    4    600 1月12日  C   太郎    4    300 1月12日  C   花子    8    500 --------------------------------------------- (表2) 作業 作業時間 作業件数 -------------------------  A    14    1000  B    12     900  C    20    1200 -------------------------

  • エクセル:複数行のセル値を、対応した項目に従って一つのセルにまとめたい

    いつもお世話になっています。 早速ですが、下記のようなことをしたいのですが、 関数でできるでしょうか?  │ A     │ B ----------------------- 1│日本太郎 │ ばら ----------------------- 2│日本太郎 │ さば ----------------------- 3│山田花子 │ キリン ----------------------- 4│山田花子 │ 米 ----------------------- 5│日本太郎 │ イス ----------------------- 6│山田花子 │ インク ----------------------- ↓  │  A   │ B -----------------------  │       │ ばら 1 │日本太郎│ さば  │       │ イス -----------------------  │       │ キリン 2 │山田花子│ 米  │       │ インク ----------------------- A列に人物名、B列に品物を入力します。 誰かが何かを入手した際、その順に入力していきますので、 同一の人物が複数の行に亘って入力された表(上の表)があります。 これを基に「誰が何を持っているか」をまとめる表(下の表)を作りたいのですが、 上の表を基に下の表が自動的に出来上がるような関数はあるでしょうか? VLOOKUPを使っても上手く出来ず、しかし他に思い浮かびません。 何か良い知恵がございましたら、お教え下さい。

  • 【エクセル】リストの照合について教えてください!!

    sheet1に、下記の様に600件の氏名が書いてあります。 A      B 1     山田太郎  2     鈴木花子 ・・・ 600   佐藤次郎 sheet2に、地域と氏名がずらっと書いてあります。 A      B      C     D    E 東京都   神奈川県   埼玉県   千葉県  茨城県 山田太郎 鈴木太郎 山田花子 佐藤次郎 ・・・ このsheet2の地域を、sheet1のC列に下記の様に入れたいのですが、 どの様に行ったら良いでしょうか? みなさんのお知恵をください!!宜しくお願い致します。 A      B      C 1     山田太郎   東京都 2     鈴木花子   神奈川県 ・・・ 600   佐藤次郎   埼玉県

  • [エクセル]複数条件を抽出する関数

    エクセル初心者級です。 (関数はある程度理解できますが、マクロはできません) 今、休暇管理のエクセルシートを作っていて 下のような表を作成しています。     A      B      C     D     E     F… 1 [氏名]    [合計]   [4/1]  [4/2]  [4/3]  [4/4] 2 山田太郎  1.5日        半休        全休 3 田中花子  0.5日        半休 4 鈴木美穂  1.0日              全休 このデータを基に別シートのカレンダに落とし込みたいのです。     A     B     C     D     E     F     G 1 2011年4月 2  日曜   月曜   火曜   水曜   木曜   金曜   土曜 3                                 1 2 4                                   山田・田中 5   3     4     5     6     7     8 9 6 鈴木    山田 A1セルに年月を入れたら自動で日付が入るようカレンダは作成しました。 後は、基シート(上の表)でその該当日に 全休なり半休なりの言葉を入れている人を抽出し カレンダの日付の下に名前を入れられるようにしたいのです。 (1)カレンダと表の日付が一致していて (2)その日付の表の所に何かしらの文字が入っている人 を自動で抽出したできるようにしたいのですが 何か良い方法はないでしょうか。 このシートはパソコンを使い慣れていない人も使用するため できれば関数で一発でできるようなものがあれば有りがたいのですが… アドバイスをいただけないでしょうか。 よろしくお願いいたします。

専門家に質問してみよう