関数を使用した値の検索(Microsoft Excel)
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トレーニングのソースです。
このヒント(11524)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。
Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります:
link関数を使用した値の検索。