【问题标题】:Google Sheets - transpose column data in groups into rows谷歌表格 - 将组中的列数据转换为行
【发布时间】:2021-07-18 04:32:26
【问题描述】:

我正在尝试将 A 列中的数据转置为单行。原始数据中每个名称都有 3 行。但每天可能有 1 个或多个工作。每天都需要单独处理,但这最好通过在每天开始时手动添加来处理。

这是每两周一次的时间表,因此行数无法预测。

第一张图片是我的原始数据。第二个是期望的最终结果。

数据将转置到 b、c、d、e 列中的任何空白行, 只要没有空白行,我就可以用我的公式引用它们。 将信息放入适当的单元格中 时间表。我已经有工作公式可以做到这一点。

转置部分是我需要帮助的部分

这是我的文件的链接 https://docs.google.com/spreadsheets/d/1PhuFXDB2H1c9ua6szjhJEgJR91yXHhZAmn_2UGOBvIo/edit?usp=sharing

【问题讨论】:

  • 请分享指向您的工作表或工作表副本的链接,其中包含的数据至少与上图中显示的数据一样多。这将使这里的志愿者有一个工作的起点。
  • Kris,您在帖子图片中显示的原始数据设置与工作表中的实际内容不符。您的帖子在两列中显示原始数据,在 A 列中带有空格和标签,而您的工作表仅显示图像中的 B 列数据,没有标签或空格卡在一个 A 列中。请编辑您的工作表以匹配您的帖子图像,或将您的帖子图像替换为与您的工作表设置相匹配的图像。还请在您的工作表中明确指出输出应该去哪里。
  • 我还注意到,在您的帖子中,您的图片将时间显示为具有清晰标签的单独单元格中的真实数字时间值(左侧的“开始时间”和“结束时间”),而您的实际时间工作表将时间显示为单个字符串,例如“6:30 - 8:45”。简而言之,您在帖子中显示的内容在结构上与您在工作表中的内容完全不匹配。
  • 我看到您现在已将帖子中的两张图片更改为完全不同的内容。我已经为最初发布的问题制定了解决方案,我无法将更多时间投入到全新的解决方案中。但是您现在表明您不希望在最终输出中出现任何日期(即,日期被划掉)。这似乎没有意义,因为它会使列出的时间在不知道日期的情况下变得毫无用处。为了其他可能选择为此进行投资的志愿者,请仔细考虑您的实际需求,并在此处和表格中准确地描述它。
  • 此外,您还没有指出您希望输出的位置。并且输出的位置在您的工作表上并不明显。同样,为了其他可能阅读本文的志愿者(并防止这篇文章由于缺乏明确性而被关闭),您必须清楚和彻底地了解自己的目标。

标签: google-sheets transpose


【解决方案1】:

尝试:

=ARRAYFORMULA({QUERY(IF(REGEXMATCH(A12:A, "\d+:\d+.*"), VLOOKUP(ROW(A12:A), 
 IF(IF(IFERROR(RIGHT(A12:A, 4)*1)>2000, A12:A, )<>"", {ROW(A12:A), 
 IF(IFERROR(RIGHT(A12:A, 4)*1)>2000, A12:A, )}), 2, 1), ), "where Col1 is not null"),
 QUERY(IF((IFERROR(RIGHT(A12:A, 4)*1)>2000)+(REGEXMATCH(A12:A, "\d+:\d+.*")),, A12:A), 
 "where Col1 is not null skipping 2"), 
 QUERY(QUERY(IF((IFERROR(RIGHT(A12:A, 4)*1)>2000)+(REGEXMATCH(A12:A, "\d+:\d+.*")),, A12:A), 
 "where Col1 is not null offset 1", 0), "skipping 2"), 
 FILTER(A12:A, REGEXMATCH(A12:A, "\d+:\d+.*"))})

【讨论】:

  • 感谢您的帮助,当我将公式放入单元格 B13 时,我收到一条错误消息,提示我缺少一个左括号,然后是 #ref!单元格中的错误
  • @Kris12 你能分享一份你的工作表吗?
  • docs.google.com/spreadsheets/d/… 希望这是正确的,因为我说我是谷歌表格的新手,我以前从未这样做过
  • 弄清楚我做错了什么!问题是我已经在其中一个单元格中有一些数据,因此您的公式不起作用。非常感谢您的帮助。您的解决方案完美运行
【解决方案2】:

如果您想要一个仅在一个单元格中包含公式的解决方案,请尝试:

=arrayformula({"date","name","job type","start - end time";query(split(flatten(query(iferror(datevalue(A12:A),),"where Col1 is not null",0)&split(flatten(split(textjoin(char(9999),1,if(regexmatch(to_text(A12:A),":+.*-+"),A12:A&char(9998),if(iferror(datevalue(A12:A),)<>"",char(10001),A12:A))),char(10001))),char(9998))),char(9999)),"where Col2 is not null",0)})

【讨论】:

  • 感谢您的帮助。当我将您的公式放入 B12 时,我得到一个#Value!错误
  • 见此表。我认为您的文件的问题与日期格式有关? docs.google.com/spreadsheets/d/…
  • 感谢您的努力,您的工作表完美无缺。但是当我将公式放在日期为 dd/mm/yyy 的工作表中时,我仍然会收到以下错误。我的工作表显然有些不同。错误是#Value!弹出错误消息“在 Array_Literal 中,数组 Literal 缺少一个或缺少行的值”
【解决方案3】:

输入 B12:

=IFERROR(if(FIND("2021",A12)>=1,0,""),B11+1)

输入 C12:

=if(B12=0,A12,C11)

在 D12 中:

=if(mod(B12,3)=1,TRANSPOSE(A12:A14),"")

并向下拖动。然后在 F12 中输入:

=FILTER(C:F,F:F<>"")

然后向下拖动。

想法:将transpose() 与条件计数器一起使用。使用 (F12) 过滤器删除空白。

请如果它有效/可理解/不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2021-05-08
    • 2022-12-04
    相关资源
    最近更新 更多