将包含定界符的单行中的多列数据转换为多行并展平定界符,因此每个单元格中只有一个项目

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      |       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

即,同时具有 IDTemp 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 行。