如何在Excel-2010中的 if()语句中使用 row()函数来返回行号(如果值为 true 的话)。 如果我可以通过其他方法完成同样的工作,也将不胜感激。 工作是:我在多行的单列中有一系列数据,条件是“如果数据值大于50”,则我必须在另一列中打印所有所需的数据,并将每个数据单独打印行。
如果使用 row()和 if()函数可以实现,那么可以,也可以邀请其他任何方法。
答案 0 :(得分:0)
我不确定我是否能正确完成任务,但请尝试一下。假设您在单元格A2:A20
中有一些随机数。您可以通过在Windows上按C2:C20
来选择单元格Ctrl+Shift+Enter
并输入 多个单元格数组公式 :
=IFERROR(INDEX($A$2:$A$20,SMALL(IF($A$2:$A$20>50,ROW($A$2:$A$20),"-"),ROW()-ROW($C$1))-ROW($A$1)),"")
这将检查那些数字是否大于50,并仅打印相关数字。范围,您在其中输入此公式的大小必须至少等于您“过滤”的范围。
UPD:那么,它如何工作?
阶段1 -过滤:
$A$2:$A$20>50
在数组公式中,此代码将根据> 50次检查将您的值转换为 True 和 False 的有序(重要)数组。例如,如果您有一个值为{55,10,40,51,49,89}
的表,它们将变成{True,False,False,True,False,True}
阶段2 -价值分离和排名
IF( [Stage 1] ,ROW($A$2:$A$20),"-")
此 IF 语句基于正确/错误检查,返回元素的位置或字符串值“-”。位置与工作表相关,而不与值相关-稍后将很重要。因此,现在我们处理通过检查的元素的位置数组以及所有其他元素的一些字符串值。
第3阶段-重新排列排名
SMALL( [Stage 2] ,ROW()-ROW($C$1))-ROW($A$1)
SMALL 功能有助于我们重新排序从STAGE 3获得的头寸。因此,我们将{2,"-","-",5,"-",7}
之类的有序数组转换为{2,5,7,"#NUM!","#NUM!","#NUM!"}
。错误告诉我们,我们尝试对字符串执行一些数字操作。这正是我们需要将无关的值进行分类的条件。返回的值为ROW()-ROW($C$1)
,通过该减法,我定义了从最小行开始为每行返回的数组编号。最后的减法-ROW($A$1)
将与工作表相关的位置{2,5,7,"#NUM!","#NUM!","#NUM!"}
转换为与表相关的位置{1,4,6,"#NUM!","#NUM!","#NUM!"}
阶段4 -返回初始值
INDEX($A$2:$A$20, [Stage 3] )
这是我认为最简单的部分。因此,我们具有与表相关的位置的数组。现在,我们可以使用 INDEX 函数将其转换为实际值。我们告诉该函数要查看的表以及要返回的行值。因此,我们的内存数组{1,4,6,"#NUM!","#NUM!","#NUM!"}
变成了类似{55,51,89,"#NUM!","#NUM!","#NUM!"}
的东西。这已经是我们想要的结果。由于我们使用了 多个单元格数组公式 -所有值都将分散在行中。
第5阶段-美观
=IFERROR( [Stage 4] ,"")
仅使错误值不可见。这是一个可选步骤,就像报表平滑而闪亮一样。