[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VLOOKUPで文字ワイルドカードで検索 複数結果抽出できる?』(やきなす)
会社名で得意先コードを抽出したい。
会社名には支店名があり、支店を入れずにワイルドカードで検索し
複数の結果を求めたいが可能でしょうか?
データは100件強で少な目ですが半角・全角があります。
< 使用 Excel:unknown、使用 OS:Windows7 >
全角・半角問わず前方一致で検索し、複数の結果を求めたいということか?
あとEXCELのバージョンは? (ねむねむ) 2022/12/21(水) 09:28:14
(通りすがり) 2022/12/21(水) 09:51:28
>あとEXCELのバージョンは?
バージョンexcel2016とあります。
>全角・半角問わず前方一致で検索し、複数の結果を求めたいということか?
VLOOKUPでは文字が完全に一致しないと検索できません。
「XX株式会社○○支店」(複数データ)をと入力されているセルを「XX会社」のみで複数結果をだしたい。
できますでしょうか?
(やきなす) 2022/12/21(水) 09:57:37
>検索値の前後に「*」を入れて「"*"&A1&"*"」とかではどう?
検索できますが複数抽出できません。
=IFERROR(VLOOKUP("*"&A3&"*",D5:E132,2,FALSE),E132)
と入力してみました。
お願いします。
(やきなす) 2022/12/21(水) 10:05:02
全角半角あるということはXX会社で
XX株式会社○○支店 XX会社△△支店 XX株式会社□□支店 XX会社▲▲支店 これすべてを求めたいということだろうか?
あと XX会社で検索する場合に XX合同会社 があった場合、これも求めるのだろうか? (ねむねむ) 2022/12/21(水) 10:11:13
フィルタオプションとユーザー定義関数を組み合わせてはどうですか? 下記の手順で試してみて下さい。
【ユーザー定義関数の設定】 ・標準モジュールに、以下のプロシージャをコピーしてください。 Function findtest(target As String, pattern As String) As Boolean If InStr(1, target, pattern, vbTextCompare) > 0 Then findtest = True Else findtest = False End If End Function
【シートレイアウト】 A列 B列 C列 D列 1 組織名 条件 XX 組織名 2 XX株式会社○○支店 *1 D2以下に抽出結果が表示されます。 3 XX会社△△支店 4 XX株式会社□□支店 5 XX会社▲▲支店
・A1とD1は見出しで、同一のものをセットしてください(重要) ・C1セルに 検索する文字列を入力します。 ・B1セルは 空白セルにするか、 もしくは上記のように「条件」といった他の見出しと重ならないものをセットしてください。 ・B2セルには、 =findtest(A2,$C$1)
【フィルタオプションの設定】 ・指定した範囲内 を選択します。 ・リスト範囲 A1:A5 ・検索条件範囲 C1:C2 ・抽出範囲 D1 ・なお、重複を省くなら、「重複するレコードは無視する」にチェックする (γ) 2022/12/21(水) 10:46:34
何回も実行するので、フィルタオプションの設定をその都度するのが面倒ということなら、 以下のマクロをボタンに登録して、それをクリックすればよいと思います。
Sub test() Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row Range("A1:A" & lastRow).AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Range("B1:B2"), _ CopyToRange:=Range("D1"), _ Unique:=False End Sub
# 暴走したかもしれない。 (γ) 2022/12/21(水) 11:02:48
>XX合同会社
株式会社しかありません。
A列 B列 C列
▽▽会社 XX支店 会社コード
・
・
・
◇◇会社 〇〇支店 会社コード
社名だけを入力し、複数ある支店もコードも表示させたいです
アルファベットの会社(全角・半角)も抽出したい
できますか?
(やきなす) 2022/12/21(水) 11:12:31
ありがとうございます
私には高度過ぎて、申し訳ございません。
(やきなす) 2022/12/21(水) 11:14:26
放置するのも大人げないので、コメントしておきましょう。 (1) VLOOKUP関数は単一のものしか返すことはできません。 条件にあうものをすべて返す処理は「フィルタ処理」と呼ばれ、 ・オートフィルタ ・フィルタオプション(詳細設定によるフィルタ) を使うことが一般的です。
(なお、Excel365であればFilter関数を利用することができます。 Excel2016であれば、上記の二つをまずは検討するのが普通でしょう。 数式で対応できるのかもしれませんが。)
(2) オートフィルタやフィルタオプションでは、 ・大文字と小文字は同一視されます(仕様)が、 ・全角と半角は同一視されません。 従って、全角も半角も取得しようとすると、 それぞれを条件に指定する必要があります。 (もっと言えば、対象に全角と半角が混在している例外的ケース(ABC会社などと)があるとすると、 条件設定が困難になります(理屈の上では))
(3) そこでフィルタオプションで細工することになりますが、 そもそもフィルタオプションについては、例えば下記が参考になるでしょう。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm
フィルタオプションでは、直接、条件を指定することが普通ですが、 数式を使って条件を指定することもできます。 上記の記事の「条件設定に数式を使う方法」の箇所を参考にしてください。
私の回答では、その数式にユーザー定義関数を使っています。 InStr(1, target, pattern, vbTextCompare) > 0 とテキストモードで比較することで、大文字、小文字、全角、半角を同一視できます。 (アルファベット、数字、カタカナなど)
(4) A列 B列 C列 ▽▽会社 XX支店 会社コード と複数列に分かれているのであれば、私が書いたものを少し修正すれば、 同様にフィルタオプションで対応可能でしょう。
(5)■■重要■■ 上記が難しいとすると、手軽なのは次のような対応策です。
・作業列D列を使って、すべて半角に直します。(D1: =ASC(A1) とすれば良い) A列 B列 C列 D列 ABC会社 XX支店 会社コード ABC会社
・オートフィルタを掛けてD列をキー項目として絞り込めばよいでしょう。 半角で条件を指定します (テキストフィルターで、「指定の値を含む」を利用) ・そうすれば条件に合ったものだけが、表示されますから、必要なところにそれをコピーペイストするだけです。 ・もちろん、(数式を使わない普通の)フィルタオプションでも可能で、 抽出データの書き込み先を自由に指定できます。
(余談) | 社名だけを入力し、複数ある支店もコードも表示させたいです | アルファベットの会社(全角・半角)も抽出したい これは、エービーシー会社と指定して、ABC会社を抽出したいということなんですかね。(違いますよね) まずできることから始めてください。 (γ) 2022/12/22(木) 11:33:31
ご丁寧な説明をいただきありがとうございました。
他のサイトも色々見て2つ以上の関数を使って検索することがBestだと
>これは、エービーシー会社と指定して、ABC会社を抽出したいということなんですかね。
違います。
会社のPCでやっているので開かないページもあったりで苦戦しておりますが
なんとかやってみます
ありがとうございました!
(やきなす) 2022/12/22(木) 12:53:10
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.