更改 Google Sheet 布局的公式:转置和拆分
Formula to change the layout of a Google Sheet: Transpose & Split
我想转换 Sheet1 中收集的数据,使其看起来像 Sheet2。
Sheet1 - 从 Google 表格填充数据。
此 sheet 包含员工参加特定 class 的出勤率。
此 sheet 包含超过 50,000 行。
Class 每行的 ID 都是唯一的。
可以在多行中找到相同的员工 ID
- 通知员工 ID“123456”在 class X123456 和 ZZ974547
中找到
A
B
C
1
Date
Class ID
Employee ID's
2
4/26/2021 6:47:13
X123456
123456 896779 835906 TMP880997 908613 882853
3
4/26/2021 17:18:57
Y123456
227583 233482 218680 226955 225310 227569 227582
4
4/26/2021 18:01:30
XYZ123456
201032 232863 232848 TMP232845
5
4/27/2021 12:24:29
X123457
188809 224046 232861 232846
6
4/28/2021 10:56:28
X123458
210975
7
5/26/2021 10:29:31
ZZ974547
123456 955725 961714 956114 955986 959287 955748
工作表 2 - 使用公式的预期结果
- 结果按时间戳排序。
- 计算一个 Class ID 中员工 ID 的数量。
- 然后将 Class ID 复制相同的次数。
- Class ID X123456 包含 6 个员工 ID,因此 X123456 重复 6 次(1/行)
- Class ID Y123456 包含 7 个员工 ID,因此 Y123456 重复 7 次(1/行)
A
B
1
Class ID
Employee ID
2
X123456
123456
3
X123456
896779
4
X123456
835906
5
X123456
TMP880997
6
X123456
908613
7
X123456
882853
8
Y123456
227583
9
Y123456
233482
10
Y123456
218680
11
Y123456
226955
12
Y123456
225310
13
Y123456
227569
14
Y123456
227582
15
XYZ123456
201032
16
XYZ123456
232863
17
XYZ123456
232848
18
XYZ123456
TMP232845
这是我目前试过的公式...
Sheet2!A2 =TRANSPOSE(SPLIT(REPT(B2:B &" ",COUNTA(TRANSPOSE(SPLIT(C2:C," "))))," "))
Sheet2!B2 =TRANSPOSE(SPLIT(C2:C," "))
这些公式适用于第一个 Class 个 ID,但不适用于其余 Class 个 ID。我尝试用 ARRAYFORMULA()
包装它们,但没有用。
尝试:
=INDEX(QUERY(SPLIT(FLATTEN(IF(IFERROR(SPLIT(D2:D, " "))="",,
C2:C&"×"&SPLIT(D2:D, " "))), "×"), "where Col2 is not null"))
更新:
=INDEX(SUBSTITUTE(QUERY(SPLIT(FLATTEN(IF(IFERROR(
SPLIT(D2:D, " "))="",,C2:C&"×"&SPLIT(D2:D, " ")&"♦")), "×"),
"where Col2 is not null"), "♦", ))
我想转换 Sheet1 中收集的数据,使其看起来像 Sheet2。
Sheet1 - 从 Google 表格填充数据。
此 sheet 包含员工参加特定 class 的出勤率。
此 sheet 包含超过 50,000 行。
Class 每行的 ID 都是唯一的。
可以在多行中找到相同的员工 ID
- 通知员工 ID“123456”在 class X123456 和 ZZ974547 中找到
A | B | C | |
---|---|---|---|
1 | Date | Class ID | Employee ID's |
2 | 4/26/2021 6:47:13 | X123456 | 123456 896779 835906 TMP880997 908613 882853 |
3 | 4/26/2021 17:18:57 | Y123456 | 227583 233482 218680 226955 225310 227569 227582 |
4 | 4/26/2021 18:01:30 | XYZ123456 | 201032 232863 232848 TMP232845 |
5 | 4/27/2021 12:24:29 | X123457 | 188809 224046 232861 232846 |
6 | 4/28/2021 10:56:28 | X123458 | 210975 |
7 | 5/26/2021 10:29:31 | ZZ974547 | 123456 955725 961714 956114 955986 959287 955748 |
工作表 2 - 使用公式的预期结果
- 结果按时间戳排序。
- 计算一个 Class ID 中员工 ID 的数量。
- 然后将 Class ID 复制相同的次数。
- Class ID X123456 包含 6 个员工 ID,因此 X123456 重复 6 次(1/行)
- Class ID Y123456 包含 7 个员工 ID,因此 Y123456 重复 7 次(1/行)
A | B | |
---|---|---|
1 | Class ID | Employee ID |
2 | X123456 | 123456 |
3 | X123456 | 896779 |
4 | X123456 | 835906 |
5 | X123456 | TMP880997 |
6 | X123456 | 908613 |
7 | X123456 | 882853 |
8 | Y123456 | 227583 |
9 | Y123456 | 233482 |
10 | Y123456 | 218680 |
11 | Y123456 | 226955 |
12 | Y123456 | 225310 |
13 | Y123456 | 227569 |
14 | Y123456 | 227582 |
15 | XYZ123456 | 201032 |
16 | XYZ123456 | 232863 |
17 | XYZ123456 | 232848 |
18 | XYZ123456 | TMP232845 |
这是我目前试过的公式...
Sheet2!A2 =TRANSPOSE(SPLIT(REPT(B2:B &" ",COUNTA(TRANSPOSE(SPLIT(C2:C," "))))," "))
Sheet2!B2 =TRANSPOSE(SPLIT(C2:C," "))
这些公式适用于第一个 Class 个 ID,但不适用于其余 Class 个 ID。我尝试用 ARRAYFORMULA()
包装它们,但没有用。
尝试:
=INDEX(QUERY(SPLIT(FLATTEN(IF(IFERROR(SPLIT(D2:D, " "))="",,
C2:C&"×"&SPLIT(D2:D, " "))), "×"), "where Col2 is not null"))
更新:
=INDEX(SUBSTITUTE(QUERY(SPLIT(FLATTEN(IF(IFERROR(
SPLIT(D2:D, " "))="",,C2:C&"×"&SPLIT(D2:D, " ")&"♦")), "×"),
"where Col2 is not null"), "♦", ))