本帖最后由 风中的我脸 于 2020-9-30 23:38 编辑
函数难产,刚好在练VBA,先上一个
- Sub test()
- Dim dic As Object, arr, brr, i&, p&, ou&, rank&, count&
- Set dic = CreateObject("scripting.dictionary")
- Sheet1.Activate
- arr = Range([b3], Cells(Rows.count, "b").End(xlUp))
- For i = 1 To UBound(arr)
- dic(arr(i, 1)) = ""
- Next
- ReDim brr(1 To UBound(arr))
- For ou = 1 To UBound(arr)
- rank = 1
- For i = 0 To dic.count - 1
- If arr(ou, 1) < dic.keys()(i) Then rank = rank + 1
- Next
- brr(ou) = rank
- Next
- For ou = 2 To 3
- For p = 1 To UBound(brr)
- count = 0
- For i = 1 To UBound(brr)
- If brr(i) = ou Then count = count + 1
- Next
- If count < ou Then
- For i = 1 To UBound(brr)
- If brr(i) > ou Then brr(i) = brr(i) - 1
- Next
- Else: Exit For
- End If
- Next
- Next
- Range("c3").Resize(UBound(brr), 1) = WorksheetFunction.Transpose(brr)
- Set dic = Nothing
- End Sub
复制代码 硬生函数,373字符!!
- <span style='display: inline !important; float: none; background-color: rgb(247, 247, 247); color: rgb(68, 68, 68); font-family: Tahoma,"Microsoft Yahei","Simsun"; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; overflow-wrap: break-word; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;'>=SUM(SUM(--(UNIQUE($B$3:$B$17)>=B3)),-IF(COUNTIF(B$3:B$17,LARGE(UNIQUE(B$3:B$17),2))>2,TEXT(SUM(--(UNIQUE($B$3:$B$17)>=B3)),IF({1,0},"[>3]1;!0","[>4]"&"!"&N(SUM(COUNTIF(B$3:B$17,LARGE(UNIQUE(B$3:B$17),{3,4})))<3)&";!0")),TEXT(SUM(--(UNIQUE($B$3:$B$17)>=B3)),CHOOSE({1,2,3},"[>2]1;!0","[>4]1;!0","[>5]"&"!"&N(SUM(COUNTIF(B$3:B$17,LARGE(UNIQUE(B$3:B$17),{4,5})))<3)&";!0"))))</span><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike>
复制代码
补充内容 (2020-10-5 12:55):
=SUM(SUM(--(UNIQUE(B$3:B$17)>=B3)),-MAX(1*TEXT(SUM(--(UNIQUE(B$3:B$17)>=B3))-{2,3},IF({1,0},"!"&N(COUNTIF(B$3:B$17,LARGE(UNIQUE(B$3:B$17),2))<2)&";!0;!0","[>"&1+(COUNTIF(B$3:B$17,LARGE(UNIQUE(B$3:B$17),2))<2)&"]"&(SUM(COUNTIF(B$3:B$17,LARGE(UNIQUE(B$3:B$17),{3,4}+(COUNTIF(B$3:B$17,LARGE(UNIQUE(B$3:B$17),2))<2))))<3)+2-(COUNTIF(B$3:B$17,LARGE(UNIQUE(B$3:B$17),2))>1)&";0"))))
补充内容 (2020-10-5 14:01):
自己yy了LET函数才207字符,及格线都没到,有这个函数的朋友帮我验证下。放弃了!!等20号
=LET(x,COUNTIF(B:B,LARGE(UNIQUE(B:B),2))<2,y,SUM(--(UNIQUE(B:B)>=B3)),SUM(y,-MAX(1*TEXT(y-{2,3},IF({1,0},"!"&N(x)&";!0;!0","[>"&1+(x)&"]"&(SUM(COUNTIF(B:B,LARGE(UNIQUE(B:B),{3,4}+(x))))<3)+2-NOT(x)&";0"))))) |