INDEX関数で住所の途中から抽出する方法

このQ&Aのポイント
  • アスタリスクを使用しindex関数で抽出したいです
  • シート参照元にAddressが内容ののデータがあります。シート参照先に参照元のAddressのデータの住所が"千代田区"のデータだけを絶対参照などを応用し、抜き出し・展開したいです。
  • =IFERROR(INDEX(参照元!B:B,SMALL(IF(MID(参照元!$B:$B,FIND(参照元!$B:$B,$A$1),LEN($A$1))=$A$1,ROW(B:B),""),ROW(B1))),"")で抜き出そうとしましたが、何も表示されません。https://okwave.jp/qa/q9362227.html 質問No.9362227で県名を抜き出す方法を教えていただいていますが、今回は住所の途中の名称で抜き出したいです。
回答を見る
  • ベストアンサー

INDEX関数で住所の途中から抽出する方法

アスタリスクを使用しindex関数で抽出したいです 宜しくお願い致します。 相談内容: シート参照元にAddressが内容ののデータがあります。 シート参照先に参照元のAddressのデータの住所が"千代田区"のデータだけを絶対参照などを応用し、抜き出し・展開したいです。 その他状況: =IFERROR(INDEX(参照元!B:B,SMALL(IF(MID(参照元!$B:$B,FIND(参照元!$B:$B,$A$1),LEN($A$1))=$A$1,ROW(B:B),""),ROW(B1))),"") で抜き出そうとしましたが、何も表示されません。 https://okwave.jp/qa/q9362227.html 質問No.9362227 で県名を抜き出す方法を教えていただいていますが、今回は住所の途中の名称で抜き出したいです。 宜しくお願い致します。

  • inoru
  • お礼率77% (21/27)

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>アスタリスクを使用しindex関数で抽出したいです 参照元のB列に参照先の$A$1が含まれている行を配列で取得したいと言うことでしょうか? 提示の数式では質問の要素である「アスタリスクを使用」になっていません。 また、前回の質問でベストアンサーの回答の数式を変形したことによる見込み違いかと思われます。 他人が組み立てた数式を知識が無いのに改変すると今の状況になります。 他人が組んだ数式は論理を完全に読み取れないときは参考にする程度にして新たに自分の知識範囲で組み立てることをお薦めします。 >シート参照先に参照元のAddressのデータの住所が"千代田区"のデータだけを絶対参照などを応用し、抜き出し・展開したいです。 「千代田区」はどのセルに入力されていますか? 文字列の比較でワイルドカード(*や?)を使える手法以外に含まれるか否かを調べる方法があります。 その方法がFIND関数を使うのですが提示の数式では目的の値を得られません。 参照元のB列からMID関数で文字列を任意に切り出そうとしているFIND関数が全行でエラーを起こしています。 FIND(参照元!$B:$B,$A$1) → すべてが検出できずに#VALUEとなる。 従って、次のように修正すると目的に合うでしょう。 IF(MID(参照元!$B:$B,FIND(参照元!$B:$B,$A$1),LEN($A$1))=$A$1,ROW(B:B),"")           ↓ IF(FIND($A$1,参照元!$B:$B&A1)<LEN(参照元!$B:$B),ROW(B:B),"") 尚、セル範囲を無駄に大きくすると再計算に大きな負担が掛かり動作が鈍くなります。(B:Bや$B:$Bの部分は行番号を付加して有効範囲にすべきです)

inoru
質問者

お礼

>参照元のB列に参照先の$A$1が含まれている行を配列で取得したいと言うことでしょうか? はいそうです。 >提示の数式では質問の要素である「アスタリスクを使用」になっていません。 ご指摘のとおりです。聞く立場ですので、まとめて質問すべきでした。 >「千代田区」はどのセルに入力されていますか? B列の各行です。 >従って、次のように修正すると目的に合うでしょう。 >IF(MID(参照元!$B:$B,FIND(参照元!$B:$B,$A$1),LEN($A$1))=$A$1,ROW(B:B),"") >          ↓ >IF(FIND($A$1,参照元!$B:$B&A1)<LEN(参照元!$B:$B),ROW(B:B),"") できました! ちょっと邪道えはありますが、Index関数の検索範囲を各列毎に手入力して、 希望通りに再現することが出来ました。 ありがとうございます!!

