我有两个位置(房间)和一组 ID,它们之间存在多对多关系;即,每个 ID 可以在一个或两个房间中出现一次或多次。这是一个小例子:
ID: Location
1 Room_1
2 Room_2
3 Room_1
3 Room_2
4 Room_1
4 Room_1
我想根据位置将 ID 分成两组。如果某个 ID 仅出现在 Room_1 中,我希望将其归入第 1 组。如果某个 ID 仅出现在 Room_2 中,我希望将其归入第 2 组。如果某个 ID 出现在多个实例(行)中,如上面的 3 和 4,如果任何 ID 是 Room 2,我希望将其归入第 2 组。如果有多个实例,但它们都在 Room 1 中,那么 ID 可以保留在第 1 组中。
因此在示例中,我希望 ID 1 和 4 位于第一组,而 ID 2 和 3 位于第二组。
理想的解决方案是将它们分成单独的纸张,但任何类型的分离都可以。
这是一个更大的数据样本:
编号:位置 1 房间_1 2 房间_2 3 房间_1 3 房间_2 4 房间_1 4 房间_1 5 房间_2 6 房间_1 7 房间_2 7 房间_2
分组后看起来应如下所示:
第 1 组: 编号:位置 1 房间_1 4 房间_1 4 房间_1 6 房间_1 第 2 组: 编号:位置 2 房间_2 3 房间_1 3 房间_2 5 房间_2 7 房间_2 7 房间_2
也许更直接的表达方式是:
- 出现的每一个 ID仅有的Room_1 中的 进入 Group 1。
每个出现在 Room_2 中的 ID 都会进入第 2 组。
除此之外,我还想保留输入中的每一行,即使是相同的行。
答案1
我认为您想要的解决方案需要 4 个步骤:
步骤1:
- 将数据导入到表中 (表格选项卡)
- 在列上插入一个数据透视表 (PT),而不仅仅是当前数据,而是整个列;这将实现动态增长,当选择 PT 时,可以在选项菜单中“刷新”到 PT。请注意图像右侧的 PT 设置。
第2步:
- 只需在每个字段中插入 = 即可从“表格选项卡”复制每个单元格。
- 在第二列中,插入如下公式复制标签从 B2 开始:
=IFNA(IF(AND(LOOKUP(A2,Table!$J$3:$AZ$3)=A2,LOOKUP(A2,Table!$J$4:$AZ$4)=A2),"Room_2",Table!B2),Table!B2)
步骤3:
- 插入一个新工作表“Room_1”,一个与“复制标签”相对应的 PT。
- 请注意 Room_1/Location 的过滤器。
- 查看Room_1标签。
步骤4:
- 插入新工作表“Room_2”,一个与“复制标签”相对应的 PT。
- 请注意 Room_2/Location 的过滤器。
- 查看Room_2标签。
GIF 图像. 点击可放大查看每一层。
答案2
我希望你真的准确地描述了你的问题,你不会说这样的话:“哦,在我的真实的数据,我有两个以上的房间。”
我假设您在 Column 中有“ID” ,A
在 Column 中有“Location” B
,其他所有内容都可用于派生值。(如果不是这种情况,只需将其推到第一个未使用的列即可。)假设您在第 1 行中有标题(“ID”和“Location”),
- 在单元格中
C2
插入=A2 & B2
- 在单元格中
D2
,插入=ISERROR(MATCH(A2 & "Room_2", C$2:C$11, 0))
替换11
为有数据的最后一行的编号。 - 选择单元格
C2
和D2
,然后向下拖动/填充到有数据的最后一行。
&
是 Excel 的字符串连接运算符。您也可以说CONCATENATE(A2, B2)
,但A2 & B2
显然更简洁。这在 Column 中产生诸如1Room_1
、2Room_2
、3Room_1
、3Room_2
、等值C
。函数MATCH(A2 & "Room_2", C$2:C$11, 0)
(在 Column 中D
)在 Column 中搜索C
此行中与字符串 连接的 ID 的出现Room_2
。换句话说,是否存在一行这ID 在 2 号房间吗?如果有,则
MATCH
返回索引号并ISERROR
返回 FALSE。否则,MATCH
返回错误并ISERROR
返回 TRUE。
因此,D
对于每个仅出现在房间 1 中的 ID,Column 包含 TRUE,对于任何出现在房间 2 中(至少出现一次)的 ID,Column 包含 FALSE:
D
然后按从大到小(降序)的顺序对列进行排序,因此 TRUE 行位于 FALSE 行之前: