ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 内存数组练习题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-20 19:45 | 显示全部楼层
本帖最后由 我走我流 于 2019-10-20 19:52 编辑
solextrade 发表于 2019-10-20 15:30
不好意思了各位,发习题贴还是缺乏经验呀。
就以这个附件为准吧。

=SUM(IFNA(VLOOKUP(T(IF({1},"洲*"&OFFSET(E$13,MAX(ROW(A1)-1)*4,,3,2)&"市*")),IF({1,0},SUBSTITUTE(MID(A$2:A$13,SEARCH("洲"&T(INDIRECT(TEXT(SMALL(IF($E$2:$H$4<>"",COLUMN($E:$H)+ROW($2:$4)/1%),ROW($1:$12)),"R0C00"),))&"?市*",A$2:A$13),99),"市","市市",1),B$2:B$13),2,),))

有点长了。。。也是钻了漏洞,,,,

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-20 21:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 sbdk007 于 2019-10-20 22:10 编辑

火车接着开,用“洲”来代替省不少字符
=SUM(ISNUMBER(FIND(INDEX("洲"&T(OFFSET(E$1,ROW($4:$15)/4,MOD(ROW($1:$12),4)))&T(OFFSET(D$13,ROW(A1)*4-{2,2,3,3,4,4},{1,2,1,2,1,2})),N(IF({1},COLUMN(F:BY)/6)),N(IF({1},MOD(COLUMN(A:BT)-1,6)+1))),A$2:A$13))*B$2:B$13)

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-20 22:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
参考下楼上各位老师,修正下:
  1. =SUM(SUMIF(A:A,"*洲"&T(OFFSET(E$1,ROW($4:$15)/4,MOD(ROW($1:$12),4)))&T(OFFSET(D$12,ROW(A1)*4-{1,1,2,2,3,3},{1,2,1,2,1,2}))&"*",B:B))
复制代码

评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-20 22:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-10-20 23:05 | 显示全部楼层
本帖最后由 1055751654 于 2019-10-21 14:25 编辑
solextrade 发表于 2019-10-20 19:23
这样都能找出规律?佩服果仁老师。
我自己瞎填的那些小红字,自己都不知道什么规律。目的其实是为了 ...

再改改,短了一点=SUM(IFERROR(N(INDIRECT("b"&MATCH(TRANSPOSE("*"&TRIM(MID(SUBSTITUTE(SUBSTITUTE(0&"/"&F$6,"/","/"&E$6)&"/0"&SUBSTITUTE("/"&F$7,"/","/"&E$7)&"/0"&SUBSTITUTE("/"&F$8,"/","/"&E$8)&"/0"&SUBSTITUTE("/"&F$9,"/","/"&E$9)&"/","/",REPT(" ",99)),ROW(INDIRECT("1:"&LEN(PHONETIC(F$6:H$9))-LEN(SUBSTITUTE(PHONETIC(F$6:H$9),"/",))+8))*99-98,99))&TRANSPOSE(CHAR(SMALL(CODE(T(IF({1},OFFSET(E$12:F$12,ROW(A1)*4-3,,3)))),ROW($1:$6)))))&"市*",A:A,))),))谁来跟我比长,秒杀你们

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-21 01:29 | 显示全部楼层
  1. =SUM(SUMIF(A:A,"*"&TRIM(MID(E$6:E$9&SUBSTITUTE(F$6:F$9&"/1/1/1","/",REPT(" ",33)&E$6:E$9),INT(COLUMN(F:AI)/6)*33-32,33))&T(OFFSET(E$13,ROW(A1)*4-4+MID(REPT(0&12,10),COLUMN(A:AD),1),MID(REPT(0&1,15),COLUMN(A:AD),1)))&"*",B:B))
复制代码
这个意思是建立内存数组,笨办法,直接地区国家城市连接吧,30个可能组合

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-21 01:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. =SUM(SUMIF(A:A,"*洲"&T(OFFSET(E$1,ROW($4:$15)/4,MOD(ROW($4:$15),4)))&T(OFFSET(E$13,ROW(A1)*4-{4,4,3,3,2,2},{0,1,0,1,0,1}))&"*",B:B))
复制代码
直接offset生成?

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-21 08:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
别人都在做题了,我还在审题,最后还是没看懂