その他の回答 (4)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

回答No.3の追加です。 ヒントだけでは解決しないようですから参照先!B2に設定する数式を提示します。 =IFERROR(INDEX(参照元!B$1:B$10,LARGE(INDEX((FIND($A$1,参照元!$B$1:$B$10&$A$1)<LEN(参照元!$B$1:$B$10))*ROW(参照元!B$1:B$10),0),COUNTIF(参照元!$B$1:$B$10,"*"&$A$1&"*")+1-ROWS(B$2:B2))),"") この数式は配列を扱っていますが、内側のINDEX関数を使うことで数式の確定にはEnterキーのみの打鍵で問題ありません。 但し、参照元の行数を10にしてありますので実際の行数に合わせて変更してください。 参照先!A1セルの文字列が参照元!B1:B10に含まれる行番号を配列で返し、返された行番号が0でないものを小さい順に使って参照元の目的の列から値を抽出しています。 従って、参照先!A1が「東京都」でも「千代田区」でも抽出可能です。 参照先!B2セルの数式を右と下へ必要数コピーしてください。

inoru
質問者

お礼

bunjiiさん 締め切り後に画像まで付けて御指導ありがとうございます。 28列、600行にして応用しても再現することができました。 毎週仕事で使いますので、大変助かります。 ありがとうございます。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.4

初心者の多くが抽出を数式でやりたがるのは 手持ちの知識の延 長線上に答えがないと不安だからでしょうか…… 数式でも無理すればできますけど そもそも無理する必要がない ように思います。 配列計算の仕組みもろくに理解していないな ら猶更です。 数式でやりたいならせめて今ある数式を正確に理 解することくらいはすべきかと思います。 フィルタでもいいですが データベースクエリを覚えた方がいい と思います。パラメータを使えば 数式と使用感は変わりません。

inoru
質問者

お礼

データ→データの取得→クエリエディターの起動→新しいソース→Excelファイルで取り込むと、フィルタリングに似たような機能が・・・ こんなのあるんですね パラメーターの管理のところの設定の仕方はよくわからないのですが これってもしかして、一回一回そうさしなくても自動でデータを取り込んでくれる機能でしょうか 超便利そうです ありがとうございます!!

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.2

ちょっと斜め読みしただけだが、 書かれた式中の部分「FIND(参照元!$B:$B,$A$1)」 ソレ、順序がアベコベとチャイますか?此れ以上は勘弁! ヘルプ曰く「FIND(find_text, within_text)」

inoru
質問者

お礼

ご指摘のとおり、FIND関数は最初に検索文字を入力し、次の引数に対象範囲を指定になっていました。 ありがとうございます。

  • dynam
  • ベストアンサー率16% (1/6)
回答No.1

参照元シートの住所カラムのデータを先頭から最終レコードまで検索して千代田区を含むものだけを参照先シートに転記するということならば、関数ではなくてexcel vbaで行わないと難しいと思いますが…

inoru
質問者

補足

関数の限界でここでVBAになるでしょうか。 他の方もアドバイスいただいておりますので、そちらも検証して決めたいと思います。 ありがとうございます。

