【问题标题】:reformat long range of data in google sheet重新格式化谷歌表中的大量数据
【发布时间】:2021-05-26 12:00:56
【问题描述】:

我有几行数据,列如下所示: Current Format

我想把数据拉到另一张表中如下:Desire Format

我尝试了查询、拆分和转置的组合,但没有得到我想要的结果。这可能吗?

电子表格链接:https://docs.google.com/spreadsheets/u/0/d/1ct7HLdvgkY0tYaiUyduhehyci7Dt7p_ajNCKcJandS0/htmlview

【问题讨论】:

  • 请分享您的工作表的可复制样本,这样我们就不必创建一个,并更详细地分享您尝试的内容。见how-ta-ask-a-good-question
  • 分享您的工作表副本
  • 是的,可以用一个公式来完成。但是,如上所述,请提供指向可编辑工作表的链接,其中包含您的第一张图片中显示的内容,确保将链接的共享权限(创建链接时)设置为“知道链接的任何人...”和“编辑。”这将是这里帮助您的最有效的方式。

标签: arrays google-sheets formula


【解决方案1】:

我在您的示例电子表格中添加了两张工作表(“Sheet1B”和“Erik Help”)。

“Sheet1B”只是“Sheet1”的清理版本。此表反映了真实世界的布局。因此,我在“Erik Help”中的公式引用了“Sheet1B”而不是“Sheet1。”

“Erik Help”中有一个公式!A1:

=ArrayFormula({Sheet1B!A1:J1; QUERY(SPLIT(FLATTEN(FILTER(SUBSTITUTE(SPLIT(SUBSTITUTE(Sheet1B!A2:A & "|" & Sheet1B!B2:B & "|" & Sheet1B!C2:C & "|" & Sheet1B!D2:D,",","~") & REPT(",|||",LEN(Sheet1B!E2:E)-LEN(SUBSTITUTE(Sheet1B!E2:E,",",""))),",",1,0),"~",",") & "|" & SPLIT(Sheet1B!E2:E,",") & "|" & SPLIT(Sheet1B!F2:F,",") & "|" & SPLIT(Sheet1B!G2:G,",") & "|" & SPLIT(Sheet1B!H2:H,",") & "|" & SPLIT(Sheet1B!I2:I,",") & "|" & SPLIT(REPT(",",LEN(Sheet1B!E2:E)-LEN(SUBSTITUTE(Sheet1B!E2:E,",",""))) & Sheet1B!J2:J,",",1,0),Sheet1B!A2:A<>"")),"|",1,0),"Select * WHERE Col5 Is Not Null")})

这个公式生成所有看到的标题和结果,并将扩展以包含新的数据行。

如您所见,我强烈建议将公式放在自己的工作表中,而不是与原始数据放在同一个工作表中。但是,如果您必须将其与原始数据放在同一张表中,请不要将其放在原始数据的下方,因为这会抑制原始数据范围自然增长的能力。把它放在右边。在这种情况下,考虑到“Sheet1”的当前布局(假设您删除了第 7 行以下的所有数据,公式将如下所示:

=ArrayFormula({A3:J3; QUERY(SPLIT(FLATTEN(FILTER(SUBSTITUTE(SPLIT(SUBSTITUTE(A4:A & "|" & B4:B & "|" & C4:C & "|" & D4:D,",","~") & REPT(",|||",LEN(E4:E)-LEN(SUBSTITUTE(E4:E,",",""))),",",1,0),"~",",") & "|" & SPLIT(E4:E,",") & "|" & SPLIT(F4:F,",") & "|" & SPLIT(G4:G,",") & "|" & SPLIT(H4:H,",") & "|" & SPLIT(I4:I,",") & "|" & SPLIT(REPT(",",LEN(E4:E)-LEN(SUBSTITUTE(E4:E,",",""))) & J4:J,",",1,0),A4:A<>"")),"|",1,0),"Select * WHERE Col5 Is Not Null")})

【讨论】:

    【解决方案2】:

    根据我下面的屏幕截图,在第 4 行试试这个:

    =arrayformula(query(iferror(array_constrain({vlookup({flatten(split(row(E4:E)&rept(","&0,len(H4:H)-len(regexreplace(H4:H,",",""))),","))},{row(E4:E),A4:D},{2,3,4,5},false),flatten(split(E4:E,",")),flatten(split(F4:F,",")),flatten(split(G4:G,",")),flatten(split(H4:H,",")),flatten(split(I4:I,",")),vlookup({flatten(split(rept(0&",",len(H4:H)-len(regexreplace(H4:H,",","")))&row(E4:E),","))},{row(E4:E),E4:J},7,false)},max(if(F4:F<>"",len(F4:F)-len(regexreplace(F4:F,",",""))+1,))*counta(F4:F),10),),"where Col6 is not null",0))

    它由 3 个部分组成:

    前 4 列:

    =arrayformula(iferror(vlookup({flatten(split(row(E4:E)&rept(","&0,len(H4:H)-len(regexreplace(H4:H,",",""))),","))},{row(E4:E),A4:D},{2,3,4,5},false),))

    中间5列:

    =arrayformula(array_constrain({flatten(split(E4:E,",")),flatten(split(F4:F,",")),flatten(split(G4:G,",")),flatten(split(H4:H,",")),flatten(split(I4:I,","))},max(if(F4:F<>"",len(F4:F)-len(regexreplace(F4:F,",",""))+1,))*counta(F4:F),6))

    最后总计栏:

    =arrayformula(iferror(vlookup({flatten(split(rept(0&",",len(H4:H)-len(regexreplace(H4:H,",","")))&row(E4:E),","))},{row(E4:E),E4:J},7,false),))

    假设:

    当 E、F、G、H、I 列中有逗号分隔的项目时,同一行的单元格中的数量相同。数量可以在不同的行上有所不同。该示例将第 4 到 7 行显示为 3,2,3,4 项。

    您的 GrandTotal 数字已经计算出来了。

    如果这有帮助,请考虑https://stackoverflow.com/help/someone-answers :-)

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多