Excel 2013 で、文字列が列 A の文字列と一致する行の列 B の値を検索したいと思います。複雑なのは、列 A の文字列が、検索する値文字列よりも短くなる可能性がある点です。例:
Column A Column B
ABCD- Result1
EF Result2
BCD Result3
ここで、返される文字列の例を示します。
"Result1": "ABCD-", "ABCD-EFG", "ABCD-H"
"Result2": "EF", "EFG", "EFGHIIJKL"
"Result3": "BCD", "BCDXY"
「ABCD」は結果を返しません。
検索する文字列がセル C1 にあると仮定します。
マクロに頼らなければならないのでしょうか、それともそのための公式があるのでしょうか?
上院: 実際には別のシートの列にある検索文字列がいくつかあり、先頭にワイルドカードはありません。探している値は、検索文字列がある列の隣の列に配置されている可能性があります。
UPD2: Sheet1 の列 A と列 B の内容と、Sheet2 の内容が以下のとおりであると仮定します。
SoughtString ResultFound
ABCD- Result1
EF Result2
BCD Result3
BCDXY Result3
EFG Result2
ABCD-EFG Result1
EFGHIIJKL Result2
ABCD-H Result1
ABCD No match
セル B2 の受け入れられた回答からわずかに変更された配列数式をコピーします。
=IFERROR(INDEX(Sheet1!B$2:B$4;MATCH(1;COUNTIF(A2;Sheet1!A$2:A$4&"*")*(Sheet1!A$2:A$4<>"");0));"No match")
答え1
2行目から10行目にデータがあると仮定すると、この「配列数式」を使用できます。
=IFERROR(INDEX(B$2:B$10,MATCH(1,COUNTIF(C1,A$2:A$10&"*")*(A$2:A$10<>""),0)),"No match")
確認済みCTRL+ SHIFT+ENTER
答え2
C1 がどのような役割を果たしているかは明らかではありません。検索文字列がすでに列に存在する場合は、それを Sheet2 の列 A として表示できます。文字列が別の場所にある場合は、他のリストの関連セルを参照するだけで列 A を作成できます。たとえば、リストが列 Z にあり、行 2 から始まる場合、A2 は になり=Z2
、その数式を列 A にコピーして、必要な数よりも多くのセルを事前に入力できます (これらのセルは必要になるまで空白のままになります)。
探している文字列リストが一度に 1 つの新しいエントリで作成される場合は、新しいエントリをいずれかのリストの次の位置 (列 Z または列 A) に配置するだけで済みます。新しいエントリを C1 に入れる必要があり、新しいエントリごとに前のエントリが置き換えられる場合は、C1 エントリからリストを作成するためのマクロまたは VBA プログラムが必要になります。
これらの方法のいずれかによって、検索された文字列が列 A のリストにある時点から始めて、これが列 B に入るものになります。Result1 が B2 にあると仮定します。B2 の数式は次のようになります。
=IF(ISERROR(FIND(Sheet1!A2,A2)),"NO MATCH",IF(FIND(Sheet1!A2,A2)=1,A2,"NO MATCH"))
必要な数だけ列 B に数式をコピーします。列 B には任意の数のエントリを事前に入力できます。列 A の関連セルに結果を生成する値が入力されるまで、これらのエントリは空白のままになります。