ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] excel不同行数自动统计最大最小值的写法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-4-4 11:02 | 显示全部楼层 |阅读模式
本帖最后由 chengsijing 于 2023-4-4 11:04 编辑

假设要统计B/C/D列 的最大最小值(数值从第4行开始,末行每次刷新不固定,这次是14行,因为第4行开始,所以实际行数是17),
我们一般写公式 =MAX(B4:B17),但由于数据刷新,下次不一定是14行,所以公式要修改。为了通用,我E1单元格写了公式:=COUNTA(A:A) ,用于自动统计有值的单元格行数数量,然后求最大值的那里代码改为:=MAX(INDIRECT("b4:b"&$E$1)) 。这样当行数变化的时候,max都可以自动统计范围内的值。

新的问题来了,当我想C/D列都这样的时候,我从B2列拖动公式到C2/D2,里面的公式值不变,还是=MAX(INDIRECT("b4:b"&$E$1))和=MAX(INDIRECT("b4:b"&$E$1))。我要手动改为=MAX(INDIRECT("C4:C"&$E$1))及=MAX(INDIRECT("D4:D"&$E$1))。因为双引号把"B5:B"当作字符了,拖动的时候不会自动改变。
请问有更好的方法自动根据行数的变化,max函数自动有效吗?
我有很多这样的列,我想写一个公式,拉动的时候自动更新,不用我手工去修改代码

不同行数自动统计最大最小值.zip

7.57 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2023-4-4 11:16 | 显示全部楼层
无需那么复杂把,插入表格就可以实现。效果如图:


dt.gif

TA的精华主题

TA的得分主题

发表于 2023-4-4 12:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
B1//下拉一格//右拉
=SUBTOTAL(6-ROW(A1),B$4:INDEX(B:B,MATCH(9E+307,$A:$A)))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-4-5 23:37 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-6 07:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
十分感谢,我马上试试

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-6 07:46 | 显示全部楼层
MissMist 发表于 2023-4-5 23:37
=MAX(B4:INDIRECT(ADDRESS($E$1,COLUMN(),4)))

=MAX(B4:INDIRECT(ADDRESS($E$1,COLUMN(),4)))
=ADDRESS($E$1,COLUMN(),4) 是取得 该列字母及$E$1的值。
INDIRECT()转成字母。
这个容易理解。十分感谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-6 08:01 | 显示全部楼层
MissMist 发表于 2023-4-5 23:37
=MAX(B4:INDIRECT(ADDRESS($E$1,COLUMN(),4)))

=MAX(B4:INDIRECT(ADDRESS($E$1,COLUMN(),4)))  是基于我有一个单元格记录该行最大行数的公式写法。
有没有更进一步,公式不需要这个算出来的最大值,直接全部用函数算出来?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-6 08:15 | 显示全部楼层
本帖最后由 chengsijing 于 2023-4-6 08:17 编辑
准提部林 发表于 2023-4-4 12:07
B1//下拉一格//右拉
=SUBTOTAL(6-ROW(A1),B$4:INDEX(B:B,MATCH(9E+307,$A:$A)))
同样十分感谢。
右拉变成:=SUBTOTAL(6-ROW(B1),C$4:INDEX(C:C,MATCH(9E+307,$A:$A)))
下拉变成:=SUBTOTAL(6-ROW(A2),B$4:INDEX(B:B,MATCH(9E+307,$A:$A)))
功能都成功,就是我不太理解。好像这个牛B在于不需要预设最大行数。但是对相对位置有要求,不然回出错

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-6 08:42 | 显示全部楼层
我结合2位高手的写法,写出自己理解,不需要最大值辅助的动态行数,统计公式的又可以随意拉动的写法。
=MIN(B7:INDEX(B:B,MATCH(9E+307,$B:$B)))
INDEX(B:B,MATCH(9E+307,$B:$B)) 的意思是求得该列最后有效值的最大行数(前面行数都清空都不影响)
即如果在B列17行有一个非空值,那么INDEX(B:B,MATCH(9E+307,$B:$B)) =B17
=MIN(B4:INDEX(B:B,MATCH(9E+307,$B:$B))) = =MIN(B4:B17)的效果,支持左右拉,该列任意位置都有效。而且不需要先计算有最大行数值辅助。
不知道是否还有更简便,尤其是计算速度最快的写法。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-6 08:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
准提部林 发表于 2023-4-4 12:07
B1//下拉一格//右拉
=SUBTOTAL(6-ROW(A1),B$4:INDEX(B:B,MATCH(9E+307,$A:$A)))

=SUBTOTAL(6-ROW(A1),B$4:INDEX(B:B,MATCH(9E+307,$A:$A)))
不知道我理解的对不对。
INDEX(B:B,MATCH(9E+307,$A:$A))  相当于求得该列字母+A列最大行数
SUBTOTAL(5,B$4:b17)  的第一个参数5是求第二个参数的最小值。6-ROW(A2)=6-1=5
SUBTOTAL(4,B$4:b17)  的第一个参数4是求第二个参数的最大值。6-ROW(A2)=6-2=4
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 20:41 , Processed in 0.052988 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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