excel 使用Sumproduct进行组排名

5lhxktic  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(113)

| 组|产品|值|排名|
| --|--|--|--|
| 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

eanckbw9

eanckbw91#

Option Explicit

Sub Ranking()

    Dim lastrowA As Long, f As String

    f = "=Sumproduct(($A$2:$A$10000=A2)*($C$2:$C$10000>C2)) + 1"
    With Sheet1
       'Find a lastrow of column A
       lastrowA = .Cells(.Rows.Count, "A").End(xlUp).Row
       .Range("D2:D" & lastrowA).Formula = f
    End With

End Sub

字符串

jljoyd4f

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)))))
根据您的需要更改范围。

相关问题