= 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