| 组|产品|值|排名|
| --|--|--|--|
| A组|鲑鱼| 2000 | 1 |
| A组|鳟鱼| 900 | 2 |
| B组|铅笔| 500 | 2 |
| B组|橡胶| 700 | 1 |
| C组|司木露伏特加| 1200 | 1 |
| C组|喜力| 900 | 2 |
我试图在每个组中实现“使用Sumproduct公式进行排名”,从而使每个组中的“值”具有升序。
我可以在Excel中用公式来表示:
=SUMPRODUCT(($A$2:$A$10000=A2)*($C$2:$C$10000>C2))+1
字符串
然而,我想在Python中实现这一点;我尝试过这样做,但仍然在下面的代码中显示了一个bug(对于这个,我需要一个for循环版本,直到最后一行):
Sub Ranking()
lastrowA = Sheet1.Range("A" & Rows.Count).End(xlUp).Row 'Find a lastrow of column A
Dim i As Integer
Dim groupRange As Range
Dim productRange As Range
Set groupRange = Sheet1.Range("A:A" & lasrowA) 'Cost Center Name Range
Set productRange = Sheet1.Range("B:B" & lasrowA) 'Store Name Range
For i = 2 To lastrowA
Cells(i, 4).Value = Evaluate("Sumproduct((A2:A10000=Cells(i,1))*(A2:A10000>Cells(i,2)))") + 1
Next i
End Sub
型
2条答案
按热度按时间eanckbw91#
字符串
jljoyd4f2#
SUMPRODUCT返回单个值,因此您可以使用SPILL为每行重复计算。您也可以使用以下公式之一来使用Office 365一次性获得SPILL:
第一个月
=1+MMULT((TOROW(A2:A7)=A2:A7)*(TOROW(C2:C7)>C2:C7),SEQUENCE(ROWS(A2:A7),,,0))
个=LET(a,A2:A7,c,C2:C7,MAP(a,c,LAMBDA(x,y,1+SUM((a=x)*(c>y)))))
个根据您的需要更改范围。