2013-04-23 85 views
0

我有一個簡單的表,5個名稱和5個等級,如果你願意。 在另一列中,我使用LARGE函數對等級進行排序。 現在有辦法知道每個「有序」等級的行來獲得類似的東西嗎?提取函數結果的行號

White  23  31  5 
Red  15  23  1 
Green  23  23  3 
Blue  18  18  4 
Grey  31  15  2 

我無法計算的列是最後一個!

+0

您是否試圖獲得分數的行,以便您可以檢索該名稱?是否有理由不能使用排序(在Grades列中選擇第一個值並按降序排序),因爲這會對值進行排序並在值旁邊保留名稱?你怎麼知道你的「有序」欄目中的23個變成了'白色'還是那個變成'綠色'的變化? – user2140261 2013-04-23 14:49:38

+0

@ user2140261我不知道..這只是一個例子來更好地解釋我的問題。最終目標是在第四欄寫上名字!原因是我想要一個公式! – Janinho67 2013-04-23 16:26:50

回答

1

如果您想對這些等級進行排名,您應該使用rank()函數。不大()。

=RANK(D2,$D$2:$D$6,1) 

RankExample

+0

我認爲你的調用'Grade2'是Grade1 Sorted Descending。所以,整體不需要。並且因爲'Rank'不會給OP那個。通過拖拽一個公式來使用'Large' 1,2,3,4等等是一個完全有效的解決方案。 – user2140261 2013-04-23 14:44:01

+0

@ user2140261你錯了。再次看看訂單。 – Stepan1010 2013-04-23 14:54:58

+0

31,23,23,18,15是23,15,23,18,32的下降值。林不知道你要求我看什麼順序。另外,OP並不要求該等級的順序,她只需要與每個等級關聯的行。 「在另一列我訂購了分數」,那麼真正的問題是「是否有辦法知道每個」有序「等級的行?她已經有了她只想知道每個」訂購「等級的行的順序來自。 – user2140261 2013-04-23 15:06:43

1

你可以試試這個

=MATCH(LARGE(B1:B5,1),B1:B5,0) 

結果是行的數量...

+1

紅色和綠色都是23.它將僅返回第一場比賽。 – user2140261 2013-04-23 14:48:52

1

細胞D1單元格D2將=INDEX($A$1:$A$5,MATCH(C1,$B$1:$B$5,0))

然後把=IF(D1<>INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)+MATCH(C2,INDIRECT("$B$"&MATCH(C2,$B$1:$B$5,0)+1&":$B$5"),0)))

這也將工作時重複Grades存在

但我強烈建議使用Sort如下:

Before After

*****另外:*****這裏是對上述公式的解釋。

要獲得包含我們正在查找的數字的行(列C中的數字),您需要使用Match()函數。我們D1進入=MATCH(C1,B1:B5,0)

Match

這是什麼做的:在尋找到價值C1,這是31 它正在尋找在Range("B1:B5"),而0是完全匹配。

因此,當尋找匹配C131我們得到5。這就告訴我們,31是Row 5

現在,得到的Column ARow 5價值,我們使用INDEX()功能如下:

我們D1添加到=MATCH(C1,B1:B5,0)=INDEX(A1:A5,MATCH(C1,B1:B5,0))

INDEX

這將看Range("A1:A5")Row 5(這是因爲=MATCH(C1,B1:B5,0) = 5) 而結果將是Grey

現在,如果我們拖到這個公式下來,我們會發現第一個問題:

Issue

這是我們的2個問題:

1) We get an `N/A` error in the last row. 
2) Although `Green` is only in `Range("A1:A5")` one time we see it twice 
    even though it would seem that `White` should be twice. 

這些原因,因爲:

1) We need to add `$` to the range that will remain the same so when we drag down 
    the formula is won't shift the range. As is the formula in `D5` is 
    `=INDEX(A5:A9,MATCH(C5,B5:B9,0))` and we receive the error *because* 
    `Range("A5:A9")` does not contain `15`, but the issue is we meant 
    to look in `Range("A1:A5")` 

所以我們改變公式如下:=INDEX($A$1:$A$5,MATCH(C1,$B$1:$B$5,0)) ,我們不會在公式事業上C1使用$拿筆記中,我們WANT這個值改變,因爲我們下移。

Fix one

但是,我們仍然有雙重價值觀的問題時,他們不應該在那裏。

因爲D1是第一個單元格,我們不會在其中更改公式。因爲任何與最大價值相等的東西都與它相關聯,我看不出任何關係爲什麼順序是重要的。

相反,我們將在D2啓動並進入=IF(D1<>INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)+MATCH(C2,INDIRECT("$B$"&MATCH(C2,$B$1:$B$5,0)+1&":$B$5"),0)))

這是什麼做的是檢查是否的=INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)) 值不等於上面行中的值。 (作爲一個排序列表意味着所有的雙精度值將在彼此之上),如果它是不是相同然後使用該值,但如果它是相同的,我們需要做更多的工作。

如果該值是不一樣的,我們使用公式INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)+MATCH(C2,INDIRECT("$B$"&MATCH(C2,$B$1:$B$5,0)+1&":$B$5"),0)))

現在來解釋它,我會用我們的雙重價值的例子。在D3我們發現公式:=IF(D2<>INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)+MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0)))

而且因爲我們知道,INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0))將等於上述單元(White),我們已經走了過來如何,如果真的作品中,我將重點的if false值:INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)+MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0))

