从值表创建值列表,并排除某些值

时间:2018-09-29 08:56:08

标签: excel excel-formula

我有以下Excel电子表格:

    A            B       C        D        E              F                 G    
1                 Q1     Q2       Q3      Q4        Positive values
2   Asset 1      -50     85      -90      70             85 
3   Asset 2      -28    -80      -45      60             70         
4   Asset 3      -30     50       55     -10             60      
5   Asset 4      -20      5      -80     -15              :  
6   Asset 5       35    -30       27     -98              :
7                    

A1:E6单元中,我的资产与季度Q1-Q4相比具有不同的资产。

Column F中,我使用here中的公式创建资产所有正表现的列表:

Column F = {LARGE(IF($B$2:$E$6>0,B$2:$E$6),ROW(B1:E1))}

到目前为止,所有这些都工作正常。


但是,现在我想从Column F的列表中排除某些值。例如,我不希望数字85或数字70出现在列表中。因此,我尝试将公式修改为:

Column F = {LARGE(IF(AND($B$2:$E$6>0,$B$2:$E$6<>85,$B$2:$E$6<>70),B$2:$E$6),ROW(B1:E1))}

但是,现在我得到0了。

您是否知道可以解决此问题的公式?

3 个答案:

答案 0 :(得分:2)

  • 创建一个0的数组,其中0等于一个负数或排除的值

($B$2:$E$6>0)*($B$2:$E$6<>85)*($B$2:$E$6<>70)
  • 1 /(...将其转换为1和错误

  • 乘以原始值以创建原始值和错误的数组


 =1/(($B$2:$E$6>0)*($B$2:$E$6<>85)*($B$2:$E$6<>70)) * B2:E6
  • 使用聚合函数获取所需结果

=AGGREGATE(14,6,1/(($B$2:$E$6>0)*($B$2:$E$6<>85)*($B$2:$E$6<>70))*$B$2:$E$6,ROWS($1:1))

向下填充以获得最大的第二,第三等

答案 1 :(得分:1)

您在正确的道路上。代替使用AND,嵌套的IF将起作用。 您需要为要测试的每个新条件创建一个新的IF条件。 因此,如果要排除85和70,则需要添加两个附加的IF语句。

F列的公式为:

={LARGE(IF($B$2:$E$6>0,IF($B$2:$E$6<>85,IF($B$2:$E$6<>70,B$2:$E$6))),ROW(B1:E1))}

您可以在此处阅读公式的计算过程:Minimum if multiple criteria

答案 2 :(得分:1)

如果您在 F 列中有数据,并且想要将所有不是 70 85 的值提取到 G列中,然后在 G2 中输入:

halve :: [a] -> ([a], [a]) 
halve xs = 
    ((take s xs), (drop s xs))
    where
        s = (length xs ) `div` 2

并向下复制:

enter image description here

请注意,这种方法不需要使用数组公式。