ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5956|回复: 18

[Excel 函数与公式] 【85期】6列最多连续空行【已开贴】

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-2-9 09:30 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wcymiss 于 2012-3-18 20:57 编辑



对题意有任何不明白的地方,都请发消息给我,谢谢支持。

截止日期:2012-03-18  18:00

    注意:”题目“表里U5的公式,不做任何改动,直接复制到各个模拟表的U5单元格,得到的结果必须和各个模拟表的模拟结果一致。

思路可以参考:
1、开放式竞赛专区,lg_cai的主题帖;
2、开放式竞赛专区,wangg913的主题帖;
3、Excel进阶研讨区,willin2000的主题帖;

预设公式119字符。

本帖子中包含更多资源

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

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-2-16 11:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 chenhh803 于 2012-2-24 09:27 编辑

先来一个可以出结果的:
=MAX(MOD(LARGE(ROW(1:30)-RIGHT(SMALL(IF(A1:T30="",100,ROW(1:30))+COLUMN(A:T)*1000,TEXT(SUBTOTAL(3,OFFSET(A1,,COLUMN(A:T)-1,ROW(1:30))),"0;;30")+(COLUMN(A:T)-1)*30),2)+ROW(1:30)*100,ROW(1:30)*20-14),100))
2003:
=MAX(SMALL(ROW(1:30)*101-RIGHT(SMALL(IF(A1:T30="",100,ROW(1:30))+COLUMN(A:T)/1%,TEXT(SUBTOTAL(3,OFFSET(A1,,COLUMN(A:T)-1,ROW(1:30))),"0;;30")+COLUMN(A:T)*30-30),2),ROW(1:30)*20-5)-ROW(1:30)/1%)

=MAX(MOD(SMALL(ROW(1:30)*101-INT(LOG(MMULT(--(ROW(1:30)>=COLUMN(A:AD)),1000^((A1:T30<>"")*ROW(1:30))))/3),ROW(1:30)*20-5),100))

=MAX(MOD(SMALL(ROW(1:30)*101-INT(LOG(MMULT(--(ROW(2:31)>COLUMN(A:AD)),100^((A1:T30<>"")*ROW(1:30))))/2),ROW(1:30)*20-5),100))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-2-17 10:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
177字符:
  1. =MAX((MMULT(N(SUBTOTAL(3,OFFSET(A1,ROW(1:900)/30.1,COLUMN(A:T)-1,MOD(ROW(30:929),30)+1))=0),ROW(1:20)^0)>5)*INT((MOD(ROW(30:929),30)<=30-ROW(1:900)/30.1)*MOD(ROW(30:929),30)+1))
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-2-18 20:22 | 显示全部楼层
做了一个计算指定了6列的公式,先发个,再想想
=MAX(IF(MMULT(IF(ROW(1:30)<COLUMN(A:AD),0,1),IF(D1:D30&H1:H30&I1:I30&Q1:Q30&R1:R30&S1:S30="",1)*IF(ROW(1:30)<COLUMN(A:AD),0,1))=(ROW(1:30)-COLUMN(A:AD)+1),ROW(1:30)-COLUMN(A:AD)+1,0))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-2-19 08:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 fugb-2010 于 2012-3-3 09:21 编辑

太难!前三天无法从何入手
解法1
=MAX((MMULT(--ISNUMBER(FIND(REPT(2,MOD(ROW(1:900)-1,30)+1),MID(MMULT(1^COLUMN(A:O),2^(A16:T30="")*10^ROW(1:15))/10&MMULT(1^COLUMN(A:O),2^(A1:T15="")*10^ROW(1:15))/10,INT((ROW(1:900)-1)/30)+1,MOD(ROW(1:900)-1,30)+1))),1^ROW(1:20))>5)*(MOD(ROW(1:900)-1,30)+1))
解法2
=MAX((MMULT(N(SUBTOTAL(3,OFFSET(A1,INT((ROW(1:900)-1)/30),COLUMN(A:T)-1,MOD(ROW(1:900),INT(31-ROW(1:900)/30))+1))=0),1^ROW(1:20))>5)*(MOD(ROW(1:900),INT(31-ROW(1:900)/30))+1))

解法1
解题思路:
数据A
    分别每列非空及空白单元格以所在行位置组成30个字符串,1表示非空,2表示空白
