ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > 函数与公式 > 练习9:求各书籍的最近出借数量

练习9:求各书籍的最近出借数量

作者:绿色风 分类: 时间:2022-08-18 浏览:191
楼主
rongjun
题目:求每种书籍最近出借数量,并列出其借出日期、书籍名称。
说明:1、A列日期按照升序排序;
           2、出借数量小于100,表格格式固定,不得更改。
           3、有兴趣的朋友可以挑战内存数组。
要求:1、用函数完成,最多可以用3个公式下拉完成(注:三列分别用公式计算再用choose()或if({1,1,0},)等方式合并公式者,视作使用三个公式);
           2、不用VBA,不用辅助区域,不定义名称;
           3、结果按日期升序排序,若日期相同则按B列现有次序依次列出;
           4、注意处理错误值,不能有0值,结果如下图所示。

 

求各书籍的最近出借数量_题目.rar


请用回复可见方式答题。
2楼
syz105729913
我先来个,三列用一个内存数组的没想出来,用了两个公式。

求各书籍的最近出借数量_题目.rar

3楼
棉花糖
E2:G21=TEXT(INDEX(IF((COLUMN(A2:C22)=1)*(ROW(1:21)<21),SUBTOTAL(4,OFFSET(A2,,,ROW(1:21))),A2:C22),SMALL(IF(COUNTIF(OFFSET(B1,ROW(1:20),,20),B2:B21)=1,ROW(1:20),21),ROW(1:20))),"[>1e4]e-m-d;[<100]#")

内存数组
4楼
棉花糖
=TEXT(MID(INDEX(IF(ROW(1:21)=21,"",SUBTOTAL(4,OFFSET(A2,,,ROW(1:21)))&100+C2:C22&B2:B22),SMALL(IF(COUNTIF(OFFSET(B1,ROW(1:20),,20),B2:B21)=1,ROW(1:20),21),ROW(1:20))),{1,10,7},{5,20,2}),"[>1e4]e-m-d;[<100]#")

不过以上公式行不通,想不通
5楼
棉花糖
=TEXT(MID(LOOKUP(SMALL(IF(COUNTIF(OFFSET(B1,ROW(1:20),,20),B2:B21)=1,ROW(1:20),21),ROW(1:20)),ROW(1:21),IF(ROW(1:21)=21,"",SUBTOTAL(4,OFFSET(A2,,,ROW(1:21)))&100+C2:C22&B2:B22)),{1,9,7},{5,20,2}),"[>1e4]e-m-d;[<100]#")

多谢版主提醒,不过字符有点多。内存数组
6楼
syz105729913
公式最后的  ;[<100]#  可以省略。
7楼
xcd
内存数组,有点长

8楼
足往神留
看了7楼许版主的公式,我不敢发了。我用了两个公式,而许版一个内存数组公式,太精彩了!

回复后看到了5楼棉花糖的公式,只能说,更精彩!
9楼
wshcw
精采,学习.
10楼
xcd
兄台在百度EXCEL吧诸多好贴令人印象深刻!
11楼
rongjun
公布我的答案(四种解法):
第一种解法:两个公式(普通数组+多单元格数组)
F2:G21输入多单元格数组公式

  1. =INDEX(B:C,SMALL(ROW(2:21)*COUNTIF(OFFSET(B1,ROW(1:20),,20),B2:B21)^5,ROW()-1),{1,2})&""

E2输入普通数组公式,下拉

  1. =IF(F2="","",MAX(OFFSET($A$1,,,MAX(IF($B$2:$B$21=F2,ROW($2:$21))))))

第二种解法:普通数组
E2输入普通数组公式,下拉,右拉

  1. =TEXT(INDEX(A:A,SMALL(LOOKUP(ROW($2:$21),IF(A$2:A$21<>"",ROW($2:$21)))*COUNTIF(OFFSET($B$1,ROW($1:$20),,20),$B$2:$B$21)^5,ROW()-1))&"","[>1e4]e-m-d")

第三种解法:多单元格数组(隐含交叉引用)
E2:G21输入多单元格数组公式

  1. =TEXT(OFFSET(A1,MID(SMALL(IF(COUNTIF(OFFSET(B1,ROW(1:20),,20),B2:B21)=1,10^4+MATCH(ROW(1:20),IF(A2:A21,ROW(1:20)))/1%+ROW(1:20),4^8),ROW(1:20)),{2,4,4},2),,,3)&"","[>1e4]e-m-d")

第四种解法:内存数组

  1. =TEXT(MID(LOOKUP(SMALL(ROW(1:20)*COUNTIF(OFFSET(B1,ROW(1:20),,20),B2:B21)^5,ROW(1:20)),ROW(1:21),IF(B2:B22>0,SUBTOTAL(4,OFFSET(A2,,,ROW(1:21)))/1%+C2:C22&B2:B22,"")),{1,8,6},{5,99,2}),"[>1e4]e-m-d")
12楼
西山晴雪
越来越精彩了
13楼
_s_bri
学习来了!
14楼
donghan
xiazaixuexi
15楼
gulyxxf
学习,学习
16楼
Cowisen
太多公式嵌套了,精彩!
下载下来慢慢学习
17楼
aszhanghong
现在发现自己太需要学习了
18楼
JLxiangwei
看答案
19楼
fly_fu


勁呀!咁多位師兄姊
20楼
bluexuemei
学习学习
21楼
fangjianp
E2=TEXT(OFFSET(A$1,SMALL((COUNTIF(OFFSET($B$1:$B$21,ROW($1:$20),),$B$2:$B$21)>1)/1%+LOOKUP(ROW($1:$20),ROW($1:$20)/(A$2:A$21<>"")),ROW(A1)),),"[>99]e-M-D;[>0];")
公式长度:159
右拉下拉
22楼
玉丫头
学习

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap