• ベストアンサー

Excel関数 複数シートをまたがって検索する方法

タイトルの通りなのですが 例えばSheet1とSheet2とSheet3のA列の どこかにある、検索値を Sheet4で検索する方法って ありますか? VLOOKUPで =IF(ISERROR(VLOOKUP(Sheet4!A1,Sheet1!A:A,1,FALSE)),VLOOKUP・・・と、 エラーの場合は、他のSheetを検索という方法なら わかったのですが・・・

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

  • ベストアンサー
noname#29107
noname#29107
回答No.2

#1です。 >この数式の訳(?)を教えていただけませんか? まず、この回答の場合、Sheet1からSheet3のA列には重複する値が入っていないことを前提にしています。重複する場合CHOOSE関数で実現するともうすこし複雑になります。 今回の回答の場合で構造を説明します。 =CHOOSE([どのシートに検索値があるかの値、1ならどのシートにもない、2ならSheet1・・],"見つかりません",Sheet1対象のVLOOKUP,,Sheet2対象のVLOOKUP,Sheet3対象のVLOOKUP) のようになっています。 COUNTIF(Sheet1!A:A,A2)+COUNTIF(Sheet2!A:A,A2)*2+ COUNTIF(Sheet3!A:A,A2)*3+1 がどのシートに検索値があるかを返す部分です。「*2」や「*3」することでどのシートに値があるかを特定しています。「+1}しているのは、どのシートでも値がなかった場合、0になりますが、CHOOSE関数はエラーになってしまいますので「+1}しています。また、VLOOKUP関数をカンマで続けられるのは、CHOOSE関数の引数になっているからです。 今回の回答、少々趣味に走りすぎた面があります。普通なら、IF関数の入れ子で処理します。 =IF(COUNTIF(Sheet1!A:A,A2)>0,VLOOKUP(A2,Sheet1!A:A,1,FALSE), IF(COUNTIF(Sheet2!A:A,A2)>0,VLOOKUP(A2,Sheet2!A:A,1,FALSE), IF(COUNTIF(Sheet3!A:A,A2)>0,VLOOKUP(A2,Sheet3!A:A,1,FALSE),"見つかりません"))) の方がよいでしょう。値が重複しても問題ないですし。

kurulin
質問者

お礼

COUNTIFやCHOOSEも、奥が深いですね~ すごく勉強になりました どうもありがとうございます!またよろしくお願いします 。

その他の回答 (1)

noname#29107
noname#29107
回答No.1

あんまり奇麗な解決方法ではないですが... sheet4のA2セルの値を検索する場合: =CHOOSE(COUNTIF(Sheet1!A:A,A2)+COUNTIF(Sheet2!A:A,A2)*2+ COUNTIF(Sheet3!A:A,A2)*3+1,"見つかりません", VLOOKUP(A2,Sheet1!A:A,1,FALSE), VLOOKUP(A2,Sheet2!A:A,1,FALSE),VLOOKUP(A2,Sheet3!A:A,1,FALSE)) こんな感じでどうでしょうか。

kurulin
質問者

お礼

ありがとうございます(^-^) エラーでやるよりもきれいです! ちなみに、CHOOSEや、COUNTIFや、VLOOKUPは それぞれ単品では使うんですが、 混ぜて使用する時の「*2」とか「*3」には どのような意味があるのでしょうか? また、どうしてVLOOKUPを「、」でつなげられるのですか? よろしければ、この数式の訳(?)を教えていただけませんか?お願いします。

関連するQ&A

  • 関数の中のシート名【複数】を置換を使って置換るには

    タイトルの件、質問します。 下記1の関数があります。 この中にあるシート名を下記2のとおり、置換を使って 書き換えたいと考えています。 実践しましたが、うまくできませんでした。 方法は、手入力以外であれば、置換機能ではなくてもOKです。 ご存知の方、いらっしゃいましたら、宜しくお願いします。 【下記2】 Sheet1 を 1000 に書き変えたい Sheet2 を 2000 に書き変えたい Sheet3 を 3000 に書き変えたい ※1000、2000、3000とは、シートの名前です。 【下記1】 =IF(ISERROR(VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet1!A:C,2,FALSE)),"",VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet1!A:C,2,FALSE)) &IF(ISERROR(VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet2!A:C,2,FALSE)),"",VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet2!A:C,2,FALSE)) &IF(ISERROR(VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet3!A:C,2,FALSE)),"",VLOOKUP(SUBSTITUTE(B$1,"-",""),[名簿ブックa.xls]Sheet3!A:C,2,FALSE)) ※本関数は、教えてgoo回答者様に、ご教授いただきました。

  • Excel2007 検索値の桁数を減らして検索

    例えば「F310」という検索値を、検索先の表から探したいのですが、そこでは「F31」や「F」といった短縮された文字で登録されています。 フル(4桁)で探し、無ければ3桁、それでも無ければ2桁、1桁...と、1桁ずつ減らしながら検索させる方法を教えて下さい。 また、検索先が常に検索値の左端から始まるとは限らないので、ワイルドカードを使おうと思っています。 1回だけ桁を削って検索だけなら、次のような式が作れたのですが、 =IF(ISERROR (VLOOKUP("*"&LEFT(A1,3)&"*",sheet!$A$1:$C$100,3,FALSE)), "なし", VLOOKUP("*"&LEFT(A1,3)&"*",sheet!$A$1:$C$100,3,FALSE))) これを4桁→3桁→2桁→1桁 と繰り返させることが出来ません。。 ご教示お願いします。

  • Excel2007 VLOOKUP関数の相談

    もし検索不足で重複した質問でしたら申し訳ありません。 VLOOKUP関数について、シート「A」に文字列を入力したら シート「リスト」シート上に同じ文字列があれば その文字列関係の情報を持ってくるというVLOOKUP関数を使用していました。 <使っていた関数> =IF(ISERROR(VLOOKUP(H306,リスト!A:B,2,0)),"",VLOOKUP(H306,リスト!A:B,2,0)) この入力する文字列が数字(別データからコピーして貼り付ける)に変わっただけなのですが、 何故か対象情報の抽出をしてくれません。 <使おうとしている関数> =IF(ISERROR(VLOOKUP(I2,データ0501!A2:F695,3,0)),"",VLOOKUP(I2,データ0501!A2:F695,3,0)) ネットで検索したのですが、関数情報が不足しているのか、 コピーした数字列の貼り付け方が間違っているのかわからない状況です。 恐れ入りますが解決策があればお教えいただければと思います。 どうぞ宜しくお願い申し上げます。

  • エクセルのVLOOKUPの複数参照について

    エクセルのVLOOKUPの複数参照について シート2(kokunai)に A列 B列 1000 シャープ 1010 ソニー 3050 パナソニック とあります。 シート3(yunyuu)に A列 B列 2000 IBM 2001 HP とあります。 シート1のC列に打ち込んだ数字を元にD列にメーカー名を表示したいのです。 D列に IF(C1="","",IF(ISERROR(VLOOKUP(C1,kokunai,1,0))="FALSE",VLOOKUP(C1,kokunai,2,0),VLOOKUP(C1,yunyuu,2,0))) と数式を打ちましたが、エラーが帰って来ます。 どうすれば良いでしょうか?

  • EXCEL複数シートでの商品データを振り分けしたい

    【目的】エクセル関数を使用して、複数シートを対象に商品名によってデータを振り分けしたいです。 複数シートに検索対象を広げる事が出来ずにとても困っています。お力を貸してください。 過去に商品データの振り分け質問がありましたので、そちらを参考に作成させていただきました。 http://okwave.jp/qa/q7843035.html 上記URLの質問では一つのシートに対し、商品データの振り分けをされる形でしたが、 これを複数シートを対象に商品データの振り分けがしたいのです。 IFを複数使用し、複数シートを指定してもエラーでうまく動きません。 =IF($A3="","",VLOOKUP($A3,Sheet1!$A:$D,MATCH(B$2,Sheet1!$A$1:$D$1,0),FALSE)) &IF($A3="","",VLOOKUP($A3,Sheet2!$A:$D,MATCH(B$2,Sheet2!$A$1:$D$1,0),FALSE)) 何かよい方法はありませんでしょうか? 何卒よろしくお願い致します。m(_ _)m

  • 2つのSheetの数値を検索したい

    エクセルで2つのSheetのデータの個数を検索させたいのですが、 エラー値は空白にしたいので、 =IF(ISNA(VLOOKUP(B2,Sheet2!$A$2:$B$2607,2,FALSE)),"",VLOOKUP(B2,Sheet2!$A$2:$B$2607,2,FALSE)) という式を作ってうまくいったのですが、 この式に新たに同じsheet1の範囲(A2:B300)を追加したいのですが、 うまくいきません。 このB300はB400、B500というように日々増えていきます。 どのような式にすればいいでしょうか。

  • 関数について教えて下さい。

    =IF(ISERROR(VLOOKUP($A3,母日!$C$6:Y$40,23,FALSE)),"",VLOOKUP($A3,母日!$C$6:Y$40,23,FALSE)) の関数『6』『40』という数字を横にドラッグしただけでプラス44づづ増える関数式を教えてください。例えば、 =IF(ISERROR(VLOOKUP($A3,母日!$C$50:Y$84,23,FALSE)),"",VLOOKUP($A3,母日!$C$50:Y$84,23,FALSE)) =IF(ISERROR(VLOOKUP($A3,母日!$C$94:Y$128,23,FALSE)),"",VLOOKUP($A3,母日!$C$94:Y$128,23,FALSE))という具合です。 すみませんがお忙しいところスミマセン。宜しくお願い致します。

  • VLOOKUPのエラーについて

    教えて下さい。 =IF(ISERROR(VLOOKUP($B3,Sheet2!$A$2:$D$35,4,FALSE)),"",VLOOKUP($B3,Sheet2!$A$2:$D$35,4,FALSE))+IF(ISERROR(VLOOKUP($B3,Sheet3!$A$2:$C$50,3,FALSE)),"",VLOOKUP($B3,Sheet3!$A$2:$C$50,3,FALSE)) という数式を使っています。 最初のIF文(Shee2)については有効なのですが、それならと、欲張って他のシートも参照できるように、+の後にIF文(Sheet3)を追加したら#VALUE!が表示されます。 何がいけないのでしょうか?

  • OpenOffice 【Calc】 複数シート VLOOKUPについて

    シート1、データ1、データ2、データ3 の4シートがあります。 データ1のシートには、    品名   価格  売価 1 雑炊の素   800   500 2 焼飯の素   700   350 3  柿の種    280    200 データ2のシートには、    品名   価格  売価 101 うどん   380   350 102 そば    380   350 103 そうめん  350   320 のようにして、シート3は201~始るようにデータが入っています。 それぞれのシートの検索範囲にLIST1、LIST2、LIST3 と名前を付けて、シート1のB20セルに =IF(ISERROR(VLOOKUP($B20;LIST;2));"";VLOOKUP($B20;LIST;2))&IF(ISERROR(VLOOKUP($B20;LIST2;2));"";VLOOKUP($B20;LIST2;2))&IF(ISERROR(VLOOKUP($B20;LIST3;2));"";VLOOKUP($B20;LIST3;2)) と関数をいれてみたところ、動作は正しくできているのですが、 価格などの数値をVLOOKUPしてくると、文字列の扱いになる様子で、 1,000 とはならず、1000 で表示されてしまいます。 書式設定で数値、カンマ区切りを選択してみても変わらず。 使う関数が悪いのか、その他に問題があるのか判らず、悩んでいます。 適正な関数または、設定が判る方、教えてください。

  • vlookupとIndirectを使って別シートを検索

    C3に検索値が入力されます。 H3には =IF($C3="","",VLOOKUP($C3,INDIRECT("06!$H$2:$K$10000"),2,FALSE)) と入力した所、#N/Aとなってしまいました。 06はシート名です。H列~K列までにデータが入力されており、 現在のシートのC3に検索値を入力すると、06のから値をかえすようにしたいと考えています。 お力を貸してください。お願いします。 分りにくい場合は言ってください。

専門家に質問してみよう