関連するQ&A

  • アスタリスクを使用しindex関数で抽出したいです

    宜しくお願い致します。 相談内容: シート参照元にAddressが内容ののデータがあります。 シート参照先に参照元のAddressのデータの住所が東京都のデータだけを絶対参照などを応用し、抜き出し・展開したいです。 その他状況: ・index関数で抜き出そうとしましたが、失敗しています。 ・東京都のデータを抜き出したいのでワイルドカードのアスタリスクを使用しました。  どうやら関数にはアスタリスクが使用できる関数とそうでない関数があるらしく、Match関数は使用できるようですが、上手くいきません。 ・参照先シートのB2に”=IFERROR(index(参照元!$A$1:$E$6,match("*"&A1&"*",参照元!A1:E6,0)))”と入力しました。 しかし、”この関数に対して少なすぎる引数が入力されています”とエラーが表示されてしまいます。 宜しくお願い致します。

  • 検索文字に該当し除外字に該当しない情報を抽出したい

    検索文字に該当し除外字に該当しない情報を抽出したい  ■やりたいこと Excelの別シートに並んでいる顧客データから、検索文字に該当し、かつ、除外文字に該当しない住所を別シートに抽出したいです。 ---------------------------------------------------------------------------------------------------------  ■条件 シート参照元:B列に住所,C列に郵便番号,D列に名前,E列にメアドが並んでいます。 シート参照先:A1に検索文字 A3に除外文字が入力されています。 検索文字に該当し、除外文字に該当しない住所のみを参照元と同じ列の並びに表示させたいです ---------------------------------------------------------------------------------------------------------  ■除外文字がない場合においての数式 参照先シートのB2セルに =IFERROR(INDEX(参照元!B$1:B$10,LARGE(INDEX((FIND($A$1,参照元!$B$1:$B$10&$A$1)<LEN(参照元!$B$1:$B$10))*ROW(参照元!B$1:B$10),0),COUNTIF(参照元!$B$1:$B$10,"*"&$A$1&"*")+1-ROWS(B$2:B2))),"") と入力 過去の質問"INDEX関数で住所の途中から抽出する方法"こちらの回答No.5を応用させていただいています ---------------------------------------------------------------------------------------------------------  ■判らないところ 除外文字がない場合においての数式を応用してやろうとしましたが、うまくいきません。 (1)内側のIndex関数の"範囲"の部分(おそらく"*ROW(参照元!B$1:B$10)"の前の()内の「比較演算を行うところ」の設定)がわかりません。 (2)LARGE関数の"順位"部分の設定(おそらく"-ROWS(B$2:B2)"の前の「検索文字があり、且つ、除外文字がない行の数をカウントする」の設定)がわかりません。        (1)は私なりに色々試してみましたが、失敗しました。(2)は私の力不足でどうしたらよいか全く浮かびませんでした ---------------------------------------------------------------------------------------------------------  ■過去の質問 INDEX関数で住所の途中から抽出する方法 https://okwave.jp/qa/q9362447.html アスタリスクを使用しindex関数で抽出したいです https://okwave.jp/qa/q9362227.html”  よろしくおねがいします

  • ExcelのINDEX関数がうまく参照出来なくなってしまいました

    Excel2000を使用しています。 引き継いだファイルの関数がうまく表示できなくて困っています。 元に戻したいのですが、どのようにしたらもとにもどせるでしょうか? sheet1で、sheet2の住所録を参照して、該当番号に合う住所が表示されています。 Sheet1の数式が入る場所は「=INDEX(住所,A1)」となっています。 A1には、1~300の数字が入っており、その数字を参照して該当住所が表示されるようになっています。 しかし、なぜか280番台以降の住所が、#REF!でうまく参照出来なくなってしまいました。 仕方ないので、関数の挿入でINDEX関数を挿入して、 =INDEX('sheet2'!I1:I300,A1) と入力したら、1~300までの住所はうまく表示出来るようになったのですが、 もとの数式の通りに「参照している部分を”住所”」と表示したいのですが、どのようにしたらいいのでしょうか? 他のINDEX関数を使っているセルは、=INDEX(電話番号,A1)のようになっています。 分かりにくい説明ですみません。よろしくお願いします。

  • INDEX関数SMALL関数を使って空白行を詰める

    シート1にINDEX関数SMALL関数を使って空白行を詰める表を作成したのですが詰めた表をシート2に表示することはできないのでしょうか。  =IF(COUNTIF($A4:$A4,0)=0,MAX(D$3:$D3)+1,"")  =IFERROR(INDEX(A:A,MATCH(ROW()-3,$D:$D, )),"")この表をシート2に表示する方法

  • エクセル 関数式の応用

    こんにちは エクセル2010を使っています。 画像の様なデータがあって、次のような式を教えてもらいました。 =IFERROR(INDEX($B$1:$B$7,SMALL(IF($A$1:$A$7=C$1,ROW($A$1:$A$7)),ROW(A1))),"") 画像では A列 B列の データが7行目までなのですが、これを3万行まで広げようと次のような式に変更してみましたが上手く行きません。(空白が返される) =IFERROR(INDEX($B$1:$B$30000,SMALL(IF($A$1:$A$30000=C$1,ROW($A$1:$A$30000)),ROW(A1))),"") 詳しい方、教えていただけませんか? よろしくお願いします。

  • INDEXとSUMPRODUCT関数が分かりません

    INDEXとSUMPRODUCT関数で以下の作業を行おうと思っています。 Sheet2に以下の関数を入れたのですが、どこかがおかしいです。 よろしければ、間違いを教えてください。 Sheet2のB2に入れている関数は =INDEX(Sheet1!$A$2:$A$4,SUMPRODUCT((Sheet1!$B$2:$D$4=A2 )*ROW(Sheet1!$B$2:$D$4))) です。

  • INDEX関数を使用した関数の意味を教えてください。

    INDEX(sheet2!C:C,SMALL(INDEX((sheet2!$B$1:$B$100<>$B$18)*10^4+ROW($1:$100),),ROW(A1)))&"" sheet2にある表のB列に検索時に使用する文字列があり、sheet1のB18にその検索したい文字列を入力すると、一致したB列と同じ行のC列のデータを抽出する式です。 表のデータは今後も増加しますが、どの程度増加するは不明です。 INDEX関数やSMALL関数など一つ一つの関数の意味はわかっているつもりですが、なぜ上記のセルが選択されているのかわかりません。 特にSMALLの後の式がわかりません。 エクセル関数にはあまり詳しくないので、この式の意味をできれば詳しく教えていただけないでしょうか? (式の意味は人から聞いたものですが、違っていたらすいません)

  • INDEX関数で複数のセル値を結合するには??

    会社で、INDEX関数を使って請求書を作成しています。 今は、取引先の住所と社名を各々別のセルにINDEX関数を使って引っ張ってきています。請求書シートのA1に住所が入り、A2に社名が入るという感じです。ところが、住所と社名を一つのセルにつなげてA1に入力しなければならなくなりました。 参照元の取引先一覧は別シートで、取引先の住所はA列、社名はB列に入っていて、こちらを変更することはできません。 自分で調べてはみたのですが、解決策がみつからず、困っていますぅ。誰かお知恵をお貸し下さい~。。

  • Excelの関数を使ってデータを抽出する方法教えてください!!

    1のシートには、AとBの全てのデータがあります。2のシートには、1部だけのデータがあります。 データは、「コード」、「店名」、「住所」などが入力されています。 Aのシートから、Bのシートのデータを省いて抽出したいのですが、どうしたらいいでしょうか?? なお、それぞれに入っている「住所」や「店名」、「コード」などのデータは完全一致していないものもあります。 また、Aのシートの「コード」などの各データは、全て同じ列に入っていません。 これでは、無理でしょうか??

  • エクセル抽出関数の使い方、教えてください!!

    大変恐れ入ります。過去の他の方の質問を一部引用しております。 <引用:2009/11/05 QNo.5425095> ---引用--- excel関数を用いてある行の範囲内の数値のみを違う行に抽出し、同じ列に対応する値も引っ張ってくることは可能ですか?     A   B   C   D 1   33   180 2   58   300 3   89   310 4   152   240 5   205   74 -------------------------------------------------- Q1. 上記にあるA1の”33”を、A1以外のセルにセットするとC,Dに正規のデータが抽出されない。    この際、    ・ =IF(AND(A1>=60,A1<=180),ROW(A1),"")    ・ =IF(OR(ROW(A1)>COUNT($C:$C),COLUMN(A1)>2),"",INDEX($A:$B,SMALL($C:$C,ROW     (A1)),COLUMN(A1)))    の抽出範囲も設定をしてみましたが、全く結果が得られません。必ずA1にデータがないとだ    めなのでしょうか。    もし可能であれば、その応用として下記の内容を検討しており、非常に苦戦しております。    是非教えていただければと思いますので、よろしくお願いします。 Q2. 上記サンプルの様なシートが2つ存在し、それを一枚のシートにまとめ、2つのデータベース     からそれぞれに対し異なる抽出条件を提示し、その結果一覧をそれぞれ表示したいと検討     しております。    大変申し訳ないのですが、少々急いでおります。是非よろしくお願いいたします。

専門家に質問してみよう