=MMULT(1^COLUMN(A:O),2^(A16:T30="")*10^ROW(1:15))/10&MMULT(1^COLUMN(A:O),2^(A1:T15="")*10^ROW(1:15))/10
数据B
1~30行对数据A从第1个字符开始分别截取1~30个字符
31~60行对数据A从第2个字符开始分别截取1~30个字符
……
871~900行对数据A从第30个字符开始分别截取1~30个字符
=MID(数据A,INT((ROW(1:900)-1)/30)+1,MOD(ROW(1:900)-1,30)+1)
数据C
数据B字符串与设计的字符REPT(2,MOD(ROW(1:900)-1,30)+1)比对,为真则全为空,其长度为MOD(ROW(1:900)-1,30)+1
=(MMULT(--ISNUMBER(FIND(REPT(2,MOD(ROW(1:900)-1,30)+1),MID(数据B)),1^ROW(1:20))>5)*(MOD(ROW(1:900)-1,30)+1)

解法2
解题思路:
数据A
从第1行数据开始分别至第1~30行结束,分别形成30个平面数据
从第2行数据开始分别至第2~30行结束,分别形成30个平面数据,其中有2个平面数据重复
……
从第29行数据开始分别至第29~30行结束,分别形成30个平面数据,其中有29个平面数据重复
从第30行数据开始分别至第30~30行结束,分别形成30个平面数据,其中有30个平面数据重复
使用OFFSET函数,分别以INT((ROW(1:900)-1)/30)作为行起点,再分别以MOD(ROW(1:900),INT(31-ROW(1:900)/30))+1作为行数,共形成900个平面
=OFFSET(A1,INT((ROW(1:900)-1)/30),COLUMN(A:T)-1,MOD(ROW(1:900),INT(31-ROW(1:900)/30))+1)
数据B
使用SUBTOTAL函数,分别对900个平面进行非空统计,形成900行数据,每行代表1个平面,同时也代表行数
每行数据数字为0时,则表示行数内数据均为空,900行数字每行中为0数大于5时则以1表示
=N(MMULT(N(SUBTOTAL(3,数据A)=0),1^ROW(1:20))>5)
数据C
=(数据B*行数)
=(数据B*(MOD(ROW(1:900),INT(31-ROW(1:900)/30))+1))
附件中已设定条件格式




本帖子中包含更多资源

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

x

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-2-22 15:32 | 显示全部楼层
本帖最后由 chunlin1wang 于 2012-2-26 11:43 编辑

先前的有点小问题,删了,199字符
  1. =MAX(INDEX(MMULT(N(COUNTIF(OFFSET(A1,INT((ROW(1:900)-1)/30),COLUMN(A:T)-1,MOD(ROW(1:900)-1,30)+1),"<>")=0),ROW(1:20)^0)>5,N(IF(1,ROW(1:30)+COLUMN(A:AD)*30-30)))*(ROW(1:30)+COLUMN(A:AD)<32)*ROW(1:30))
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-2-27 14:17 | 显示全部楼层
本帖最后由 swyrlbq 于 2012-3-17 09:06 编辑

好难的题!头都搞晕了,先上一个:
=MAX(MOD(LARGE(ROW(1:620)-LOOKUP(ROW(1:620),IF(FREQUENCY(IF((A1:T31<>"")+(ROW(1:31)=31),ROW(1:31)+(COLUMN(A:T)-1)*31,),ROW(1:620)-1),ROW(1:621)-1,""),ROW(1:621)-1)+MOD(ROW(1:620),31)*100,(ROW(1:30)-1)*20+6),100))


186字符
=MAX(MOD(LARGE(ROW(1:620)-LOOKUP(ROW(1:620),IF(FREQUENCY(((ROW(1:31)=31)+(A1:T31<>""))*(ROW(1:31)+COLUMN(A:T)*31),ROW(31:650)),ROW(1:621)-1))+MOD(ROW(1:620),31)/1%,ROW(1:30)*20-14),100))


166字符
=MAX(MOD(LARGE(ROW(1:620)-LOOKUP(ROW(1:620),SMALL(((ROW(1:31)=31)+(A1:T31<>""))*ROW(1:31)+(COLUMN(A:T)-1)*31,ROW(1:620)))+MOD(ROW(1:620),31)/1%,ROW(1:30)*20-14),100))



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-2-29 08:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. =MAX(MOD(LARGE(ROW(1:30)-MOD(LOOKUP(ROW(1:30)+COLUMN(A:T)/1%,SMALL((A1:T30<>"")*ROW(1:30)+COLUMN(A:T)/1%,ROW(1:600))),100)+ROW(1:30)/1%,6+(ROW(1:30)-1)*20),100))
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-3-8 14:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 CheryBTL 于 2012-3-8 15:46 编辑

关注很久了,一直没有想到怎么在30组数据中提取6组,并确定最大连续的空格:
=MAX(FREQUENCY(ROW(1:30),IF(MMULT(N(A1:F30=""),ROW(1:6)^0)<6,ROW(1:30))))-1
这几天看了吴组的提示,好象有点思路:
主要就是wangg913老师的监控“异常”情况连续统计 如果从第一行到第30行,统计第6大连续为空的值,最后再提取这三十个值中的最大值。
感觉这样才能精简思路和代码长度,不知道这条路能不能走的通,这两天再仔细推敲下这个思路。
经过下午的考虑,思路再重新描述下:
1、用OFFSET(A1:T1,,,ROW(1:30),)分别得到1、1:2、1:3、...、1:30行的源数据区域
2、用wangg913老师贴子的办法,得到当前行出现连续为空的序列,并提取第6大值
3、对第2步30个数组取最大值。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-3-11 14:16 | 显示全部楼层
  1. =MAX((MMULT(N(COUNTIF(OFFSET(INDEX(A:A,ROW(1:30)),,COLUMN(A:T)-1,-ROW(INDIRECT("1:"&ROW(1:30)))),"")=ROW(INDIRECT("1:"&ROW(1:30)))),ROW(1:20)^0)>5)*ROW(INDIRECT("1:"&ROW(1:30))))
复制代码
只有178个字符,本以为这个公式一定得出最终答案,没想只能用来做辅助列{:soso_e118:}
想着再加函数提取出答案,但一加函数就超出嵌套层数了,不符合楼主的2007或2003的要求了
想破了头,也不知如何往下做了,先把它贴这里,待高手帮解答下,

本帖子中包含更多资源

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

x

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-12-4 01:04 , Processed in 0.037767 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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