TA的精华主题

TA的得分主题

发表于 2019-10-21 11:34 | 显示全部楼层
大神们脑袋瓜子真是聪明,我也要学,看上去顺眼多了=SUM(IFERROR(N(INDIRECT("b"&MATCH("*洲"&T(INDIRECT(TEXT(SMALL(ROW($2:$4)/1%+COLUMN($E:$H),ROW($1:$12)),"r0c00"),))&TRANSPOSE(CHAR(SMALL(CODE(T(IF({1},OFFSET(E$12:F$12,ROW(A1)*4-3,,3)))),ROW($1:$6))))&"市*",A:A,))),))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-21 14:41 | 显示全部楼层
首先感谢众位老师参与此帖!

        此帖本意是让大家用内存数组来解题,对应帖子名称。
        我最初的思路就是SUMIF(判断区域,条件,求和区域),在SUMIF的二参上面做文章,也就是构建内存数组:大洲+国家+城市,形成一个12行12列的内存数组,来作为SUMIF的二参。
        但由于经验不足,致使数据内容有多处漏洞。所以帖子刚放上来没一会,那些漏洞就被我走我流、轩檐和jisijie630三位老师的敏锐目光发现,秒杀!于是修改1次,重新上传,但依然还有漏洞,又被jisijie630和杨老师发现,秒杀!

       憋屈呀!就好比两军对垒,两将PK,一方还没来得及通报姓名,就被斩于马下。于是重整旗鼓,再修改一次上传。终于把漏洞堵死了(自以为是),一切似乎步入正轨。

        以下按回帖顺序:

果仁老师目光如电,竟然从杂乱无章的数据中再次找到规律,抽丝剥茧,写出公式,厉害!388字符
=SUM(IFERROR(N(INDIRECT("b"&FIND(TRANSPOSE(CHAR(SMALL(CODE(T(IF({1},OFFSET(E$12:F$12,ROW(A1)*4-3,,3)))),ROW($1:$6)))),MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A$2:A$13,"洲C",),"洲K",),"洲A",),FIND("洲",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A$2:A$13,"洲C",),"洲K",),"洲A",)),ABS(MMULT(IFERROR(FIND({"洲","市"},SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A$2:A$13,"洲C",),"洲K",),"洲A",)),),{-1;1}))+3))^0*ROW($2:$13))),))

dipperrrr老师最初没用SUMIF,而是用VLOOKUP,至今我的电脑还是显示不正确(跟轩檐老师同样情况)170字符
=SUM(IFNA(VLOOKUP("*洲"&INDEX(E$2:H$4,INT((MOD(ROW($1:$12)-1,12)+4)/4),MOD(ROW($4:$15),4)+1)&INDEX(OFFSET(E$9:F$11,ROW(A1)*4,,),{1,1,2,2,3,3},{1,2,1,2,1,2})&"*",A:B,2,),))  (其中最关键的是"*洲",这个字节在后面起到重要作用)

满版思路奇特,这个SUBSTITUTE用法巧妙,至今未能消化。公式正确!(稍有投机之嫌:)。196字符
=SUM(SUMIF(A:A,"*"&TRIM(MID(SUBSTITUTE(CONCAT(SUBSTITUTE("/"&F$6:F$9,"/",0&E$6:E$9)),0,REPT(" ",99)),COLUMN(A:P)*99,99))&CHAR(SMALL(CODE(OFFSET(E$13:F$15,SUM(ROW(A1)*4-4),)),ROW($1:$6)))&"*",B:B))

