我有一张4x4的桌子。表中的所有值都是唯一的。
A B C D
1 a b c d
2 e f g h
3 i j k l
4 m n o p
如何找到特定值的address
?我尝试=CELL("address",MATCH(A1,A1:D4,0))
来找到a
,但是它返回一个错误值,因为=MATCH(A1,A1:D4,0)
是一个错误值。
似乎=match
仅适用于单个行/列。
有什么解决办法吗?
答案 0 :(得分:3)
您可以将以下内容与不同的值一起使用
=CELL("ADDRESS",INDEX(A1:D4,SMALL(IF(NOT(ISERROR(SEARCH("a",A1:D4))),ROW(1:4),99^99),1),SMALL(IF(NOT(ISERROR(SEARCH("a",A1:D4))),COLUMN(A:D),99^99),1)))
使用 Ctrl + Shift + Enter
输入作为数组公式数据:
您可以将要查找的内容移到一个单独的单元格中,而不是将硬代码移到公式中,然后将整个内容包装在IFERROR中,以防例如找不到
在G1中搜索值,在F1中搜索公式。
=IFERROR(CELL("ADDRESS",INDEX(A1:D4,SMALL(IF(NOT(ISERROR(SEARCH(G1,A1:D4))),ROW(1:4),99^99),1),SMALL(IF(NOT(ISERROR(SEARCH(G1,A1:D4))),COLUMN(A:D),99^99),1))),"")
这将返回找到的行:
SMALL(IF(NOT(ISERROR(SEARCH("a",A1:D4))),ROW(1:4),99^99),1)
这将返回找到的列:
SMALL(IF(NOT(ISERROR(SEARCH("a",A1:D4))),COLUMN(A:D),99^99),1)
然后将它们用于与索引为
的范围的相交INDEX(A1:D4,.......)
答案 1 :(得分:2)
这是基于this solution to locate a value in a 2D array的另一种方法(不使用数组公式,即不点击cntrl-enter)。
为了在作者的网站上获得适当的信誉,我不会重复对其工作方式的出色解释。
编辑:根据@Chronocidal的出色建议,以下是新的改进版本供参考:
答案 2 :(得分:0)
最后一个使用VBA:
Function FINDaddress(VALUESEARCHED As String, ra As Range) As Variant
Dim A As Range
Set A = ra.Find(What:=VALUESEARCHED, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
FINDaddress = A.Address
End Function
之后,您只需要使用自制功能:
=FINDaddress("a",A1:D4)
答案 3 :(得分:0)
您可以通过VBA创建自定义Function
:
findIn(what, where)
返回,它是范围/数组(
A1
)中搜寻元素(String
)的what
样式的“where
”。< br /> 如果未包含在搜索范围内,则返回“Not found
”
Private Function findIn(ByVal what As String, ByVal where As Range) As String
Dim res As Range
Set res = where.Find(what, LookIn:=xlValues)
If Not res Is Nothing Then
findIn = Col_Letter(res.Column) & res.Row 'returns A1 styled result
Else
findIn = "Not Found"
End If
End Function
'col number to letter by brettdj
'(so.com)/questions/12796973/function-to-convert-column-number-to-letter/49577009)
Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
因此,如果我们要对其进行测试,则会产生预期的结果:
Private Sub test()
Range("E1") = findIn("d", Range("A1:D4"))
End Sub
或者,如果将其放在单独的模块(Insert -> Module
)中,也可以将其用作工作表功能