更新 - 已通过以下方式解决:
=OR(ISNUMBER(SEARCH("225522",A2)),ISNUMBER(SEARCH("225522",A3)))
作为高级过滤条件。 我们的目标是在第二行找到225522,并将上面的行拉到上面,然后将行包含在225522中。
原始问题
我在Excel工作表上有几千行,每一行有一行标有USD的标题行。我需要过滤以查找所有225522行,但我需要在它上面加上美元。
示例:
USD
11111.222222.333
USD
11111.225522.333
USD
11111.222222.333
USD
11111.222222.333
USD
11111.225522.333
我可以过滤225522和usd,但这样就可以用222222对所有行进行不过滤,让我手动删除数千美元的行。它看起来像下面......
USD
USD
11111.225522.333
USD
USD
USD
11111.225522.333
但我需要它看起来像
USD
11111.225522.333
USD
11111.225522.333
有没有办法过滤225522并保持它上面的行来实现上面的例子?
答案 0 :(得分:1)
使用具有以下公式条件的高级过滤器:
=OR(ISNUMBER(SEARCH("225522",A2)),ISNUMBER(SEARCH("225522",A3)))
其中A2是相关列中的第一行数据,A3是第二行。
答案 1 :(得分:0)
这可能适合您的过滤器定义,也可能不适合。
在工作表的未使用部分或新工作表中使用以下公式,假设您的数据在A3:A2003范围内
=AGGREGATE(15,6,ROW($A$3:$A$2003)/ISNUMBER(SEARCH("22522",$A$3:$A$2003)),ROW(A1))
这将生成符合您条件的行号列表。你现在想做的是有ROW(A1),每两行被复制下来增加1。然后你会想要一个if语句,这样如果ROW(A1)是奇数,你使用行号-1来获得你的USD。即使你只留下行号。现在将其与INDEX联系起来,您将生成您正在寻找的列表。
所以要让它计算每增加1的第二行,我们可以使用类似的东西:
=INT((ROW(A1)+1)/2)
这会将我们的公式变为:
=AGGREGATE(15,6,ROW($A$3:$A$2003)/ISNUMBER(SEARCH("22522",$A$3:$A$2003)),INT((ROW(A1)+1)/2))
为了得到我们的-1到行号,我们可以包含类似的东西:
=-ISODD(ROW(A1))
将其纳入上一个公式将导致:
=AGGREGATE(15,6,ROW($A$3:$A$2003)/ISNUMBER(SEARCH("22522",$A$3:$A$2003)),INT((ROW(A1)+1)/2))-ISODD(ROW(A1))
以上也可以用if语句实现,但我决定采取捷径。
最后一步是将其纳入INDEX公式。最终看起来像:
=INDEX($A:$A,AGGREGATE(15,6,ROW($A$3:$A$2003)/ISNUMBER(SEARCH("22522",$A$3:$A$2003)),INT((ROW(A1)+1)/2))-ISODD(ROW(A1)))
现在你有了这个公式,你只需要将它复制到你需要的位置。当你用完了可接受的行时,它会开始喷出错误。
或者,您可以将其设置为在出现错误时显示“”/使用以下内容用尽行:
=IFERROR(INDEX($A:$A,AGGREGATE(15,6,ROW($A$3:$A$2003)/ISNUMBER(SEARCH("22522",$A$3:$A$2003)),INT((ROW(A1)+1)/2))-ISODD(ROW(A1))),"")
回退到这个方法是它执行数组计算。因此,您应该将其使用限制在定义的范围内,而不是AGGREGATE函数中的完整列引用。已经说过评论中列出的高级过滤器选项看起来要简单得多,而且可能要快得多。
由于您需要拉出多列,我会调整公式的INDEX部分。现在假设您的标准列(225522所在的列)是F列,我将按如下方式修改您的公式:
=IFERROR(INDEX($F:$F,AGGREGATE(15,6,ROW($F$2:$F$4401)/ISNUMBER(SEARCH("225222",$F$2:$F$4401)),INT((ROW(A1)+1)/2))-ISODD(ROW(A1))),"")
现在,为了返回同一行但不同的列,有两种方法可以解决这个问题。将$ F:$ F更改为要返回的每列的相应列,或将范围从F:F更改为F:P并添加列引用到索引。如果11列并排,则以下方法有效。另外,您要么必须指定涵盖范围的手动列引用,要么使用匹配函数来匹配相同范围内的列标题。
=IFERROR(INDEX($F:$P,AGGREGATE(15,6,ROW($F$2:$F$4401)/ISNUMBER(SEARCH("225222",$F$2:$F$4401)),INT((ROW(A1)+1)/2))-ISODD(ROW(A1)),COLUMN(A1)),"")
你看到我使用A1与ROW()或COLUMN()的原因是我使用它作为一个从1开始的计数器。所以没有真正的伤害让它留在F1的行引用,因为它真的很重要行开始于1.相反,COLUMN(A1)实际上可以是A列中的任何行,因为我只对从1开始感兴趣。如果您必须手动索引,因为您的列不是并排的,请将COLUMN(A1)替换为一个整数,表示从索引范围中的第一个列引用开始的列号。因此,在F:P以上公式的情况下,从F开始计数。