Google Sheets - 将列数据按组转置为行

3
我试图将列A中的数据转置为单行。原始数据每个名称有3行。但是每天可能有一个或多个工作。需要分别处理每一天,但最好在每一天开始手动添加。
这是用于双周时间表,因此行数不可预测。
第1张图片是我的原始数据。第2张是期望的最终结果。 enter image description here 数据要转置到B、C、D、E列的任何空白行中, 只要没有空白行,我就可以使用公式引用它们。 将信息放入时间表中的适当单元格。我已经有能够执行此操作的工作公式。
转置部分是我需要帮助的地方。

enter image description here

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

请分享一个链接,指向您的电子表格或包含与上面图像中显示的数据至少相同数量的电子表格副本。这将使这里的志愿者们有一个起点可以开始工作。 - Erik Tyler
Kris,你在帖子图片中展示的原始数据设置与实际表格中的不符。你的帖子展示了原始数据分别在两列中,其中第一列有空格和标签,而你的表格只展示了图像中的Column-B数据,没有标签或空格,全部挤在单个Column A中。请编辑你的表格以匹配你的帖子图片,或者用与你的表格设置相匹配的图片替换你的帖子图片。请在你的表格中清楚地指示输出应该放在哪里。 - Erik Tyler
我还注意到,在你的文章中,你展示的图像将时间以真实数字时间值的形式显示在不同的单元格中,并加上清晰的标签(左侧为“开始时间”和“结束时间”),而你的实际工作表则将时间显示为单个字符串,例如“6:30 - 8:45”。简而言之,你在文章中展示的内容与你在工作表中实际拥有的结构并不匹配。 - Erik Tyler
我看到你现在已经把帖子中的两张图片都换成了完全不同的东西。我已经解决了最初发布的问题,并且我不能再投入更多时间来解决全新的问题。但是你现在表明你不想在最终输出中使用任何日期(即,日期被划掉了)。这似乎没有意义,因为不知道日期将使得列出的时间无用。为了其他可能会选择积极参与此事的志愿者,请仔细思考你实际想要的内容,并在此处和表格中准确地描述它。 - Erik Tyler
此外,您仍未指示输出的位置。而且,在您的表格上,输出位置也不明显。为了其他可能会阅读此内容的志愿者(并防止由于缺乏清晰度而关闭此帖子),您必须明确和详尽地说明您的目标。 - Erik Tyler
3个回答

4

尝试:

=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+.*"))})

enter image description here


谢谢你的帮助。当我将你的公式放入B13单元格时,出现了一个错误提示,说我缺少一个开括号,然后在单元格中出现了#ref!错误。 - Kris12
@Kris12,你能分享一份你的表格副本吗? - player0
https://docs.google.com/spreadsheets/d/1PhuFXDB2H1c9ua6szjhJEgJR91yXHhZAmn_2UGOBvIo/copy 希望这个链接正确,因为我是新手,以前从未做过这个。 - Kris12
@Kris12 请查看:https://docs.google.com/spreadsheets/d/1DUBvpiVOUgfCvwXXuaRPyvgW9kYBzsE8ye6pXZikSGc/edit#gid=0 - player0
1
找到了我做错的地方!问题是我已经在其中一个单元格中有一些数据,因此您的公式无法工作。非常感谢您的帮助,它完美无缺。您的解决方案完美地运行。 - Kris12

3
如果您只希望一个单元格中包含公式的解决方案,请尝试:
=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)})

enter image description here


谢谢您的帮助。当我将您的公式放入B12时,出现了#Value!错误。 - Kris12
请查看这个表格。我认为你的文档问题与日期格式有关?https://docs.google.com/spreadsheets/d/1bV73k48FhmG6NXyJb93NXfjTTyVxAtwgmZs54QzyaYU/copy - Aresvik
感谢您的努力,您的表格完美地运作了。但是当我在我的日期为dd/mm/yyyy的表格中放置公式时,仍然出现以下错误。显然我的表格与您的有所不同。 错误是#Value!弹出错误消息“在Array_Literal中,一个数组字面值缺少一行或缺少值”。 - Kris12

0

输入 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)过滤器删除空白。

如果有效/可理解/不,请告知。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接