我們知道MATCH(C3,$B$1:$B$5,0)是包含在這種情況下23C3一審排與排爲Row 1,所以我們需要尋找23排在Row 1。因此我們使用MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0)等於MATCH("23", B2:B4,0),因爲我們將1添加到具有第一個匹配的行23C3

,現在將回到我們的2值作爲,價值23Range("A2:A5")在第二排,Red是在這個範圍內的Row 3Row 1Blue如圖所示:

Row2

但我們不希望Row 2我們知道,23涉及GreenGreenRow 3所以我們增加該行的最後,我們發現價值231MATCH(C3,$B$1:$B$5,0))到我們目前找到的行(2)並獲得Row 3

+0

與我的第一個示例或Stepan答案中的表格相關? – Janinho67 2013-04-23 17:36:33

+0

這將返回與原始問題中「已排序」列中的數字匹配的名稱。 – user2140261 2013-04-23 17:51:05

+0

我已經更新了我的答案,以包含我在這個問題中討論過的每一件事的完整解釋。 – user2140261 2013-04-23 22:21:55

0

以下是基於this link中概述的方法的公式方法。這種方法的最終佈局如下所示。

Spreadsheet layout

我假定有1個標題行並且使用了兩輔助列(d & E)。雖然可以將額外的行添加到標題中,但表必須從列A開始,以便列E中的公式正常工作。

雖然輔助列可以通過將它們的公式合併到列F中的公式中消除,但我不建議這樣做:生成的公式會是一個難以維護的問題。

公式所需

Cell C2: =LARGE(B:B,ROW(A2)-ROW($A$1)) [Copy down to bottom of data] 

    Cell D2: =MATCH(C2,B:B,0)    [Copy down to bottom of data] 

    Cell E2: =D2 

    Cell E3: =IF(D3<>D2,D3,E2+MATCH(C3,INDIRECT("B"&(E2+1)&":B"&COUNTA(A:A)),0)) 
      [Copy down to bottom of data] 

    Cell F2: =OFFSET($A$2,E2-ROW($A$2),0) [Copy down to bottom of data] 

答案的解釋

有四個步驟,得到了答案:

  • 排序的等級從最高到最低(爲你在您的示例數據中顯示)

  • 創建行號的部分排序的分類等級

  • 獲取行號重複的成績

  • 使用排序,顯示名爲每個分類等級

將檔次從高到低排序

Function to sort grade

正如您所做的那樣,我的排序使用LARGE函數,該函數返回範圍或數組中的第n個最大值。如圖所示,單元格C2中的LARGE函數獲取B列中的等級。LARGE的「n」計算爲當前行數減去標題中的行數,在此情況下爲單元格A1的1行。當公式被複制下來,「n」個的進行從1到2至3等

部分訂購等級行號

Formulas to get grade row numbers of sorted names, with duplicates

下一步是確定行號對於與排序等級相對應的未排序等級。

爲此,我使用MATCH函數來查找每列排序的等級在列B中的未排序等級列表中。MATCH有三個參數 - 要匹配的值,要在其中生成的範圍匹配以及可選的匹配類型,其值爲0或FALSE以進行完全匹配 - 並返回索引號,該索引號表示在查找範圍中找到匹配的位置(1表示匹配範圍中的第一行,第二行2,等等)。

在式爲上面所示細胞D2,上檔次的MATCH函數31只返回6自31是塔B的第六行中

細胞D4結果表明爲什麼它是隻可能獲得用這個公式進行偏序排序。當我們試圖查找23的第二個實例的行時,公式返回值爲2,這對應於第一個23的行。這是因爲MATCH將始終返回23的第一個匹配發現,這是在第2行!

獲取正確的行號爲

Formulas to get correct row numbers for duplicate grades

下一步是讓在列D.複製的行號是實現這一目標的公式正確的行引用顯示了重複的成績表格E欄中的前三個單元格。

有三種情況是與E欄予以處理:

  1. 對於第一個(也可能是唯一的)最高等級的情況下,可以只使用在計算行數cell D2

  2. 第二種情況處理剩餘等級的行引用的第一個實例。對於這些,可以再次使用在列D中計算的行數(通過列E公式中的IF語句的TRUE分支)。例如,在單元E2(對應於第23級的第一個實例)中,可以使用單元D3中的行號。

  3. 最後一種情況是複製成績的行。這裏,列B中每個副本的MATCH使用不包括該等級的先前匹配的滑動範圍重新計算。例如,對於列C中23的重複等級,匹配範圍爲B3:B6,而不是在列D計算中使​​用的範圍B2:B6

Diplay在有序

Formulas to show names sorted by grade

名字最後一步是直截了當:獲得對應等級排序的名稱。這裏使用OFFSET功能;它的參數是一個單元格引用以及該引用的行和列的數量,以便找到所需的值。

+0

'INDIRECT'是一個易失性函數,應該避免,這就是爲什麼我使用索引。我會*不*在多個不同的公式中使用它們,這些公式都是相互引用的。這也會對性能產生很大的影響。此外,爲什麼在引用行時,硬編碼'$ A $ 1'和'$ E $ 6'?它總是會返回'1'和'6',然後您將加上和減去硬編碼的數字,這些數字總是***保持不變。 'ROW($ B $ 2)-1'將始終***結果爲'1'和'&「:B」&ROW($ E $ 6)'總是等於'B6',爲什麼不使用這些值而不是增加額外的計算? – user2140261 2013-04-24 12:45:34