2015-02-10 75 views
1

我最近想要做的事情很多,而且無法解決該怎麼做,在我作爲參數傳遞的列中是MATCH。實質上,我有一個二維數組,我希望能夠在第n列中找到給定值的第一次出現,對於任何給定的n值,並返回它出現在的行號。或者(或多或少地等價),我希望能夠在列中搜索給定的列標題。有沒有辦法做到這一點?在指定的列中查找值

實際上,我要模擬的不存在的功能=MATCH(lookup_value,lookup_array,lookup_column,[match_type])

我用間接的,它的工作原理kludged一起可怕bodge工作,但人呀可怕。 =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

的是,功能應該怎麼回去呢? rownumber? – holgrich 2015-02-10 14:20:22

+0

是的,行號是我所追求的。 – 2015-02-10 14:21:42

回答

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)

+0

這正是我正在尋找的 - 我不知道你可以把0放在INDEX的行部分,並讓它像那樣工作!謝謝! – 2015-02-11 10:53:34

+0

你還可以做'INDEX(lookup_array,row_number,0)'來返回整行嗎? – 2015-02-11 15:58:18

+0

是的,這將工作完全一樣,你猜測 – tigeravatar 2015-02-11 16:25:47

0

你可以做這樣的事情:

Set findCell = ActiveSheet.Range("A:Z").Find(What:="term_to_search") 

會根據您的搜索詞的標題。

Set range = ActiveSheet.Range(findCell, findCell.Offset(DEF_MAX_ROWS, 0)) 

設置一個範圍,該範圍將從該標題向下搜索整列。

+0

如果可能,我寧願在沒有腳本的情況下執行此操作。有沒有辦法只用單元格公式來做到這一點? – 2015-02-10 14:27:18

0

您可以使用INDIRECT函數在公式中指定範圍。因此,舉例來說,如果你把你想在小區A75搜索欄的字母標識,你可以使用:

=MATCH("Value_To_Match", INDIRECT(A75 & ":" & A75), 0) 

所以,如果在A75值是G,字符串建立在INDIRECT調用爲G:G,並且MATCH將通過列G查看「Value_To_Match」並返回找到它的行號。

使用這個想法,你可以在A75中輸入一個公式來生成你想要搜索的列的列名稱。例如,如果你的列標題都在第1行,你想搜索的標題是A74,你可以這樣做:用

CHAR功能的數字轉換成ASCII字符,所以65變A,66變成B等等。注意,這隻有在你沒有經過Z的列時纔會起作用。你需要一個更加挑剔的公式來與AA等做正確的事情。

你可以克服通過使用R1C1 notation代替處理列字母的煩惱,您可以通過將FALSE的第二個參數添加到INDIRECT表達式來激活該列。現在,您不需要用字母來指定您的列,而是使用數字來指定它。這簡化了列取景器中的A75:

=MATCH(A74, 1:1, 0) 

,也是INDIRECT表達你的整體MATCH

=MATCH("Value_To_Match", INDIRECT("C" & A75, FALSE), 0) 
+0

要在R1C1表示法中指定整列,只需Cn,其中'n'是相關列號。 – pnuts 2015-02-10 15:43:13

+0

@pnuts,爲了工作,你必須改變你的設置來使用R1C1,或者Excel會指定C列中的一個單元格。 – 2015-02-10 15:50:14

+0

我想我不明白。你是說(假設A1,A2中的搜索值包含列號)'= MATCH($ A $ 1,INDIRECT(「C」&$ A $ 2,0),0)'不起作用? – pnuts 2015-02-10 15:52:52

0

說我們有一個二維數組: B3:E17並且我們希望在該數組的第三列中找到幸福

G1輸入:

B3:E17

G2輸入:

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) 

例如:

enter image description here