• ベストアンサー

Excel関数で検索

シート1に、会社名((株)○○または○○(株)の表記)と住所が登録されています。 シート2に、会社名(○○の表記)が入力されています。 シート2に入力された会社名から、シート1の住所をシート2のB列に抽出したいのです。 普通ならVLOOKUPを使用すれば、簡単に出来ると思うのですが‥ (株)表記があるために、どうすれば良いのか分からなくなってしまいました。 さらに、一致するものが無かった場合に、エラーを表示せず、空欄にしたいと思います。 IF関数を使ってみましたが、エラーが出てしまいました‥ 説明がうまく出来なくて申し訳ありませんが、ご指導お願いします。

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

  • ベストアンサー
回答No.1

こんにちは 方法としては、 1.シート1の会社名の(株)を取り除く 2.シート2の会社名に(株)をきちんとつける のどちらかだと思います。 ちなみにA(株)、(株)Aとでは別の会社になるので正確に行う ためにはきちんと(株)をつけて検索すべきかと思います。 (本来なら取引先コードなどを検索キーにするのがよいのですが・・) ↓前株と後株の参考↓ http://oshiete1.goo.ne.jp/qa788142.html 1の方法であれば、メニューの編集から置き換えを使って 検索する文字列に、(株) 置換える文字列に、"" 半角と全角を区別するのチェックをはずす(カッコがあるため) "すべて置換"を押す で(株)を取り除く 関数では =SUBSTITUTE(B1,"(株)","") とすれば、B1のA(株)はAになります。 VLOOKUPは、VLOOKUP(検索値,範囲,列番号,検索の型) ですが、検索値が該当しなかった場合は#N/Aを返してきます。 この#N/Aを調べるのがISNA(テストの対象)という関数です。 この関数はテストの対象が#N/Aだった場合にTRUE(真)を返してきます。 従って =IF(ISNA(VLOOKUP(A1,Sheet1!$A$1:$C$10,2,0))=TRUE,"該当なし",VLOOKUP(A1,Sheet1!$A$1:$C$10,2,0)) などと書いてやれば、空白にすることも、"該当なし"と表示させること もできます。 ちなみに IF文の中の"=TRUE"は省略可能です。 IF文は、 =IF(条件,TRUE(真)の時の処理,FALSE(偽)の時の処理) ですから、ISNAがTRUEを返せば、必然的にTRUE(真)の時の処理を実行します。 このほかにISERRORという関数でも同様に処理できます。 メニューのところにある、fxみたいなボタンを押すと関数の貼り付けが できますので、その中から情報→ISERRORやISNAを選択して説明を見てください。 何かありましたら補足してください。 ご参考まで

siro-siro
質問者

お礼

回答、ありがとうございます。 おっしゃるとおり、正式名称での登録が大前提だと思います。 最終的にシート2の会社名を正式名称での登録にしたいのですが、すでに登録してある会社は住所が入力されればすべてを調べ直す手間がないと考えました。 その上で、A1の表記を変更しようかと‥ いったん(株)表記を取ってシートにコピーし、そこから引っ張る形がベストかも知れませんね。。 一度にやってしまおうと考えたのが、ダメだったのかも‥ 参考になりました。ありがとうございます。

その他の回答 (3)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#2です。 >Sheet1のA列は作業列との事ですが、現在A列に会社名が入力されているので、列を挿入すると言う事でしょうか? 仰る通りです。 どうしても元の体裁を変えたく無いときは、作業列は例えばSheet3に置く事もできます。 この場合、Sheet1のA列から元データが始まっているとして、 Sheet2のB1=IF(ISERROR(SMALL(Sheet3!$A:$A,ROW(A1))),"",INDEX(Sheet1!$A:$Z,SMALL(Sheet3!$A:$A,ROW(A1)),COLUMN(A1))) 以降、下方、右方に複写 作業列:Sheet3のA1=IF(ISERROR(SEARCH(Sheet2!$A$1,Sheet1!A1,1)),"",ROW()) 以降、下方に複写 となります。 作業列の関数を入れた行が、Sheet1の行数より少ないと、当然検索漏れになりますので、ご注意下さい。

siro-siro
質問者

お礼

ありがとうございました。 試してみましたが、今回はうまく出来ませんでした‥ でも、私の発想には無い方法だったので、とても参考になりました。 次回、使えそうなので、覚えておいて試してみたいと思います。

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

VLOOKUP関数はワイルドカードが使用出来ますので、次の方法をお試し下さい。 数式内のセル範囲等は仮の値の為、調整して下さい。 =IF(COUNTIF(sheet1!A:A,"*"&A1&"*"),VLOOKUP("*"&A1&"*",sheet1!A:B,2,FALSE),"")

siro-siro
質問者

お礼

回答ありがとうございます。 ワイルドカードはすでに試してみたのですが、ダメでした。 と言うのも、abc(株)という会社をワイルドカードで検索すると、(株)abcdという会社もヒットしてしまうのです‥ 他に方法が無いか、もう少し考えてみます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

意図されているのとは違う、お節介な回答です。不要ならスルーしてください。 Sheet1 A列は作業列です。 ................A...............B...............C ..1................1.......(株)A........住所1 ..2...............2...(有)A.......住所2 ..3........................(株)B.......住所3 ..4........................C(株).......住所4 ..5...............5.......A(株).......住所5 ..6...............6.....AA(株).......住所6 A1の式=IF(ISERROR(SEARCH(Sheet2!$A$1,B1,1)),"",ROW()) 以下下方にコピー Sheet2 A1セルに検索する会社名(部分一致)を入れます .................A...............B...............C ..1...............A.......(株)A........住所1 ..2....................(有)A.......住所2 ..3........................A(株).......住所5 ..4......................AA(株).......住所6 B1の式=IF(ISERROR(SMALL(Sheet1!$A:$A,ROW(A1))),"",INDEX(Sheet1!$B:$Z,SMALL(Sheet1!$A:$A,ROW(A1)),COLUMN(A1))) 以下下方、右方にコピー

siro-siro
質問者

補足

回答ありがとうございます。 参考になりそうなんですが、ちょっと分からない部分がありますので、教えてください。 Sheet1のA列は作業列との事ですが、現在A列に会社名が入力されているので、列を挿入すると言う事でしょうか? 1.2._._.5.6.というA列が良く理解できません‥ 教えていただければ嬉しいです。

