Jayは、特定のテキスト値が発生するセルを特定する必要があります。

彼は、Excelの検索と置換機能を使用して、テキスト値を含むセルのアドレスを手動で判別できることを知っていますが、セルのアドレスを判別するための数式を探しています。彼は、範囲内のテキストを検索して、テキストが見つかったセルのアドレスをExcelに返す方法があるかどうか疑問に思います。

あなたが試すことができる2つのことがあります。まず、セルの内容に完全に一致するものを探している場合は、数式を使用できます。基本的な式は次のとおりです。

=ADDRESS(MATCH(C2,A:A,0),1)

この例では、セルC2に探している値が含まれ、列Aが検索されているセルの範囲です。この数式は、C2の大文字と列Aの値に関係なく、結果を返します。

したがって、C2に「apple」が含まれている場合、数式は「apple」、「Apple」、または「APPLE」を含むセルに正に一致します。確かに、大文字の組み合わせはすべて一致します。

この数式は、他のテキストの中で検索しているものを含むセルのアドレスを返しません。したがって、「apple」(セルC2)を検索している場合、「applecrisp」というフレーズを含むセルのアドレスは返されません。検索セルにワイルドカード文字を追加することで、この動作を少し変更できます。たとえば、「apple」を検索すると、他の文字の前後にある場合でも、数式は「apple」を含むセルのアドレスを返します。

この数式は、基準を満たす範囲の最初のセルのアドレスのみを返すことに注意してください。基準を満たすすべてのセルのアドレスが実際に必要な場合は、マクロに依存する必要があります。以下は良い例です:

Function FindMe(x As Range, y As String) As String     Dim r As Range     Dim sResults As String     Dim sSearch As String

Application.Volatile     sSearch = LCase(y)

For Each r In x         If InStr(1, LCase(CStr(r.Value)), sSearch) > 0 Then             sResults = sResults & r.Address & ", "

End If     Next r     If Len(sResults) > 2 Then         FindMe = Left(sResults, Len(sResults) - 2)

Else         FindMe = ""

End If End Function

この関数を使用するには、検索する範囲と検索する対象を指定するだけです。

=FindMe(A:A, "apple")

広い範囲を使用する場合(この例のように、列Aのすべて)、関数が結果を返すのにかなりの時間がかかっても驚かないでください。セル内に何かがあるかどうかに関係なく、範囲内のすべてのセルを検索する必要があるため、これは理にかなっています。

また、この関数ではワイルドカードを使用する必要はありません。探しているものがセル内のどこかにある場合、一致が発生することを前提としています。また、探しているものの大文字化や検索範囲内の何かの大文字化にも注意を払いません。

注:

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

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

このヒント(10082)は、Microsoft Excel 97、2000、2002、および2003に適用されます。

Excel(Excel 2007以降)のリボンインターフェイスに関するこのヒントのバージョンは、次の場所にあります: