我最近想做的事情,并且无法解决怎么做,我在作为参数传递的专栏中是MATCH。本质上,我有一个二维数组,我希望能够找到第n列中给定值的第一次出现,对于任何给定的n值,并返回它出现的行号。或者(或多或少等价),我希望能够在列中搜索给定的列标题。有没有办法做到这一点?
实际上,我想模拟不存在的函数=MATCH(lookup_value,lookup_array,lookup_column,[match_type])
我使用INDIRECT完成了一项可怕的躲避工作,这项工作很有效,但却让我感到非常可怕。
=MATCH(lookup_value,INDIRECT("R"&<top of array>&"C"&<left of array>+<column reference>&":R"&<bottom of array>&"C"&<left of array>+<column reference>,FALSE),FALSE)
答案 0 :(得分:3)
这个公式应该对你有用,并且会避免间接。任何时候你都可以避免使用间接,我建议你这样做。
=MATCH(lookup_value,INDEX(lookup_array,0,MATCH(lookup_header,array_headers,0)),0)
如果您没有按列标题查找列并且只有列号,那么它就会变得更容易:
=MATCH(lookup_value,INDEX(lookup_array,0,column_number),0)
答案 1 :(得分:0)
你可以这样做:
Set findCell = ActiveSheet.Range("A:Z").Find(What:="term_to_search")
将根据您的搜索字词选择标题。
Set range = ActiveSheet.Range(findCell, findCell.Offset(DEF_MAX_ROWS, 0))
设置一个范围,从该标题中搜索整列。
答案 2 :(得分:0)
您可以使用INDIRECT
功能在公式中指定范围。因此,例如,如果您要在单元格A75中搜索要搜索的列的字母标记,则可以使用:
=MATCH("Value_To_Match", INDIRECT(A75 & ":" & A75), 0)
因此,如果A75中的值为G
,则INDIRECT
调用中构建的字符串为G:G
,而MATCH
将通过列G查找& #34; Value_To_Match&#34;并返回它找到的行号。
使用这个想法,您可以将公式放入A75,为您要搜索的列生成列名称。例如,如果您的列标题全部位于第1行,并且您要搜索的标题位于A74中,则可以执行以下操作:
=CHAR(MATCH(A74, 1:1, 0) + 64)
使用CHAR
功能将数字转换为ASCII字符,因此65变为A,66变为B等。请注意,这只有在您没有Z列的列时才有效。您和#39 ; d需要一个更挑剔的公式,用AA等做正确的事。
您可以使用R1C1 notation来克服处理列字母的烦恼,您可以通过向FALSE
表达式添加INDIRECT
的第二个参数来激活它。现在,您不是用字母指定列,而是使用数字指定它。这简化了A75中的列取景器:
=MATCH(A74, 1:1, 0)
以及整体INDIRECT
中的MATCH
表达式:
=MATCH("Value_To_Match", INDIRECT("C" & A75, FALSE), 0)
答案 3 :(得分:0)
对于Z
以外的列引用,您可以切换表示法(Excel选项,公式,使用公式并检查R1C1参考样式),并假设要查找的值在&#39; A1&#39; (R1C1)列号为&#39; A2&#39; (R2C1)适用:
=MATCH(R1C1,INDIRECT("C"&R2C1,0),0)
在converting a string of two or three characters into the relevant column number中保存一些复杂性。
答案 4 :(得分:0)
假设我们有一个二维数组: B3:E17 ,我们希望在该数组的第三列找到 Happiness 。
在 G1 中输入:
B3:E17
在 G2 中输入:
3
在 G3 中输入:
=ADDRESS(ROW(INDIRECT(G1)),COLUMN(INDIRECT(G1))+$G$2-1) & ":" & ADDRESS(ROW(INDIRECT(G1))+ROWS(INDIRECT(G1))-1,COLUMN(INDIRECT(G1))+$G$2-1)
这将显示第三列的地址。然后在 G4 中输入:
=MATCH("Happiness",INDIRECT(G3),0)
例如: