将包含定界符的单行中的多列数据转换为多行并展平定界符,因此每个单元格中只有一个项目
Convert multi column data in a single row that contains delimiter, to a multi row and flatten delimiter so only one item is in each cell
我希望使用数组公式进行拆分和展平,并保留正确的相应参考编号,分配给展平数据的多行。
- A 列:参考编号
- B 列:ID (CSV)
- C 列:临时 ID (CSV)
当前格式
| A | B | C |
|111|001 002 | |
|222|004 005 006 008| |
|333|007 |T001 T006 T002|
|888| |T005 T004 T008|
|444| |T007 |
预期结果
| A | B | C |
|111|001| |
|111|006| |
|222|004| |
|222|005| |
|222|006| |
|222|008| |
|333|007| |
|333| |T001|
|333| |T006|
|333| |T002|
|888| |T005|
|888| |T004|
|888| |T008|
|444| |T007|
是另一个 post,它与我想要实现的目标相似。
(唯一不同的是 post,OP 只有 2 列。)
这是我使用的公式(不完美):
=ARRAYFORMULA(TRIM(QUERY(SPLIT(FLATTEN(IF(IFERROR(SPLIT('Form Responses'!C2:D, " "))="",,
'Form Responses'!B2:B&"×"&SPLIT('Form Responses'!C2:D, " "))), "×"), "where Col2 is not null")))
我做错了什么?
Here 是我的 sheet.
使用这个:
=arrayformula(
regexreplace(
text(
split(
query(
flatten( iferror( 'Form Responses'!B2:B & "µ" & iferror(split('Form Responses'!C2:C, " ")) & "µ" & iferror(split('Form Responses'!D2:D, " ")) ) ),
"where Col1 is not null and not Col1 ends with 'µµ' ",
0
),
"µ", false, false
),
"000"
),
"000", ""
)
)
请注意,此公式将生成如下所示的行:
Reference
#ID
Temp ID
333
007
T001
即,同时具有 ID
和 Temp ID
的源数据行将共享一个参考编号。要使这些 ID 进入它们自己的行,请使用:
=arrayformula(
regexreplace(
text(
split(
{
query(
flatten( iferror( 'Form Responses'!B2:B & "µ" & iferror(split('Form Responses'!C2:C, " ")) & "µ" ) ),
"where Col1 is not null and not Col1 ends with 'µµ' ",
0
);
query(
flatten( iferror( 'Form Responses'!B2:B & "µµ" & iferror(split('Form Responses'!D2:D, " ")) ) ),
"where Col1 is not null and not Col1 ends with 'µ' ",
0
)
},
"µ", false, false
),
"000"
),
"000", ""
)
)
结果 table 将首先包含所有 ID
行,然后是 Temp ID
行。
我希望使用数组公式进行拆分和展平,并保留正确的相应参考编号,分配给展平数据的多行。
- A 列:参考编号
- B 列:ID (CSV)
- C 列:临时 ID (CSV)
当前格式
| A | B | C |
|111|001 002 | |
|222|004 005 006 008| |
|333|007 |T001 T006 T002|
|888| |T005 T004 T008|
|444| |T007 |
预期结果
| A | B | C |
|111|001| |
|111|006| |
|222|004| |
|222|005| |
|222|006| |
|222|008| |
|333|007| |
|333| |T001|
|333| |T006|
|333| |T002|
|888| |T005|
|888| |T004|
|888| |T008|
|444| |T007|
这是我使用的公式(不完美):
=ARRAYFORMULA(TRIM(QUERY(SPLIT(FLATTEN(IF(IFERROR(SPLIT('Form Responses'!C2:D, " "))="",,
'Form Responses'!B2:B&"×"&SPLIT('Form Responses'!C2:D, " "))), "×"), "where Col2 is not null")))
我做错了什么?
Here 是我的 sheet.
使用这个:
=arrayformula(
regexreplace(
text(
split(
query(
flatten( iferror( 'Form Responses'!B2:B & "µ" & iferror(split('Form Responses'!C2:C, " ")) & "µ" & iferror(split('Form Responses'!D2:D, " ")) ) ),
"where Col1 is not null and not Col1 ends with 'µµ' ",
0
),
"µ", false, false
),
"000"
),
"000", ""
)
)
请注意,此公式将生成如下所示的行:
Reference | #ID | Temp ID |
---|---|---|
333 | 007 | T001 |
即,同时具有 ID
和 Temp ID
的源数据行将共享一个参考编号。要使这些 ID 进入它们自己的行,请使用:
=arrayformula(
regexreplace(
text(
split(
{
query(
flatten( iferror( 'Form Responses'!B2:B & "µ" & iferror(split('Form Responses'!C2:C, " ")) & "µ" ) ),
"where Col1 is not null and not Col1 ends with 'µµ' ",
0
);
query(
flatten( iferror( 'Form Responses'!B2:B & "µµ" & iferror(split('Form Responses'!D2:D, " ")) ) ),
"where Col1 is not null and not Col1 ends with 'µ' ",
0
)
},
"µ", false, false
),
"000"
),
"000", ""
)
)
结果 table 将首先包含所有 ID
行,然后是 Temp ID
行。