我走我流老师的VLOOKUP用的神乎其神!公式正确,259字符(我改了2次数据,还是没把陈哥逼到SUMIF上  :)
=SUM(IFNA(VLOOKUP(T(IF({1},"洲*"&OFFSET(E$13,MAX(ROW(A1)-1)*4,,3,2)&"市*")),IF({1,0},SUBSTITUTE(MID(A$2:A$13,SEARCH("洲"&T(INDIRECT(TEXT(SMALL(IF($E$2:$H$4<>"",COLUMN($E:$H)+ROW($2:$4)/1%),ROW($1:$12)),"R0C00"),))&"?市*",A$2:A$13),99),"市","市市",1),B$2:B$13),2,),))

杨老师用了这个规律"洲",不用再去[大洲区]调取数据,使得公式大大缩短,正确,213字符。
=SUM(ISNUMBER(FIND(INDEX("洲"&T(OFFSET(E$1,ROW($4:$15)/4,MOD(ROW($1:$12),4)))&T(OFFSET(D$13,ROW(A1)*4-{2,2,3,3,4,4},{1,2,1,2,1,2})),N(IF({1},COLUMN(F:BY)/6)),N(IF({1},MOD(COLUMN(A:BT)-1,6)+1))),A$2:A$13))*B$2:B$13)

dipperrrr老师终于把公式改成我这里通用的了,且换用SUMIF求值,公式最短,结果正确!131字符
=SUM(SUMIF(A:A,"*洲"&T(OFFSET(E$1,ROW($4:$15)/4,MOD(ROW($1:$12),4)))&T(OFFSET(D$12,ROW(A1)*4-{1,1,2,2,3,3},{1,2,1,2,1,2}))&"*",B:B))

M老师第一个公式正确,225字符。第二个公式并列最短!131字符(1楼把M老师划进不能先贴答案的队伍是对的)
公式1 =SUM(SUMIF(A:A,"*"&TRIM(MID(E$6:E$9&SUBSTITUTE(F$6:F$9&"/1/1/1","/",REPT(" ",33)&E$6:E$9),INT(COLUMN(F:AI)/6)*33-32,33))&T(OFFSET(E$13,ROW(A1)*4-4+MID(REPT(0&12,10),COLUMN(A:AD),1),MID(REPT(0&1,15),COLUMN(A:AD),1)))&"*",B:B))

公式2 =SUM(SUMIF(A:A,"*洲"&T(OFFSET(E$1,ROW($4:$15)/4,MOD(ROW($4:$15),4)))&T(OFFSET(E$13,ROW(A1)*4-{4,4,3,3,2,2},{0,1,0,1,0,1}))&"*",B:B))

果仁老师卷土重来,INDIRECT用的好,公式正确!(也有投机之嫌  :)214字符
=SUM(IFERROR(N(INDIRECT("b"&MATCH("*洲"&T(INDIRECT(TEXT(SMALL(ROW($2:$4)/1%+COLUMN($E:$H),ROW($1:$12)),"r0c00"),))&TRANSPOSE(CHAR(SMALL(CODE(T(IF({1},OFFSET(E$12:F$12,ROW(A1)*4-3,,3)))),ROW($1:$6))))&"市*",A:A,))),))

惭愧的很,我的原公式234字符,不过是按部就班来的,没有取巧。如果也用"洲"字定位,可以缩到147字符,不改了吧。
=SUM(SUMIF(A:A,"*"&T(OFFSET(E$5,MATCH("*"&T(OFFSET(E$1,ROW($4:$15)/4,MOD(ROW($4:$15),4)))&"*",F$6:F$9,),))&T(OFFSET(E$1,ROW($4:$15)/4,MOD(ROW($4:$15),4)))&T(OFFSET(INDEX(D:D,MATCH(J14,D:D)),MOD(COLUMN(C:H),3),COLUMN(C:H)/3))&"*",B:B))

结论:
各位老师都比我厉害,我发帖竟然敢用“讨论”二字,下次坚决改为“求助”;
        如果下次,编好帖子后,要封存几天酝酿一下,先想想有没有什么漏洞再发;
        如果下次,我就这样写数据:中东伊拉克巴格达市;北欧丹麦哥本哈根广场......



评分

10

查看全部评分

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

本版积分规则

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

GMT+8, 2024-4-30 21:41 , Processed in 0.039665 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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