【发布时间】:2019-01-15 19:29:17
【问题描述】:
我有以下数据集
Key ID Status 1 Status 2 Order ID
1 A1 FALSE TRUE 1234-USF-0025
1 A1 FALSE TRUE 1234-USF-0026
1 A1 FALSE TRUE 1234-USF-0027
2 A1 TRUE TRUE 1234-USF-0025
2 A1 TRUE TRUE 1234-USF-0026
2 A1 TRUE TRUE 1234-USF-0027
3 A1 FALSE TRUE 1234-USF-0025
3 A1 FALSE TRUE 1234-USF-0026
3 A1 FALSE TRUE 1234-USF-0027
4 A2 TRUE TRUE 1234-USF-0028
4 A2 TRUE TRUE 1234-USF-0029
4 A2 TRUE TRUE 1234-USF-0030
5 A3 TRUE TRUE 1234-USF-0031
5 A3 TRUE TRUE 1234-USF-0032
5 A3 TRUE TRUE 1234-USF-0033
6 A4 TRUE TRUE 1234-USF-0034
6 A4 TRUE TRUE 1234-USF-0035
6 A4 TRUE TRUE 1234-USF-0036
我需要以下内容
Order ID ID TRUE FALSE
1234-USF-0025 A1 2 1,3
1234-USF-0026 A1 2 1,3
1234-USF-0027 A1 2 1,3
1234-USF-0028 A2 4
1234-USF-0029 A2 4
1234-USF-0030 A2 4
1234-USF-0031 A3 5
1234-USF-0032 A3 5
1234-USF-0033 A3 5
1234-USF-0034 A4 6
1234-USF-0035 A4 6
1234-USF-0036 A4 6
在第二个表(我需要的那个)中,每个Order ID 都列在对应的ID 旁边。尽管A1 在原始数据集中被列出了 9 次,但A1 总共只有 3 个唯一的Order IDs。但是,A1 也与 3 个不同的 Key 相关联。
目标是连接每个Order ID 和ID 组合的Keys,其中Status 1 和Status 2 都是TRUE,并在TRUE 列中列出它们。对于Order ID 和ID 组合,其中至少一个Status 是FALSE,Keys 应列在FALSE 列下。
我的尝试
- 我尝试从
TRUE列开始,使用 INDEX-MATCH 作为数组公式,虽然我知道下面的公式不适用于我想要的最终目标,但我试图从小处着手并在公式的基础上进行构建.不幸的是,我对数组的了解有限,我不知道如何继续,因为我不明白为什么它会返回它所做的事情或如何从这一点上达到我的目标。
=INDEX($C$2:$C$19,MATCH(1,($H2 = $B$2:$B$19) * ($G2 = $E$2:$E$19)))
- 接下来,我尝试将原始数据集中的各个部分分开,但在如何继续时陷入困境。我认为这是更简单的解决方案,但我不知道如何根据所需的标准进行连接。
正确:=IF(AND($C2=TRUE,$D2=TRUE),$A2,"")
错误:=IF(OR($C2<>TRUE,$D2<>TRUE),$A2,"")
注意事项:
-
ID至少与一个Key相关联,但可以有更多 -
Order ID可以重复相同的ID,但只能重复不同的Keys对应的ID。
我也愿意接受基于VBA、Python 或R 的解决方案,但不知道如何为该任务启动脚本,所以我一直专注于Excel。
【问题讨论】:
-
在这种情况下,第二个表的第一列是否已经“构建”?还是每次都需要根据第一个表从头开始创建?
-
@BYates,我的解决方案是将
Order ID与另一个选项卡中的ID连接起来,删除重复项并去掉Order ID以粘贴到第二个表中。但是,如果有人可以提供更好的解决方案,我愿意。 -
使用公式会很棘手,但如果您愿意接受 VBA 解决方案,我可能会提供帮助...
-
@BYates,VBA 可以正常工作!
标签: excel concatenation