関連するQ&A

  • 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)) ネットで検索したのですが、関数情報が不足しているのか、 コピーした数字列の貼り付け方が間違っているのかわからない状況です。 恐れ入りますが解決策があればお教えいただければと思います。 どうぞ宜しくお願い申し上げます。

  • 【Excel】一致するデータの検索

    Excel2003を使用しています。 Sheet1のB列の値がSheet2のA列に入力されている値と一致したら、Sheet1のC列とD列の値をSheet2のC列とD列に表示させたく、VLOOKUP関数を使用したところ、Sheet1のB列とSheet2のA列のデータの並び方(順序)が同じではないためか、VLOOKUP関数ではできませんでした。 こういう場合、マクロで処理することは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? Sheet1のデータは4行目から、Sheet2のデータは6行目から入力されています。 よろしくお願いします。

  • エクセルの関数の設定の仕方を教えてください。

    エクセルで電話対応履歴を作ろうとしています。 顧客リストがすでに存在しているので、それを利用して、データを抽出したいと思っています。 同一BooK内に、シートA(電話対応履歴用のシート)と、シートB(顧客リストのシート)を入れました。 電話対応履歴の項目の基本情報部分を顧客リストから抽出して入力したいと思っています。 シートAにシートBにある項目の一部を表示できるセルを設定しています。 シートAの名称部分に対応相手の名前を入力し、入力した文字列をシートBの顧客名の列から検索して、一致するものがあれば、その文字列と一致した行にある別の項目を表示して、一致しない場合は、新しくデータ入力できるように、空欄にしておくという形にすればいいと思っています。 IF、LOOKUPなどの関数を利用したらいいことまではわかっているのですが、どうやってつなげれば、正しく表示されるのかがわかりません。ネット上の説明を見たりしているのですが、エラーになってしまい、顧客リストにある情報を入力しても、エラーのままです。 並べ方が悪いのだとは思うのですが、どのように複数の関数をつなげて使えばいいかがわかりません。 できれば、例でかまわないので、並べ方を教えてください。 参考できる並べ方がわかれば、応用できると思うのでよろしくお願いします。 基本的に自己流でいろいろいじって覚えるぐらいの知識しかありませんが、何とか自分で作成して電話対応を自分でうまく処理したいと思っています。 どうかよろしくお願いします。

  • 【Excel】VLOOKUP関数について

    Excel2003を使用しています。 B列にコードNo.、D列に会社名が入力されている表(1)があります。 表(1)とは別のシートで、B列にコードNo.を入力すると、D列に会社名が表示されるように、VLOOKUP関数で検索範囲を表(1)としてD列に数式を入力しています。 これを逆に、D列に会社名を入力したら、B列にコードNo.が表示されるようにしたいのですが、B列に数式を入力する際、表(1)はこのまま利用できるのでしょうか?

  • Excel関数を教えてください。

    Excel関数を教えてください。 =IF(AA6="123市",VLOOKUP(AA6,参照シート!$Z$2:$AA$8,2,FALSE),VLOOKUP(AA6,参照シート!$T$2:$U$36,2,FALSE)) ↑このような関数を立てました。 市町村番号(自社のもの)を検索したいと思っています。 『もし、123市なら参照シートの表(2)Z2-AA8の番号を、それ以外の市町村なら参照シートの表(1)T2-U36の番号を返せ』と。 “それ以外の市町村”の表示はうまくいきました。 問題は、123市は大きな市で、その中でまた001~006まで支部として分かれています。 住所の「123市◎◎4-5-6」とあるように、◎◎で支部分けされています。 住所はAB6に入力されています。 これを支部番号まで表示できるような関数が作れませんか?

  • Excel関数について

    Excel関数を教えてください。 =IF(AA6="123市",VLOOKUP(AA6,参照シート!$Z$2:$AA$8,2,FALSE),VLOOKUP(AA6,参照シート!$T$2:$U$36,2,FALSE)) ↑このような関数を立てました。 市町村番号(自社のもの)を検索したいと思っています。 『もし、123市なら参照シートの表(2)Z2-AA8の番号を、それ以外の市町村なら参照シートの表(1)T2-U36の番号を返せ』と。 “それ以外の市町村”の表示はうまくいきました。 問題は、123市は大きな市で、その中でまた001~006まで支部として分かれています。 住所の「123市◎◎4-5-6」とあるように、◎◎で支部分けされています。 住所はAB6に入力されています。 これを支部番号まで表示できるような関数が作れませんか?

  • ExcelのVLOOKUP関数について教えて下さい

    AのシートにA列に番号、B列に会社名を入力、しB以降のシートは月毎別に作成し、番号を入力して会社名を引っ張ってくると言う形のVLOOLUP関数を作りました。 番号はバラバラに入力するので、1の後に50があったりその後に10があったりします。 今までそれで上手く会社名が引っ張ってこれたのですが、先日24行目に5という数字を入れたら、 「#N/A」のエラーが出ました。 エラー内容は「無効な値のエラー」と出ていますが、Aのシートには5のデータは入力されており、20以降の数字を入れると会社名が正しく表示されます。 関数が間違っているのかと思い、別シートと比べましたが同じでした。 ちなみに関数は次の通りです。Aのシートのデータは2行目から番号1→147行目に番号146のデータが入っています。 =IF(A24="","",VLOOKUP(A24,店名!B22:C167,2,FALSE)) 何がおかしいのか全く分からず、途方に暮れております。 アドバイスをお願いします。

  • Excel2003 IF関数

    シート1のA列に値を入力して行き、終了したら同じようにシート2のA列に値を入力して行きます。 この時、シート1に入力した値とシート2に入力した値は同じでなければなりません。 シート2は再チェック用なので、シート1と値が異なる入力をした場合、 値を入力するセル(A列)の隣のセル(B列)に、 IF関数、真の場合『OK』・偽の場合『入力エラー』と反映されるようにしております。 =IF(B1=seat!B1,"OK","入力エラー") 『OK』の場合は表示させる必要は無いので、条件書式を使用し、 フォント色を白くして、表示させないようにしております。 ただ、シート1を入力してからシート2に入力を始めるため、 シート2のB列には既にに『入力エラー』の表示がでてしまっています。 ※値を入力しないセルもあるのでその場合は『OK』が表示されますが、 条件書式によりフォント色を白くしておりますので、表示されません。 シート2には何も入力をしていないので、『入力エラー』と表示されるのは当然なのですが、 シート2に値を入力してから、シート1,2で異なる値の場合だけ『入力エラー』と表示されるのが理想です。 IF関数はこのような場合適していないのでしょうか? 何か良い方法がございましたらご教示頂けますと幸いです。 宜しくお願い致します。

  • エクセル2003 関数 IFとVlookupの組み合わせについて

    エクセル2003 関数 IFとVlookupの組み合わせについて IF関数とvlookuo関数を組み合わせて関数を組もうとしています。 vlookupしたい元データが18万あるのでシートを(1)~(3)に分けています。 やりたいことは、 シート「(1)1~60,000」     A列:ID B列:社名 シート「(2)60,001~120,000」 A列:ID B列:社名 シート「(3)120,001~180,000」 A列:ID B列:社名 シート「集計」 このシートに関数の結果を表示したいです シート「集計」のH9のセルにIDを入れたらI9のセルに社名が自動表示される。且つH9のセルが空欄ならI9のセルも空欄になる。※入るIDはシート(1)~(3)のどこかにあります 関数教えて下さい。よろしくお願いします。

  • 関数について

    関数について VLOOKUP関数を使ってみようと思っているのですが1列目のデータの抽出に仕方がわかりません。 入力例 sheet1 B列__C列__D列 1_______A____現金 2_______B____現金 3_______C____カード 4_______D____カード 5_______E____現金 抽出例 sheet2 B列__C列__D列 1_______A____現金 2_______B____現金 5_______E____現金 抽出例のC、D列はVLOOKUPを使おうと思っています。 B列の抽出にはどのようにしたらいいかおしえてください。

専門家に質問してみよう