ロビンは、大文字と小文字を区別するVLOOKUPを実行する方法があるかどうか尋ねました。

彼女のルックアップテーブル/範囲には、文字の場合のみが異なる点で類似したエントリ(AbCとaBC)があります。一意の値が重要であるため、値を変更することはできません(すべて大文字または小文字にする)。

VLOOKUP関数には、情報のケースをチェックする方法がありません。大文字と小文字は区別されません。ただし、この欠点を回避する方法はいくつかあります。 1つの方法は、CODE関数を使用して、VLOOKUPで検索できる中間列を作成することです。元のデータが列Bにあるとすると、セルA1に次の数式を入力して、列にコピーすることができます。

=CODE(LEFT(B1,1))&"."&CODE(MID(B1,2,1))&"."&CODE(RIGHT(B1,1))

この数式は、セルB1にあるものの最初の3文字を調べ、それらの文字をピリオドで区切られた10進文字コードに変換します。したがって、A1に「ABC」が含まれている場合、B1には「65.66.67」が含まれます。

検索する値がセルC1にあるとすると、VLOOKUP数式として次を使用できます。

=VLOOKUP(CODE(LEFT(C1,1))&"."&CODE(MID(C1,2,1))&"."& CODE(MID(C1,3,1)), A:B,2,)

もう1つのアプローチは、EXACT関数を使用して、探しているものの場所を特定することです。このアプローチでは、VLOOKUPをまったく使用せず、代わりにINDEX関数に依存します。この数式では、比較するセルが列Aにあり、返すセルが列Bの対応するセルであると想定しています。

=IF(MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))=0,NA(), INDEX($B$1:$B$100,MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))))

この数式は、配列数式として入力する必要があります(Shift + Ctrl + Enter)。式の最初の部分(EXACTの最初のインスタンス)は、C1(探しているもの)をA1:A100の範囲の各値と比較します。これは配列数式であるため、この場合、完全に一致するかどうかに応じて、100個のTrue / False値になります。一致する場合、最初のROW関数は一致の行を返し、INDEX関数を使用してその行の列Bから値を取得します。

場合によっては、ルックアップを実行する独自のユーザー定義関数を作成することもできます。以下はそのようなマクロの例です:

Function CaseVLook(compare_value, table_array As Range, _   Optional col_index As Integer = 1)

Dim c As Range     Dim rngColumn1 As Range

Application.Volatile

Set rngColumn1 = table_array.Columns(1)

CaseVLook = "Not Found"



'Loop first column     For Each c In rngColumn1.Cells         If c.Value = compare_value Then             CaseVLook = c.Offset(0, col_index - 1).Value             Exit For         End If     Next c End Function

マクロを使用するには、検索する値(セルC1など)、最初の列を検索する範囲(A:Bなど)、およびオプションでその範囲内の列のオフセットを使用して関数を呼び出すだけです。ここ:

=CaseVLook(C1,A:B,2)

いくつかの追加のアプローチは、次のナレッジベースの記事にあります。

http://support.microsoft.com/kb/214264

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(6833)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。