ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 设计一个范围内的求和函数公式?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 11:18 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 11:19 | 显示全部楼层
jisijie630 发表于 2023-3-21 18:48
D2:

=IF(A2,SUM(C2:C99)-SUM(D3:D99),"")

有循环错误

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 11:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-3-23 11:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lm3312 发表于 2023-3-23 11:09
您好,您给的这个公式不错,实用性很强,但请再次修改并满足一个条件
原条件:
1、自动汇总C列本行单元 ...

怎么判断再D5和D7要计算呢?
规则是什么或者说判断依据是什么?
请说明规则并举例。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 11:53 | 显示全部楼层
本帖最后由 lm3312 于 2023-3-23 11:54 编辑
象山海鲜 发表于 2023-3-23 11:31
怎么判断再D5和D7要计算呢?
规则是什么或者说判断依据是什么?
请说明规则并举例。

如果当前处于D2单元格的公式:不管D5是什么内容,只要D5有任意内容,则汇总结果为SUM(C2:C4),否则汇总结果为SUM(C2:C65536)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-23 13:26 | 显示全部楼层
问了一下GPT,仍没有解决,而且GPT设计的IF()函数总是多了一个参数,这个错误还老是改不过来。

  1. 【提问】
  2. 2003版EXCEL工作表中,在D列设计一个对C列单元格的求和公式,公式适合D列任意一个单元格,比如,当前公式所在的单元格是D2,则汇总条件是:如果D列的下一个单元格有内容,比如D5单元格有内容,则汇总结果为SUM(D2:D4),否则,汇总结果为SUM(D2:D65536)

  3. 【回答】
  4. 可以使用以下公式来实现您的需求:

  5. =SUM(D2:INDIRECT(IF(ISBLANK(D3),"$D$65536",ADDRESS(MATCH(TRUE,NOT(ISBLANK(D3:$D$65536))),4))))

  6. 这个公式使用了INDIRECT函数和ADDRESS函数来动态计算汇总范围的结束单元格。具体来说,这个公式会检查D列下一个单元格是否为空。如果不为空,它会使用MATCH函数和ADDRESS函数来获取D列下一个非空单元格的地址,并将其作为汇总范围的结束单元格。如果为空,它会将结束单元格设置为D列的最后一行(65536行)。
  7. 需要注意的是,这个公式是针对Excel 2003版本的,因为该版本的行数最大为65536行。如果您使用的是Excel 2007及以后的版本,行数已经扩展到1048576行,因此需要将公式中的行数修改为1048576。

  8. 【提问】
  9. 这个公式有错误,虽然对汇总的行范围作出了判断,但是汇总数据在C列,你的公式没有涉及C列的内容

  10. 【回答】
  11. 非常抱歉,我理解错误了您的需求。以下是一个新的公式,可以实现您的要求:

  12. =SUM(OFFSET(C2,0,0,IF(ISBLANK(D3),65536-ROW(D2)+1,MATCH(TRUE,NOT(ISBLANK(D3:$D$1048576))),0)-ROW(C2),1))

  13. 这个公式使用了OFFSET函数和IF函数来动态计算要求和的单元格范围。具体来说,这个公式会检查D列下一个单元格是否为空,如果不为空,则使用MATCH函数来获取D列下一个非空单元格的行号,然后使用IF函数计算要汇总的行数。如果为空,则使用ROW函数和常量65536来计算要汇总的行数。最后,使用OFFSET函数来获取要求和的单元格范围。
  14. 需要注意的是,这个公式是针对Excel 2003及以后的版本,因为该版本的行数最大为1048576行。如果您使用的是Excel 2003版本,需要将公式中的行数修改为65536。同时,这个公式假设要求和的单元格范围是C列中当前单元格以下的所有单元格。如果要求和的单元格范围不同,请根据实际情况修改公式中的单元格引用。

  15. 【提问】
  16. 这个公式错误,IF()函数多了一个参数,请重新设计

  17. 【回答】
  18. 非常抱歉,我的回答有误。感谢您的指正。以下是一个修正后的公式,可以实现您的需求:

  19. =SUM(C2:INDEX(C:C,IF(ISBLANK(D3),65536,MIN(ROW(D:D)-ROW(D2)-1))+1))

  20. 这个公式使用了INDEX函数和MIN函数来动态计算求和范围的结束单元格。具体来说,这个公式会检查D列下一个单元格是否为空,如果不为空,则使用MIN函数和ROW函数计算D列下一个非空单元格的行号,然后使用INDEX函数获取C列中该行的单元格。如果为空,则使用常量65536作为结束行号。最后,将求和范围设置为C2到动态计算的结束单元格。
  21. 需要注意的是,这个公式假设要求和的单元格范围是C列中当前单元格以下的所有单元格。如果要求和的单元格范围不同,请根据实际情况修改公式中的单元格引用。

  22. 【提问】
  23. 这个公式仍有错误,显示“#REF!”的错误结果

  24. 【回答】
  25. 非常抱歉,我的回答还有误。感谢您的指正。以下是一个修正后的公式,可以实现您的需求:

  26. =SUM(C2:INDEX(C2:C1048576,IF(ISBLANK(D3),1048576-ROW(D2)+1,MATCH(TRUE,NOT(ISBLANK(D3:$D$1048576))),0)-1))

  27. 这个公式使用了INDEX函数和MATCH函数来动态计算求和范围的结束行号。具体来说,这个公式会检查D列下一个单元格是否为空,如果不为空,则使用MATCH函数和NOT函数来获取D列下一个非空单元格的行号,然后使用IF函数计算要汇总的行数。如果为空,则使用ROW函数和常量1048576来计算要汇总的行数。最后,使用INDEX函数来获取求和范围。需要注意的是,这个公式假设要求和的单元格范围是C列中当前单元格以下的所有单元格。如果要求和的单元格范围不同,请根据实际情况修改公式中的单元格引用。

  28. 【提问】
  29. 这个公式跟前面的一个犯了同样的错误,IF()函数多了一个参数

  30. 【回答】
  31. 非常抱歉,我的回答还有误。感谢您的指正。以下是一个修正后的公式,可以实现您的需求:

  32. =SUM(C2:INDEX(C:C,IF(ISBLANK(D3),ROWS(C:C)-ROW(C2)+1,MATCH(TRUE,NOT(ISBLANK(D3:$D$1048576))),0)+ROW(C2)-1))

  33. 这个公式使用了INDEX函数和MATCH函数来动态计算求和范围的结束行号。具体来说,这个公式会检查D列下一个单元格是否为空,如果不为空,则使用MATCH函数和NOT函数来获取D列下一个非空单元格的行号,然后使用IF函数计算要汇总的行数。如果为空,则使用ROWS函数和ROW函数计算要汇总的行数。最后,使用INDEX函数来获取求和范围。需要注意的是,这个公式假设要求和的单元格范围是C列中当前单元格以下的所有单元格。如果要求和的单元格范围不同,请根据实际情况修改公式中的单元格引用。

  34. 【提问】
  35. 仍然错误,这个公式中的IF()函数多了一个参数

  36. 【回答】
  37. 非常抱歉,我的回答还有误。感谢您的指正。以下是一个修正后的公式,可以实现您的需求:

  38. =SUM(C2:INDEX(C:C,IF(ISBLANK(D3),ROWS(C:C)-ROW(C2)+1,MATCH(TRUE,NOT(ISBLANK(D3:$D$1048576))),ROWS(C:C)-ROW(C2)+1)))

  39. 这个公式使用了INDEX函数和MATCH函数来动态计算求和范围的结束行号。具体来说,这个公式会检查D列下一个单元格是否为空,如果不为空,则使用MATCH函数和NOT函数来获取D列下一个非空单元格的行号,然后使用IF函数计算要汇总的行数。如果为空,则使用ROWS函数和ROW函数计算要汇总的行数。最后,使用INDEX函数来获取求和范围。需要注意的是,这个公式假设要求和的单元格范围是C列中当前单元格以下的所有单元格。如果要求和的单元格范围不同,请根据实际情况修改公式中的单元格引用。

  40. 【提问】
  41. 还是同样错误,这个公式中的IF()函数多了一个参数

  42. 【回答】
  43. 非常抱歉,我的回答还有误。感谢您的指正。以下是一个修正后的公式,可以实现您的需求:

  44. =SUM(C2:INDEX(C:C,IF(ISBLANK(D3),ROWS(C:C)-ROW(C2)+1,MATCH(TRUE,NOT(ISBLANK(D3:$D$1048576))),ROWS(C:C)-ROW(C2)+2)))

  45. 这个公式使用了INDEX函数和MATCH函数来动态计算求和范围的结束行号。具体来说,这个公式会检查D列下一个单元格是否为空,如果不为空,则使用MATCH函数和NOT函数来获取D列下一个非空单元格的行号,然后使用IF函数计算要汇总的行数。如果为空,则使用ROWS函数和ROW函数计算要汇总的行数,并且需要将结果加1,以便包含当前行。最后,使用INDEX函数来获取求和范围。需要注意的是,这个公式假设要求和的单元格范围是C列中当前单元格以下的所有单元格。如果要求和的单元格范围不同,请根据实际情况修改公式中的单元格引用。
复制代码


TA的精华主题

TA的得分主题

发表于 2023-3-24 14:46 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-27 19:30 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-28 05:34 , Processed in 0.041718 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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