首先,如果可能的话,我想在没有 VB的情况下执行,所以我不必经历教导收件人如何启用宏的麻烦。
现在,我相信我想做的事情很简单,但答案可能是复杂的公式。我正在尝试在新列中列出来自行中指定列的值,这些行具有来自两个其他列的匹配值。听起来很棘手我确定,但一个例子应该有很大的帮助...
说我有以下数据:
------------------
| sts | pos | bye |
------------------
| 0 | QB | 8 |
| 2 | WR | 3 |
| 2 | QB | 10 |
| 0 | QB | 4 |
| 2 | QB | 7 |
| 0 | WR | 11 |
| 2 | WR | 9 |
| 2 | QB | 5 |
------------------
这是我的来源。我想列出bye
的所有行中的sts = 2
值,对应每个pos
。换句话说,从上面的源数据我想看到以下结果集:
--------------------------
| pos | byes |
--------------------------
| QB | 10 | 7 | 5 | |
| WR | 3 | 9 | | |
--------------------------
...因为那些bye
行中的sts = 2
值pos
和pos
等于结果表中相应的bye
。
同样,如果可能的话,我想避免使用宏,只需在结果表的sts
单元格中使用公式。
希望这对你来说足够有意义。谢谢!
@ Richard-Morgan我试图使用你的公式,但无法让它发挥作用。这是我实际电子表格的屏幕截图,因此我们可以使用真实的单元格引用:
因此B2:B303
为pos
,D2:D303
为bye
,E2:E303
为U
。那么我想列出Y
到{{1}}列中的字节。它看起来像你的答案,如果我足够聪明地实现它,会得到我所需要的,所以非常感谢你提供给我到终点线的任何帮助!
答案 0 :(得分:1)
可以使用以下内容:
{=INDEX(tbl, SMALL(IF(COUNTIF(G$3, $A$2:$A$9)
*COUNTIF(G$4, $B$2:$B$9), ROW(tbl)-MIN(ROW(tbl))+1), ROW($C1)), COLUMN($C1))}
其中A列是sts,B列是pos,C列是再见。变量tbl是数据范围(不是标题)。 G $ 3是sts过滤器,G $ 4是pos过滤器。
复制数组公式DOWN以查找所有匹配的字节; #NUM!在找到不再匹配后会出现。如果这对您的用户造成困扰,您可以添加ISERROR或一种棘手的条件格式,使文本白色为白色。
然后,您可以将公式复制到下一列并输入新的过滤器值。
G H
sts Search 2 2
pos Search QB WR
10 3
7 9
5 #NUM!
#NUM!#NUM!
如果您的用户对数据透视表感到满意,我认为使用它们会更容易。
修改强> 使公式“转置”有点棘手,我没有任何突破,如何解决这个问题。但是,如果您想手动编辑列公式,这就是您想要的。
(我假设S是sts过滤器。也许你只是在那里进行计数,但是我没有看到你在哪里输入sts的过滤器。如果S不是sts过滤器,请更新公式指向sts为2或其他的位置。)
U2:
{=INDEX(tbl, SMALL(IF(COUNTIF($S2, $B$2:$B$303)*COUNTIF($R2, $D$2:$D$303),
ROW(tbl)-MIN(ROW(tbl))+1), ROW($D$1)), COLUMN($D$1))}
V2:
{=INDEX(tbl, SMALL(IF(COUNTIF($S2, $B$2:$B$303)*COUNTIF($R2, $D$2:$D$303),
ROW(tbl)-MIN(ROW(tbl))+1), ROW($D$2)), COLUMN($D$2))}
等
这允许向下复制单元格。
我确信有一种方法可以间接ROW / COLUMN,但我现在没时间看这个。
编辑2 如果你在某处放一个简单的数字增量,假设U1有1,V1有2,W1有3等,你可以使用以下内容:
{=INDEX(tbl, SMALL(IF(COUNTIF($S2, $B$2:$B$9)*COUNTIF($R2, $D$2:$D$9),
ROW(tbl)-MIN(ROW(tbl))+1), U$1), COLUMN($D$1))}
这将向下复制。
答案 1 :(得分:0)
这听起来像是一个数据透视表的工作,然后去特别。您需要添加ID#列。这是你可以做到的一种方式:
然后一旦使用go to special选择了空白,你只需删除它们并向左移动单元格。
祝你好运。
答案 2 :(得分:0)
好的,我找到了一种方法来获得我想要的结果。它不是最干净或最好的方式,但它实现了我水平列出结果的目标,并避免使用宏或数据透视表。
我使用隐藏的工作表列出所有pos
和sts
值,并作为单个值连接。所以......
sts | pos | bye
----------------------
2 | QB | 8
2 | RB | 5
2 | QB | 11
0 | WR | 7
. . .
...变为...
D | E
-----------
5 | 2QB | 8
6 | 2RB | 5
7 | 2QB | 11
8 | 0WR | 7
. . .
然后,我有一个“影子”结果区域,模仿我的首页工作表上的结果区域。它看起来像这样:
G | H | I | J | K
-----------------------------
5 | QB | | | | |
6 | RB | | | | |
7 | WR | | | | | . . .
在 H5:H7 中,我有以下公式:
=IFERROR((ADDRESS(MATCH("2"&$G5,$D$5:$D$305,0)+4,COLUMN($E5),4)),"")
这将返回它在以 2 开头的连续列中找到的第一个单元格引用,并以 G 列中的值结束(例如,第5行中的公式正在查找“2QB”)。
然后,在 I5: n 7 中,我有以下修改后的公式:
=IFERROR(ADDRESS(MATCH("2"&$G5,INDIRECT(ADDRESS(ROW(INDIRECT(H5))+1,4)&":$d$"&MAX(305,ROW(INDIRECT(H5))+1)),0)+ROW(INDIRECT(H5)),COLUMN($E5),4),"")
我修改后续列的原因是更改公式查找其值的范围,以便在之前找到的值之后的下一行开始。例如,使用上面的数据, H5 中的公式将在D5:D * n *中查找“2QB”,并返回它找到的第一行并将其附加到列E,这将是的 E5 强>
然后 I5 中的公式将从D * 6 *开始寻找“2QB”而不是D5,行之后的行在H5的结果中引用。
希望这是有道理的。
所以我在隐藏的工作表中最终得到的是:
G | H | I | J | K
-----------------------------
5 | QB | E5 | E7 | | |
6 | RB | E6 | | | |
7 | WR | | | | | . . .
然后,在我的首页工作表上,我只需获取H5中单元格引用的值(bye
):* n * 7使用:
=IFERROR(INDIRECT(lookups!H5),"")
...这给了我最后的结果:
G | H | I | J | K
-----------------------------
5 | QB | 8 | 11 | | |
6 | RB | 5 | | | |
7 | WR | | | | | . . .
就像我说的那样,它完全令人费解,但它确实有效,如果我弄清楚如何,我总能在以后完善它。 :)感谢你们为我看这个看似复杂的问题!我相信你的答案也很有效。