LAMBDA中如果数组只有一行好像会出错

=-BYROW(B2#,LAMBDA(数量,INDEX(E:E,ROW(数量))/数量)) 这个公式如果B2#只有一行,则会#VALUE! 大佬知道是什么原因吗?
广东省
浏览 78
收藏
点赞
分享
+1
5
+1
全部评论 5
 
会飞的鱼
会飞的鱼

KVP函数专家、创作者俱乐部成员

另一个问题为什么如果B2#只有1行的时候会报错。 这是WPS的byrow和bycol函数的一个bug,只是这个bug只有很特殊的条件太会触发, 当byrow和bycol函数的第一个参数引用了一个单元格,函数就会报错,见图1。 解决方法其实也简单,把单元格属性去掉即可。 如果是数值进行+0或*1 或者 --的计算。(图2) 如果是文本 &"" (图3) 如果不确定是值或文件,使用vstack拼接下(图4) 虽然正常情况下,正常逻辑不会这样使用,但是这个bug还是不应该存在,既然已经知道了这个bug,后期官方一定会修复的。
· 辽宁省
1
回复
 
会飞的鱼
会飞的鱼

KVP函数专家、创作者俱乐部成员

我看了下您的公式,根据当前的公式来看,lambda中的计算公式【INDEX(E:E,ROW(数量))/数量】这部分来看,B2# 返回的应该是单列的数据,否则的话因为byrow函数里的lambda函数只能返回的单值,如果是多列index/数量返回的是数组,函数会报#CALC!的错误。 既然 B2#是单列的值,就不需要使用byrow函数计算每行的值,可将公式简化成 =-INDEX(E:E,ROW(B2#))/B2#
· 辽宁省
1
回复
 
晨あ星
晨あ星

WPS产品体验官

回答:你的公式报错核心原因是:当 B2# 仅包含一行数据时,ROW(数量) 的返回值类型发生了变化,具体逻辑如下: B2# 是动态数组(溢出范围),BYROW 会逐行处理其中的元素; 当 B2# 有多行时,ROW(数量) 返回的是单个数字(当前行的行号),INDEX(E:E, 数字) 能正常取值; 当 B2# 只有一行时,ROW(数量) 返回的是单元素数组(而非单个数字),INDEX(E:E, 数组) 会触发维度不匹配,最终报 #VALUE! 错误。 简单说:多行时 ROW(数量) 是 “标量”,单行时变成 “数组”,导致 INDEX 无法正常解析。
· 河南省
1
回复
晨あ星
晨あ星

WPS产品体验官

解决方案一:强制提取数组标量 =-BYROW(B2#,LAMBDA(数量,INDEX(E:E,@ROW(数量))/数量)) 解决方案二:使用SUM/MAX/MIN消解数组 =-BYROW(B2#,LAMBDA(数量,INDEX(E:E,SUM(ROW(数量)))/数量)) 避免除0错误,添加IFERROR兜底 =-BYROW(B2#,LAMBDA(数量,IFERROR(INDEX(E:E,@ROW(数量))/数量,""))) 你试试?
· 河南省
1
回复