ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 象山海鲜

[Excel 函数与公式] [第130期]又双叒叕——中国式排名[已结]

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2020-9-29 13:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 风中的我脸 于 2020-9-30 23:38 编辑

函数难产,刚好在练VBA,先上一个
  1. Sub test()
  2.     Dim dic As Object, arr, brr, i&, p&, ou&, rank&, count&
  3.     Set dic = CreateObject("scripting.dictionary")
  4.     Sheet1.Activate
  5.     arr = Range([b3], Cells(Rows.count, "b").End(xlUp))
  6.     For i = 1 To UBound(arr)
  7.         dic(arr(i, 1)) = ""
  8.     Next
  9.     ReDim brr(1 To UBound(arr))
  10.     For ou = 1 To UBound(arr)
  11.         rank = 1
  12.         For i = 0 To dic.count - 1
  13.             If arr(ou, 1) < dic.keys()(i) Then rank = rank + 1
  14.         Next
  15.         brr(ou) = rank
  16.     Next
  17.     For ou = 2 To 3
  18.         For p = 1 To UBound(brr)
  19.             count = 0
  20.             For i = 1 To UBound(brr)
  21.                 If brr(i) = ou Then count = count + 1
  22.             Next
  23.             If count < ou Then
  24.                 For i = 1 To UBound(brr)
  25.                     If brr(i) > ou Then brr(i) = brr(i) - 1
  26.                 Next
  27.             Else: Exit For
  28.             End If
  29.         Next
  30.     Next
  31.     Range("c3").Resize(UBound(brr), 1) = WorksheetFunction.Transpose(brr)
  32.     Set dic = Nothing
  33. End Sub
复制代码
硬生函数,373字符!!
  1. <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")))))

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-10-3 13:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 梦幻小丑 于 2020-10-3 13:55 编辑
  1. =SUM(N(COUNTIFS(B$3:B$17,">"&B3,C$3:C$17,A$3:A$17)-TEXT(A$2:A$16,"[<3];;!0;!0")>0))+1
复制代码
  1. =SUM(N(COUNTIFS(B:B,">"&B3,C:C,A$3:A17)-MOD(A$15:A29,13)>0))+1
复制代码
  1. =COUNT(0^(COUNTIFS(B:B,">"&B3,C:C,A$2:A17)-IF(A:A<3,A:A)),)
复制代码



评分

9

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-10-8 21:41 | 显示全部楼层
  1. =SUM(--IF(FREQUENCY(IFERROR(LARGE(B:B,{3,0,0}+COUNTIF(B:B,">="&LARGE(B:B,{2,2,0}+COUNTIF(B:B,MAX(B:B))))+{1,0,0}*A$3:A$18),),B:B),B$3:B$17>B3))+1
复制代码

评分

9

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-10-10 14:42 | 显示全部楼层
先弄个答案再说,3六5版本的
=TEXT(COUNT(0/(B3<=UNIQUE(FILTER(B:B,B:B<LARGE(IF(B:B<LARGE(IF(B:B<MAX(B:B),B:B),2),B:B),3)))))+3,"[>3]0;"&IF(B3=MAX(B:B),1,IF(B3>=LARGE(IF(B:B<MAX(B:B),B:B),2),2,3)))
   加了LET(自定义名称a)
=LET(a,LARGE(IF(B:B<MAX(B:B),B:B),2),TEXT(COUNT(0/(B3<=UNIQUE(FILTER(B:B,B:B<LARGE(IF(B:B<a,B:B),3)))))+3,"[>3]0;"&IF(B3=MAX(B:B),1,IF(B3>=a,2,3))))

评分

8

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-10-20 09:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jokie0913 于 2020-10-20 15:47 编辑
  1.     =IF(B3<LARGE(B:B,MIN(15,COUNTIF(B:B,">="&LARGE(B:B,MIN(15,COUNTIF(B:B,">="&MAX(B:B))+2)))+3)),SUM(($B$3:$B$17>B3)/COUNTIF($B$3:$B$17,$B$3:$B$17))+1-(SUM(($B$3:$B$17>=LARGE(B:B,COUNTIF(B:B,">="&LARGE(B:B,MIN(15,COUNTIF(B:B,">="&MAX(B:B))+2)))+3))/COUNTIF($B$3:$B$17,$B$3:$B$17))+1-4),CHOOSE((B3>=LARGE(B:B,MIN(15,COUNTIF(B:B,MAX(B:B))+2)))+(B3=MAX(B:B))+1,3,2,1))
复制代码

死做一个答案


  1. =IFERROR(SUM((B$3:B$17>B3)*(B$3:B$17<=LARGE(B:B,COUNTIF(B:B,">="&LARGE(B:B,COUNTIF(B:B,MAX(B:B))+2))+3))/COUNTIF(B$3:B$17,B$3:B$17)),)+3-IFERROR(B3>=LARGE(B:B,COUNTIF(B:B,MAX(B:B))+2),1)-(B3=MAX(B:B))
复制代码


尽力了。200字符




评分

7

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-10-28 10:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
先开贴,请以上楼层不要再编辑,以免影响评分。

TA的精华主题

TA的得分主题

发表于 2020-10-28 12:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 江苏永能朱兴华 于 2020-10-28 12:30 编辑

以前看老师和海版讨论过借用本身例的问题,用的基本上是VLOOKUP,没想到别的函数也行。

TA的精华主题

TA的得分主题

发表于 2020-10-28 12:45 | 显示全部楼层
本帖最后由 丢丢表格 于 2020-10-28 12:56 编辑
江苏永能朱兴华 发表于 2020-10-28 12:22
以前看老师和海版讨论过借用本身例的问题,用的基本上是VLOOKUP,没想到别的函数也行。

SUMIF 和 COUNTIF  都可以,因为它们出来的值 不是表格引用,而是一个值。(属性不同)

我最先想到的是海鲜函数:

=MATCH(1=1,FREQUENCY(-SUMIF(A:A,IF(B$3:B17>B3,A$3:A$17),C:C),-A$3:A17)-TEXT(A$3:A17,"[>3]1")<0,)


一开始时 就是这样写的!

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-10-28 19:07 | 显示全部楼层
本帖最后由 法法条 于 2020-10-28 19:09 编辑

丢丢老师好,其实我到现在也不是特别明白循环引用的界定。这道题我用市面上的软件进行测试,发现有些公式会被认为循环引用,例如用FREQUENCY,但是FREQUENCY在某W软件上却不被认为循环引用。另外,请老师看例子10,当用老师的公式下拉至C9单元格(B9单元格数字为98)时,C3至C8单元格的公式究竟谁先更新,是从C8单元格向上更新至C3单元格,还是从C3单元格更新至C8单元格,或者是按照B3:B8单元格的数值从大到小进行更新C3:C8单元格公式,比如拉到C9单元格了,C9单元格是2,那么是不是按照先更新C5单元格,再更新C3单元格,再更新C6单元格这种按照大到小的顺序去更新C列的公式。请您释疑,谢谢。

TA的精华主题

TA的得分主题

发表于 2020-10-28 19:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
法法条 发表于 2020-10-28 19:07
丢丢老师好,其实我到现在也不是特别明白循环引用的界定。这道题我用市面上的软件进行测试,发现有些公式 ...

不是下拉到最后一行的问题,
而是把它们视为全有值时。就不存在谁先谁后了。

自举 是引用自身值计算。 如 A1=A1+5 ,这样就自循环了。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 13:49 , Processed in 0.044657 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表