我在 Excel 中有一组数据,其中每行(除其他外)有两个值,我想要生成所有配对的排序列表。
示例数据:
Val1 Val2
------------
A B
B A
C A
B C
A B
C A
etc..
示例输出:
Val1 Val2 Count
------------------
A B 2
B A 1
B C 1
C A 2
有没有办法不编写 VBA 代码来做到这一点。
编辑:我应该补充一点,我的数据集正在增长,我更喜欢一种能够在输入新数据时自动更新的解决方案。
答案1
COUNTIF()
最简单的方法是将两列连接在一起,对该列执行操作,最后删除所有重复的行。
答案2
假设:第 1 行是标题行,第 2 行是第一行数据(A B
)。
脚步
在 D2: 输入
=A2 & "|||" & B2
并复制到 D3:D999
(使用一些罕见的字符串,如"|||"
)在 C2: 输入
=COUNTIF(D:D, D2)
并复制到 C3:C999复制 C:C 列,然后“选择性粘贴”作为值到 C:C 列 (
Alt-E > S > V > Enter
)选择 A:D 列,然后按 D 列排序
在 E2: 输入
=IF(OR(ROW(D2)=2, C2=1, AND(C2>1,D2<>D1)), "Keep", "Delete")
并复制到 E3:E999打开自动筛选 (
Alt-D > F > F
)在E列下拉列表中选择“删除”
选择第 2 行:999,然后右键单击 > 删除
(有些#REF!
可能显示在 E 列,这是正常的)关闭自动筛选 (
Alt-D > F > F
)删除虚拟列 D:E
答案3
使用countifs
宏。
原始表格:
A B
Val1 Val2
------------
1 A B
2 B A
3 C A
4 B C
5 A B
6 C A
etc...
在这种情况下,宏是:
=COUNTIFS(A1:A6, A1, B1:B6, B1)
其内容为“如果在范围 A1:A6 中有 A,并且如果在范围 B1:B6 中有 B,则计算它”。
这将导致类似这样的结果(COUNTIFS 在 G 列中):
E F G
Val1 Val2 Count
------------------
1 A B 2
2 B A 1
3 B C 1
4 C A 2
可以使范围绝对化:
=COUNTIFS($A$1:$A$6, A1, $B$1:$B$6, B1)
或者使用真值表(或密钥),这样它就COUNTIFS
不是自指的。
H I
Keys1 Keys2
------------
1 A A
2 B B
3 C C
这将有助于创建一个从原始数据集收集数据但与参考表进行比较的 countif,如下所示:
=COUNTIFS($A$1:$A$6, H1, $B$1:$B$6, I1)
所以这是同样的事情,但现在表上的数据可以更新和排序而不会变得COUNTIFS
不准确。