我有一张包含原始数据的 Excel 表,我想在另一个表中对其创建自定义视图以用于报告目的。
如何将以下伪代码翻译成Excel?
select ColA, ColB, ColC from SheetA where (SheetA.ColD in ("x","y","z") or SheetA.ColE in ("1","2","3"))
我正在寻找类似 VLOOKUP MATCH 和 INDEX 的解决方案。
答案1
从评论中复制:在 Excel 2010(和其他版本)中,您可以创建对 Excel 文件的查询。在数据功能区的“获取外部数据”部分(左侧)中,选择“来自其他来源”,然后选择“来自 Microsoft Query”。您应该已经为“Excel 文件”设置了数据源。之后,您可以在 MS Query 中构建一些可以工作的东西。
如果你真的想要一个公式化的回应,你将不得不处理一些麻烦。首先,最重要的一步是负载更简单的方法是向原始数据添加一个字段来处理该WHERE
语句。我将调用它ColF
,它的公式可能看起来像这样:
=SUM(IFERROR(MATCH([@ColD],x,0),0),IFERROR(MATCH([@ColD],y,0),0),IFERROR(MATCH([@ColD],z,0),0),IFERROR(MATCH([@ColE],range1,0),0),IFERROR(MATCH([@ColE],range2,0),0),IFERROR(MATCH([@ColE],range3,0),0))>0
对于自定义视图,您需要创建另一个表,该表的行数与原始表相同。除了ColA
、ColB
、之外,您可能还需要一个字段来帮助查找。您可以将公式放在每列内,但这只会毫无理由地膨胀,并会减慢计算速度。查找部分如下所示(请注意,它是使用+ +ColC
输入的数组公式):CTRL
ALT
ENTER
{=IFERROR(SMALL(IF(Table1[ColF],ROW(Table1[ColF])),ROW()-1),"")}
这将是原始数据中符合 中公式定义的条件的所有行号的列表ColF
。末尾会有一些空白。接下来的几个字段仅INDEX
基于Row
。
=IFERROR(INDEX(Table1[ColA],[@Row]-1),"")
=IFERROR(INDEX(Table1[ColB],[@Row]-1),"")
=IFERROR(INDEX(Table1[ColC],[@Row]-1),"")
这就是你的表格。你必须用你喜欢的任何方式处理底部的空白行。自动筛选就可以了。正如我之前指出的,你可以Row
通过让其他公式变成更长的数组公式来删除该字段:
{=IFERROR(INDEX(Table1[ColA],SMALL(IF(Table1[ColF],ROW(Table1[ColF])),ROW()-1)-1),"")}
...但这会使速度变慢。