【问题标题】:Tranpose Columns then repeat rows转置列然后重复行
【发布时间】:2022-01-01 15:37:21
【问题描述】:

我有一些无法再更改的数据,它在 gsheet 中看起来像这样

Date Type Setting Unit Firstname Lastname Tags
12/1/2021 Event 1 1 2 John Doe Tag1,Tag2,Tag3
12/1/2021 Event 2 1 2 Jane Doe Tag4,Tag5,Tag6
12/1/2021 Event 2 1 2 Karen Doe Tag5,Tag8

谁能帮我把它转换成这样,然后在另一张纸上的数据透视表中使用它。

Date Type Setting Unit Firstname Lastname Tags
12/1/2021 Event 1 1 2 John Doe Tag1
12/1/2021 Event 1 1 2 John Doe Tag2
12/1/2021 Event 1 1 2 John Doe Tag3
12/1/2021 Event 2 1 2 Jane Doe Tag4
12/1/2021 Event 2 1 2 Jane Doe Tag5
12/1/2021 Event 2 1 2 Jane Doe Tag6
12/1/2021 Event 2 1 2 Karen Doe Tag5
12/1/2021 Event 2 1 2 Karen Doe Tag8

【问题讨论】:

    标签: google-sheets


    【解决方案1】:

    假设原始数据位于名为Sheet1 的工作表中,并且您发布的数据中显示的标题为A1:G1。在新工作表中,将此公式放在单元格 A1 中:

    =ArrayFormula({REGEXREPLACE(Sheet1!A1:G1, "s$", ""); SPLIT(SUBSTITUTE(QUERY(FLATTEN(TRANSPOSE(QUERY(TRANSPOSE(FILTER(Sheet1!A2:F&"~", Sheet1!A2:A<>"")),,COLUMNS(Sheet1!A:F))) & SPLIT(FILTER(Sheet1!G2:G, Sheet1!A2:A<>""), ",")), "Select * WHERE Col1 Is Not Null"), "~ ", "~"), "~", 1, 0)})

    简而言之,这个公式将前六列中的所有内容粉碎成一个由任意轮廓符分隔的长字符串(我选择了波浪号:~)。然后它将这些字符串与第七列的每个 SPLIT 元素连接起来,FLATTENs 将所有这些元素连接到一列中,QUERYs 将空白行连接起来,然后将 SPLITs 再次连接到波浪符号处的单独单元格中。

    第一部分 - REGEXREPLACE(Sheet1!A1:G1, "s$", ""); - 使用原始标题,但使用 REGEXREPLACE 去除原始标题“标签”上的最后一个“s”。

    框架=ArrayFormula({ ; }) 的意思是(用简单的英语):“我们将处理许多单元格,而不仅仅是一个。我们将在内存中形成一个临时虚拟数组。我们希望分号之前的部分继续分号后面的部分。”

    在新工作表中,您需要完全选择 Col A 并将其格式化为您喜欢的日期格式,因为日期最初会以其原始格式显示(即自原始日期以来的天数1899 年 12 月 30 日)。

    如果此公式不起作用,很可能是因为您所在的语言环境使用分号代替逗号。在这种情况下,试试这个版本:

    =ArrayFormula({REGEXREPLACE(Sheet1!A1:G1; "s$"; ""); SPLIT(SUBSTITUTE(QUERY(FLATTEN(TRANSPOSE(QUERY(TRANSPOSE(FILTER(Sheet1!A2:F&"~"; Sheet1!A2:A<>""));;COLUMNS(Sheet1!A:F))) & SPLIT(FILTER(Sheet1!G2:G; Sheet1!A2:A<>""); ",")); "Select * WHERE Col1 Is Not Null"); "~ "; "~"); "~"; 1; 0)})

    【讨论】:

    • 在我的工作表中,我确实将 A 列的格式更改为 date 以使其具有正确的日期格式。但是,对于实际的公式,我最终使用了这个,所以没有标签的行不会重复: =QUERY(ArrayFormula({REGEXREPLACE(Sheet1!A1:G1, "s$", ""); SPLIT(SUBSTITUTE(QUERY(展平(转置(查询(转置(过滤器(Sheet1!A2:F&"~", Sheet1!A2:A"")),,COLUMNS(Sheet1!A:F)))& 拆分(过滤器(Sheet1!G2 :G, Sheet1!A2:A""), ",")), "Select * WHERE Col1 Is Not Null"), "~", "~"), "~", 1, 0)}) "SELECT * WHERE Col7 is not null") 我会将其标记为正确答案。感谢您的大力帮助!
    猜你喜欢
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多