适用于旧版Excel(至少2010版)的动态+静态值数组拼接方案(替代HSTACK,无VBA)
适用于旧版Excel(至少2010版)的动态+静态值数组拼接方案(替代HSTACK,无VBA)
嘿,完全懂你的痛点——HSTACK在365里用着爽到飞起,但旧版Excel不支持,还不能碰VBA,确实得找个兼容的替代方案。别担心,咱们用Excel 2010早就支持的函数就能搞定!
核心思路:用CHOOSE模拟HSTACK的横向数组拼接
HSTACK的本质是把多个值/区域横向串联成一个数组,而CHOOSE函数刚好可以通过常量数组序号来实现这个效果,而且从Excel 2007就支持,2010完全没问题。
针对你给出的简化例子,原365公式是:
=SUMPRODUCT(CONCATENATE(HSTACK($A$1,"Const1","Const2","Const3"),"/",K$2)*1)
直接替换成CHOOSE版本就行:
=SUMPRODUCT(CONCATENATE(CHOOSE({1,2,3,4}, $A$1, "Const1", "Const2", "Const3"), "/", K$2)*1)
原理说明:
{1,2,3,4}是一个横向常量数组,代表要选取的参数序号;CHOOSE会按照这个序号数组,依次返回后面的$A$1、"Const1"、"Const2"、"Const3",最终生成和HSTACK完全一样的横向数组;- 剩下的
CONCATENATE和SUMPRODUCT逻辑完全不变,而且SUMPRODUCT本身能自动处理数组,不需要按Ctrl+Shift+Enter(三键输入)。
扩展:如果动态值是多个单元格的情况
要是你需要拼接的是多个动态单元格(比如A1:A3)加上静态值,只需要把CHOOSE的参数和序号数组对应好就行:
比如要把A1:A3 + "Const1" + "Const2"拼成数组,公式可以写成:
=SUMPRODUCT(CONCATENATE(CHOOSE({1,2,3,4,5}, A1, A2, A3, "Const1", "Const2"), "/", K$2)*1)
这里的{1,2,3,4,5}序号数量要和后面的参数总数完全匹配,别出错哦。
注意事项
- 序号数组的长度必须和
CHOOSE的参数数量一致,不然会返回错误值; - 如果你的公式不是用
SUMPRODUCT,而是其他需要数组运算的函数(比如SUM),那可能需要按Ctrl+Shift+Enter来触发数组计算; - 这个方法完全无VBA,纯原生函数,Excel 2010及以上版本都能稳定运行。
备注:内容来源于stack exchange,提问作者danicotra
相关产品推荐
相关产品推荐

