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)})
我正在尝试将数据从 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)})