Thorは、特定の列または行を指定せずにルックアップを実行し、その結果を値が見つかったセルのアドレスにする方法があるかどうか疑問に思います。たとえば、値(345や「mytext」など)を検索し、ブック内のすべてのワークシートのすべてのセルを検索して、値が見つかったセルの完全なアドレスを返す関数を作成したいとします。

使用するアプローチは、検索する範囲によって決まります。

回答を表示したいのと同じワークシートで検索する場合は、次のような式を使用できます。

=ADDRESS(MAX(ROW(1:5)(A1:E5="my text")), MAX(COLUMN(A1:E1)(A1:E5="my text")),4)

これは配列数式として入力する必要があり(Ctrl + Shift + Enterを押す)、A1:E5の範囲でのみ検索されます。必要に応じて、数式を適切に調整して範囲を変更できます。

より大きな検索領域は、ワークシート全体を表示することです。これは、次のような配列数式を使用して実行できます。

=ADDRESS(MAX(ROW(Sheet1!1:65000)(IF(Sheet1!1:65000=$A$1,1,0))), MAX(COLUMN(Sheet1!$1:$65000)IF(Sheet1!1:65000=$A$1,1,0)))

この数式は、探しているものがセルA1に格納されていることを前提としています。

Sheet1の指定を、検索するワークシートの名前に変更する必要があります。

ブック内のすべてのワークシートなど、より広い範囲を検索する場合、最善の解決策は、Excel内の検索機能を呼び出すマクロを使用することです。

Function FindAddr(vValue As Variant)

Dim wks As Worksheet     Dim rCell As Range     Dim bFound As Boolean

bFound = False     For Each wks In ActiveWorkbook.Worksheets         With wks             Set rCell = .Cells.Find _               (What:=vValue, After:=.Cells(1), _               LookIn:=xlValues, LookAt:=xlWhole, _               SearchOrder:=xlByRows, _               SearchDirection:=xlNext, _               MatchCase:=False)

If Not rCell Is Nothing Then                 bFound = True                 Exit For             End If         End With     Next     If bFound Then         FindAddr = wks.Name & "!" & _           rCell.Address(False, False)

Else         FindAddr = "Not Found"

End If     Set wks = Nothing     Set rCell = Nothing End Function

この関数は、別のマクロから呼び出されるように設計されており、vValueパラメーターで検索する必要があるものは何でも渡します。この関数は、最初に一致した完全なアドレス(ワークシート名を含む)を返すか、一致しなかった場合は「見つかりません」を返します。

注:

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

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

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