Google 工作表 - 将分组中的列数据转置为行

Google Sheets - transpose column data in groups into rows

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

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

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

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

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

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

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

请如果works/understandable/not.

尝试:

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

如果您只想在一个单元格中使用公式解决方案,请尝试:

=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)})