• 締切済み

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

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

みんなの回答

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.5

◆こんな方法もありますよ ◆Sheet1のB1の式 B1=INDEX(Sheet2!$B$1:$B$10,MATCH(A1,INDEX(SUBSTITUTE(JIS(Sheet2!$A$1:$A$10)," ",),),0)) ★下にコピー ★ただし、同姓同名があった場合は、Sheet2の上の行のデータを表示します

mikamika12
質問者

お礼

回答ありがとうございました。 お礼がこのように遅れて済みませんでした。 一度お礼を書いたつもりだったのですが、うまくアップ できていなかったようで、すみません。 助かりました。

  • ionatsu
  • ベストアンサー率33% (1/3)
回答No.4

申し訳ないです、入力する数式のsheet1をsheet2でお願いします。 タイトルを読んで判断するに、部分一致で参照する方法をお探しかと思い、このやり方をお勧めしましたが、このやり方だと、例えばシート2の4行目に 山田  三郎  0120-123-987 というのがあるとしても、 シート1の4行目には山田太郎さんの電話番号が表示されてしまいます。(部分一致で、一番最初にあったものを返してしまう為です。) 完全一致の方法に関しては、下にやり方がすでにアップされているようなので控えておきます。

mikamika12
質問者

お礼

回答ありがとうございました。 お礼がこのように遅れて済みませんでした。 一度お礼を書いたつもりだったのですが、うまくアップ できていなかったようで、すみません。 助かりました。

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

Sheet1のC1セルの式は以下の通りです。 Sheet2の名字、氏名の前後の空白が半角か、全角かがはっきりしませんので、一応両方Nullに置き換えるようにしました。 Sheet2のデータ範囲は実際のシートに合わせて修正して下さい =INDEX(Sheet2!C:C,MAX(INDEX(($A1=SUBSTITUTE(SUBSTITUTE(Sheet2!$A$1:$A$3&Sheet2!$B$1:$B$3," ","")," ",""))*ROW(Sheet1!$A$1:$A$3),))) ただしSheet2で同じ姓+名が二回以上出現する場合は、下の行の番号を取得しますのでご承知おきください。

mikamika12
質問者

お礼

回答ありがとうございました。 お礼がこのように遅れて済みませんでした。 一度お礼を書いたつもりだったのですが、うまくアップ できていなかったようで、すみません。 助かりました。

  • ionatsu
  • ベストアンサー率33% (1/3)
回答No.2

お答えします。 シート1のセルB1に対して、 =VLOOKUP(A2,Sheet1!$A:$C,3,TRUE) と入力されるとよいかと思われます。 VLOOKUP関数において、4つめの引数TRUEを入れると、完全一致ではなく、部分一致で検索してくれます。 回答だけなら以上です。以下、詳細は補足にて・・・

mikamika12
質問者

お礼

回答ありがとうございました。 お礼がこのように遅れて済みませんでした。 一度お礼を書いたつもりだったのですが、うまくアップ できていなかったようで、すみません。 助かりました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

次の数式は如何でしょうか。 表サイズはA1:C10としていますので調整して下さい。 シート1のC1に=INDEX(Sheet2!C:C,SUMPRODUCT(CONCATENATE(Sheet2!$A$1:$A$10,Sheet2!$B$1:$B$10)=A1)*ROW(Sheet2!$A$1:$A$10))として下方向にコピー

mikamika12
質問者

お礼

回答ありがとうございました。 お礼がこのように遅れて済みませんでした。 一度お礼を書いたつもりだったのですが、うまくアップ できていなかったようで、すみません。 助かりました。

関連するQ&A