2

各セルに長い単語の文字列が含まれるデータの列(Aと呼びます)が1つあります。

COLUMN A 
HORNBACH BAUMARKT ETOY, ETOY 
ALIGRO, CHAVANNES-PR 
DIPL. ING. FUST AG,ETO, ETOY 
AGIP SUISSE SA 224, LAUSANNE 
AMAZON MEDIA EU, LUXEMBOURG 
MIGROS M EPALINGES, EPALINGES 
HORNBACH BAUMARKT ETOY, ETOY 
MANOR AG - 390, BASEL 
MANOR AG - 390, BASEL 
GLOBUS LAUSANNE, LAUSANNE

また、別の列に別のキーワードのリストがあります(Bと呼びます)。

COLUMN B 
MSFT 
Amazon 
Hornbach 
Jumbo 
OBI 
Lipo 
Ikea 
Coop 
Migros 
Casino

これは私がやりたいことです:

列 B の各キーワード K について 列 A の各セルをチェックして、エントリが部分文字列として存在するかどうかを確認します 存在する場合は、列 C の隣接するセルにキーワード K を入力します 存在しない場合は、列の隣接するセルをそのままにしますC そのまま 次のキーワード K を繰り返す

結果は次のようになります。

COLUMN A ----------------------------------> COLUMN C 
HORNBACH BAUMARKT ETOY, ETOY --------------> Hornbach 
ALIGRO, CHAVANNES-PR 
DIPL. ING. FUST AG,ETO, ETOY 
AGIP SUISSE SA 224, LAUSANNE 
AMAZON MEDIA EU, LUXEMBOURG ---------------> Amazon 
MIGROS M EPALINGES, EPALINGES -------------> Migros 
HORNBACH BAUMARKT ETOY, ETOY --------------> Hornbach 
MANOR AG - 390, BASEL 
MANOR AG - 390, BASEL 
GLOBUS LAUSANNE, LAUSANNE

VBA 型構造を使用してこれを行う方法はわかりますが、組み込みの Excel 関数 (INDEX、HLOOKUP、SEARCH... など) を使用してこれを行う方法が必ずあるはずです。

試しましたが成功しませんでした。誰かがより良いアイデアを持っている場合は、私に知らせてください。

4

1 に答える 1

5

行ごとに一致する単語が最大で 1 つだけであると仮定すると、この式を C1 で使用できます。

=IFERROR(LOOKUP(2^15,SEARCH(B$1:B$10,A1),B$1:B$10),"")

IFERROR 関数は Excel 2007 以降のバージョンでのみ使用できます。それ以前の Excel バージョンでは、この変更を試してください。

=LOOKUP("zzz",IF({1,0},"",LOOKUP(2^15,SEARCH(B$1:B$10,A1),B$1:B$10)))

別々のセルで複数の一致を取得したい場合は、C1でこの「配列式」を使用し、必要なだけ確認しCTRL+SHIFT+ENTERて上下にコピーできます(可能な最大の一致に応じて)

=IFERROR(INDEX($B$1:$B$10,SMALL(IF(COUNTIF($A1,"*"&$B$1:$B$10&"*"),ROW($B$1:$B$10)-ROW($B$1)+1),COLUMNS($C1:C1))),"")

A1 にリストの 3 つの単語が含まれている場合、それらは C1、D1、E1 に入力され、F1 などは空白のままになります。

コメントに従って改訂:

式の最初の範囲 (INDEX の最初の引数) は、結果が取得される範囲を定義するため、それを列 Z に変更するには、その部分を変更するだけです。

=IFERROR(INDEX($Z$1:$Z$10,SMALL(IF(COUNTIF($A1,"*"&$B$1:$B$10&"*"),ROW($B$1:$B$10)-ROW($B$1)+1),COLUMNS($C1:C1))),"")

于 2012-09-12T21:27:34.360 に答える