首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Indirect函数的高级用法实例:按颜色求和

按颜色求和,算是一个老调重谈的Excel话题。方法常见的有3种

1、用查找颜色的方法。

2、自定义函数。需要写VBA代码。

3、宏表函数+SUMIF函数。添加辅助列用宏表函数get.cell提取每个单元格的颜色值,然后再用SUMIF函数求和。

第1种方法通用性差,第2种方法门槛高,而第3种方法更实用,但要添加辅助后再用SUMIF函数太麻烦。一直以来兰色很想对第3种方法进行简化,能不能不用辅助列,直接用公式计算出来。

在定义名称中试图用达宏表函数get.cell提取D2:E8区域中每个单元格的颜色值(63表示背景色)

=GET.CELL(63,Sheet2!$D$2:$E$8)

但结果只能提取选取区域的第1个格的颜色值。然后....就无法继续了

这个问题困扰兰色很多年,直到前两天脑海中突然灵光浮现。即然区域不行,把区域拆分成一个一个的是不是可以?

把一个区域拆分成若干个常用的函数有两个,一个是Offset,一个是Indirect。经过测试,indirect函数更适合。

不过接下来有点烧脑,没有函数基础的估计看起来有点吃力。因为这里要用到indirect的R1C1模式(第2个参数是0或FALSE)

=indirect("R行数C列数",0)

比如用=indirect("R1C1",0) 就可以把A1的值提取出来。

看似没有什么意义,但如果行数和列数都是一组值,就可以把一个区域拆分成苦干个独立的单元格。

=INDIRECT("r"&ROW(A1:B4)&"C"&COLUMN(A1:B4),0)

因为是多维引用,所以需要N函数(值为数字时)或T函数(值为文本时)查看结果。

=N(INDIRECT("r"&ROW(A1:B4)&"C"&COLUMN(A1:B4),0))

不过,在本例中不需要提取值,而是拆分成引用即可,所以也不需要用N函数。直接就可以用在宏表函数中。

=get.cell(63,INDIRECT("R"&ROW(D2:E8)&"C"&COLUMN(D2:E8),0))

单元格中输入=颜色求和 ,就可以提取所选区域所有单元格颜色值了。

这个关键难题搞定,就让它和指定的颜色值对比,然后就可以实现按颜色求和了。

选取颜色右边单元格,定义名称 Colsum

=SUM((GET.CELL(63,INDIRECT("R"&ROW($D$2:$E$8)&"C"&COLUMN($D$2:$E$8),0))=GET.CELL(63,$G2))*$D$2:$E$8)

定义名称后,在颜色单元格右侧输入=Colsum, 就可以按颜色求和了。而且源区域中数字发生改变,求和结果也会变。

只是修改颜色后,还需要双击任一个单元格后,求和结果才能改变。

如果你是OFF365版本,可以借助LAMBDA创建一个自定义函数,输入就很方便了。

=LAMBDA(A,B,SUM((GET.CELL(63,INDIRECT("R"&ROW(B)&"C"&COLUMN(B),0))=GET.CELL(63,A))*B))

在单元格使用很简单,输入以下公式即可按颜色求和

=Csum(颜色所在单元格,引用区域)

兰色说:很多同学一直想让兰色讲一下Indirect函数的高级用法,嘿嘿,本文只是其中一个用法,你看懂了吗?如果看不懂也没关系,直接套用即可。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230621A01Q4K00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券