Thor想知道是否有一种方法可以执行查找而不必指定特定的列或行并将结果作为找到该值的单元格的地址。例如,他想查找一个值(例如345或“我的文本”),并让该函数搜索工作簿中所有工作表中的所有单元格,并返回在其中找到该值的单元格的完整地址。

您使用的方法将取决于您要搜索的范围。

如果要在要显示答案的同一工作表上进行搜索,则可以使用以下公式:

=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中调用Find函数的宏。

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_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3807)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: