= MATCH()等价于多维范围
我有一个Excel工作表,单元格A1-C20 = =INT(RAND()*10)
。 这是我的数据范围。 单元格E1 = 1,E2 = 2,E3 = 3等这些是我试图find的值。 我设置了F1 = =MATCH(E1,A:C,0)
,F2 =MATCH(E1,A:C,0)
等。
但是,所有MATCH
函数都会返回MATCH
#N/A
,因为input范围是多维的。 如何testing给定值(1,2,3,4等)是否存在于多维范围(A1-C20)中?
/编辑: 这个function起作用,但是比我需要的更多。 有什么办法让它只返回TRUE或FALSE,取决于查找值是否在范围内?
Function OzgridLookup(Find_Val As Variant, Occurrence As Long, Table_Range As Range, _ Offset_Cols As Long, Optional Column_Lookin As Long, Optional Row_Offset As Long) As Variant Dim lLoop As Long Dim FoundCell As Range If Column_Lookin = 0 Then 'No column # specified With Table_Range 'Top left cell has Find_Val & Occurrence is 1 If Table_Range.Cells(1, 1) = Find_Val And Occurrence = 1 Then OzgridLookup = .Cells(1, 1)(1, Offset_Cols + 1) Exit Function 'All done :) Else 'No column # specified so search all for _ nth Occurrence reading left to right Set FoundCell = .Cells(1, 1) 'Set cell variable for Find start For lLoop = 1 To Occurrence 'Loop as many times as Occurrences _ and each time Set "FoundCell" to start next Find from Set FoundCell = _ Table_Range.Find(What:=Find_Val, After:=FoundCell, _ LookIn:=xlValues, LookAt:=xlWhole, _ SearchOrder:=xlRows, SearchDirection:=xlNext) Next lLoop End If End With Else 'column # specified With Table_Range.Columns(Column_Lookin) 'Work with column # specified Set FoundCell = .Cells(1, 1) 'Set cell variable for Find start For lLoop = 1 To Occurrence 'Loop as many times as Occurrences _ and each time Set "FoundCell" to start next Find from Set FoundCell = _ Table_Range.Find(What:=Find_Val, After:=FoundCell, _ LookIn:=xlValues, LookAt:=xlWhole, _ SearchOrder:=xlRows, SearchDirection:=xlNext) Next lLoop End With End If OzgridLookup = FoundCell.Offset(Row_Offset, Offset_Cols) End Function
你可以使用COUNTIF来做这件事,因为你只想知道这个号码是否存在(不是它的位置)。
=COUNTIF(A:C,E1)>0
如果存在则返回“TRUE”,如果不存在则返回“FALSE”。
只是为了好玩,下面是一个工作表函数解决scheme,返回匹配查找值的单元格地址。 它使用的事实,你只是在3列search。
=IF(ISERROR(MATCH(E1,A:A,0)),IF(ISERROR(MATCH(E1,B:B,0)),IF(ISERROR(MATCH(E1,C:C,0)),"Not found.","C"&MATCH(E1,C:C,0)),"B"&MATCH(E1,B:B,0)),"A"&MATCH(E1,A:A,0))
我想我也会投入一个VBA的解决scheme,可以返回(连续)范围内的匹配位置。 它从左到右逐列查看一列,并返回find的第一个匹配的地址。
Public Function MDMATCH(srchfor As String, lookin As Range) As String Application.Volatile Dim RngArray() As Variant Dim topleft As String Dim tmpval As String topleft = lookin.Address topleft = Left(topleft, InStr(topleft, ":") - 1) tmpval = "Not found." RngArray = lookin For i = 1 To UBound(RngArray, 2) If tmpval = "Not found." Then For j = 1 To UBound(RngArray, 1) If RngArray(j, i) = srchfor Then tmpval = Range(topleft).Offset(j - 1, i - 1).Address Exit For End If Next j Else Exit For End If Next i MDMATCH = tmpval End Function