我正在為一支新興的電競團隊編寫組織表,我的目標是計算團隊中玩家的平均遊戲排名。
細胞F2
和每個其他列中的行F
具有等級標識符,例如“S3”或“G1”(用於等級銀 3 或金 1)。
我有另一張表,其中包含這些排名標識符之間的數字映射(I1 是 1,I2 是 2 等)
因此,對於此範圍 ( F2:F100
) 中的所有其他行,我需要獲取標識符,通過VLOOKUP
針對工作表的方式將其轉換為數字形式,對結果Lookups
進行 a 操作。FLOOR(AVERAGE()
VLOOKUP
我已經完成了幾個步驟,但我不確定如何對像這樣的先前公式的結果進行平均。
要從文字版本中取得排名的數位版本,公式為:
=VLOOKUP(F2, Lookups!A2:B29,2, FALSE)
我不知道的是:
- 如何進行省略所有其他儲存格的儲存格引用
- 如何對大量 VLOOKUP 結果求平均值
資料範例
主表
查找表
每組兩列代表一個玩家,該玩家的排名儲存在偶數列的 F 行上。從查找表中,我們可以看到 S3 代表分數 10。
一旦我得到了這些數字的總和,我就取平均值,得到團隊的平均分數。回到查找表,這是與先前的操作相反的操作,並給出了與表中列出的每個玩家的平均得分相對應的單一排名。
就目前名單上的三名選手而言,我會選擇S3、G2和NA。這給了我 10、15 和 10 分。這些平均值為 11(向下捨去),對應於使用查找表的 S2 等級。包含該假設公式的儲存格將顯示「S2」。
答案1
問:F3、F5、F7 等會保留空白嗎?
答:他們會的。我已將該欄位變灰以表明不應在其中輸入任何內容。
最簡單的方法是使用這些空白儲存格來保存各個排名的數值。然後,您可以對 F2:F101 進行平均,並且僅考慮真實數字。可以使用儲存格數字格式隱藏數字;;;
。這會為從公式中鍵入或傳回的任何內容顯示空白儲存格,同時保留原始值。
如果您不想複製和貼上 50 次,請在調整第一行程式碼中主工作表的名稱後執行這個簡短的子流程。
Option Explicit
Sub PopulateLookups()
With Worksheets("sheet1")
With .Range(.Cells(2, "F"), .Cells(.Rows.Count, "F").End(xlUp))
With .SpecialCells(xlCellTypeConstants, xlTextValues) '<~~ see footnote
With .Offset(1, 0)
.FormulaR1C1 = "=vlookup(r[-1]c, lookups!r2c1:r29c2, 2, false)"
.NumberFormat = ";;;"
End With
End With
End With
End With
End Sub
現在,您可以使用以下方法之一來獲得查找值的平均值。
=average(F2:F100)
=average(F:F)
如果您不想重新利用這些空白儲存格,「輔助列」是一個可行的替代方案。我將空白法與輔助柱法進行了測試,結果是相同的。
1如果現有排名由公式傳回且未輸入,則xlCellType常數應替換為xlCellType公式。
答案2
我將解決第一個查找問題,即每隔一行都需要一個值,方法是將 vlookup 放入 iferror 公式中,該公式在找不到結果時僅返回空白文字:
=IFERROR(VLOOKUP(F2,Lookups!A2:B29,2,0),"")
接下來,您可以只使用舍入公式內的平均值公式來截斷小數。平均公式將簡單地忽略空白行。
最後,vlookup 公式無法從此平均值中獲取“排名”,因為它總是從左側開始,然後向右移動 - 您需要查看右側,然後向左移動。為此,我使用索引/匹配組合:
=INDEX(Lookups!A2:B29,MATCH(E11,Lookups!B2:B29,1),1)
對於匹配部分,我使用了“1”參數,以便它可以找到最接近的值而不會過度,假設它可能不是完全匹配。查看 Excel 內部的索引和符合公式說明,以了解更多資訊和選項。
我將其建立在一個範例表中,其中顯示了寫出的公式。希望這可以幫助:顯示公式範例的範例解決方案
答案3
假設您想要得到偶數行的平均值,請使用下列公式:
=IF(ROW()/2 = ROUND(ROW()/2,0),VLOOKUP(A1,H$1:I$5,2,FALSE),"")
其他用途:
=IF(ROW()/2 <> ROUND(ROW()/2,0),VLOOKUP(A1,H$1:I$5,2,FALSE),"")
然後使用=AVERAGE(G1:G5)
得到平均值