计算一批集合中包含指定成员的次数

有一个用Excel表格表示的赛事分组图,从C1:V13,每6列表示四个选手的一桌比赛,1-16表示16位选手的编号。


A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

1

1


8

14


11

12


2

1


4

3


13

10


15

16


6

5

2

2


3

1


5

7


9

11


13

15


2

4


6

8


10

12

3

3


11

8


14

15


3

6


9

12


13

16


5

2


1

4

4

4


9

13


1

5


4

8


12

16


3

7


10

14


2

6

5

5


3

2


11

16


14

7


10

15


1

6


12

13


8

5

6

6


2

14


3

9


7

1


13

8


5

11


6

4


15

12

7

7


12

6


13

7


4

5


12

11


1

8


15

9


2

16

8

8


1

9


2

10


7

15


8

16


3

11


4

12


5

13

请计算出任意两名选手在同一桌的次数,用矩阵图表示。


A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

11



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

12


1

















13


2

2
















14


3

2

3















15


4

2

2

2














16


5

2

1

1

2













17


6

1

2

1

2

2












18


7

2

0

2

0

1

1











19


8

2

1

0

2

1

1

2










20


9

3

2

2

0

1

1

0

1









21


10

1

1

1

0

0

0

2

0

1








22


11

0

1

2

3

2

1

0

2

1

0







23


12

1

0

2

3

1

3

1

2

1

1

3






24


13

3

1

0

0

3

2

2

1

2

1

1

2





25


14

0

1

2

0

0

0

2

2

1

2

2

1

0




26


15

1

0

0

0

0

0

2

3

2

2

2

1

2

2



27


16

0

3

1

1

1

0

1

2

0

1

1

1

2

0

2


使用 SPL XLL,在C13输入公式:

````

=spl("=?1.conj(~.group((#-1)\6)).count( ~.contain( ?2,?3) )",$C$1:$V$8,$B13,C$11)

````

上面公式只算出了一格,需要通过拖拽算出其他格,并避开对角线(自己和自己同桌无意义)。注意整个矩阵会重复算两遍,所以只要拖拽出三角形区域就可以了。

Picture1png

函数 group 用于分组,# 表示当前成员的序号,~ 表示当前成员,函数 contain 计算指定的多个项目是否都是某个序列的成员。

来源:https://www.reddit.com/r/excel/comments/1cceq2q/how_to_count_how_many_times_two_players_are_at/