• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル 複数列を検索し左3列目を返す)

エクセルで複数列を検索し左3列目を返す方法

このQ&Aのポイント
  • エクセルのシート内の複数列から、指定した条件に合致するセルを検索し、その左隣の3列目のセルを返す関数を作成したいです。
  • 検索結果を別のシートに表示し、検索条件をA列に入力し、結果をB列に表示したいです。
  • 複数の検索対象シートに対応することも考慮しています。該当するセルがない場合は空欄としたいです。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

>日付 それならそうと最初から情報提供を。 数値を参照してきたいなら =IFERROR(INDEX(Sheet1!B:B,MATCH(A1,Sheet1!E:E,0)),0) +IFERROR(INDEX(Sheet1!G:G,MATCH(A1,Sheet1!J:J,0)),0) + …以下同文 セルの書式はもちろん日付等適切に。

ichioi
質問者

補足

回答ありがとうございました。説明不足で申し訳ありません。 上手く作成することができました。ありがとうございました。

その他の回答 (3)

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

難しい関数を使うことで計算に負担がかかります。 簡単な式で対応するには作業列を作って対応します。 シート1の2行目から下方にデータがあるとしてZ2セルには次の式を入力して下方にドラッグコピーします。 =IF(COUNTA(E2,J2,O2,Y2)=0,"",E2&"/"&J2&"/"&O2&"/"&T2&"/"&Y2) 結果はシート2に表示させるとしてA2セルから下方に検索の文字を入力するとすればB2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",INDEX(Sheet1!A:Y,MATCH("*"&A2&"*",Sheet1!Z:Z,0),MATCH(A2,INDEX(Sheet1!A:A,MATCH("*"&A2&"*",Sheet1!Z:Z,0)):INDEX(Sheet1!Y:Y,MATCH("*"&A2&"*",Sheet1!Z:Z,0)),0)-3)) シート3にシート1と同じような表があるとしたらシート3のZ2セルにはシート1と同じ式を入力して下方にドラッグコピーします。 まとめのシート2ではB2セルには次の式を入力して下方にドラッグコピーすればよいでしょう。 =IF(A2="","",IFERROR(INDEX(Sheet1!A:Y,MATCH("*"&A2&"*",Sheet1!Z:Z,0),MATCH(A2,INDEX(Sheet1!A:A,MATCH("*"&A2&"*",Sheet1!Z:Z,0)):INDEX(Sheet1!Y:Y,MATCH("*"&A2&"*",Sheet1!Z:Z,0)),0)-3),"")&IFERROR(INDEX(Sheet3!A:Y,MATCH("*"&A2&"*",Sheet3!Z:Z,0),MATCH(A2,INDEX(Sheet3!A:A,MATCH("*"&A2&"*",Sheet3!Z:Z,0)):INDEX(Sheet3!Y:Y,MATCH("*"&A2&"*",Sheet3!Z:Z,0)),0)-3),""))

ichioi
質問者

お礼

回答ありがとうございました。 長文の関数に驚きましたが,よく考えると,納得しました。

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

B1=INDEX(Sheet1!$A:$J,SUMPRODUCT((Sheet1!$A$1:$Z$10=A1)*ROW($A$1:$A$10)),SUMPRODUCT((Sheet1!A1:Z10=A1)*COLUMN($A$1:$Z$1))-3) ★下にコピー

ichioi
質問者

補足

回答ありがとうございます。 早速使ってみました。1行目は上手くいったのですが,コピーした2行目以降が「♯N/A」となりました。 関数中のSheet1!A1:Z10をSheet!$A$1:$Z$10に修正したのですが,よろしいでしょうか? また,同様の質問ですが,参照先が日付の場合に,おそらくシリアル値と思われる数値になります。 書式設定でも日付表示になりませんでした。どのように対処したら良いのか,ご教授お願いいたします。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

ご利用のエクセルのバージョンが不明ですが、仮にExcel2007以降を使っているなら =IFERROR(INDEX(Sheet1!B:B,MATCH(A1,Sheet1!E:E,0)),"") &IFERROR(INDEX(Sheet1!G:G,MATCH(A1,Sheet1!J:J,0)),"") & …以下同文 Excel2003以前を使っているなら =IF(COUNTIF(Sheet1!E:E,A1),INDEX(Sheet1!B:B,MATCH(A1,Sheet1!E:E,0)),"") =IF(COUNTIF(Sheet1!J:J,A1),INDEX(Sheet1!G:G,MATCH(A1,Sheet1!J:J,0)),"") & …以下同文 などのように、順序良く探していけば出来ます。 #参考 状況によりますが =INDIRECT("Sheet1!"&TEXT(SUMPRODUCT((Sheet1!$A$1:$Y$10=A1)*ROW(Sheet1!$A$1:$Y$10)*100+(Sheet1!$A$1:$Y$10=A1)*(COLUMN(Sheet1!$A$1:$Y$10)-3)),"!R0!C00"),FALSE) などのようにしても計算できるかもしれません。 >複数のシート 最初に回答した数式のバリエーションで出来ます。

ichioi
質問者

補足

回答ありがとうございます。 エクセル2007を使用しています。 1番目の関数を実行したところ,思った通りの結果が返されました。 ただ,参照先のセルが日付の場合,おそらくシリアル値と思われる数字が返ります。 セルの書式を日付にしても変更されませんでした。 どのように対処したらよいでしょうか? ご教授よろしくお願いいたします。