Google sheets 从项目、任务和日期表创建信息列
我在电子表格中收集了大量项目,这些项目具有与之相关的不同任务。每个项目是一行,不同的任务是列。对于每个项目和任务,都有一个必须执行任务的日期。(如果条目为空,则不必为该项执行任务。) 电子表格示例如下: 是否可以将表转换为一个列表,其中包含日期、项目和任务(列表项按日期排序)?行/列将随着时间的推移而添加Google sheets 从项目、任务和日期表创建信息列,google-sheets,excel-formula,pivot-table,spreadsheet,Google Sheets,Excel Formula,Pivot Table,Spreadsheet,我在电子表格中收集了大量项目,这些项目具有与之相关的不同任务。每个项目是一行,不同的任务是列。对于每个项目和任务,都有一个必须执行任务的日期。(如果条目为空,则不必为该项执行任务。) 电子表格示例如下: 是否可以将表转换为一个列表,其中包含日期、项目和任务(列表项按日期排序)?行/列将随着时间的推移而添加 Current Table task1, task2, task3 -----------------------------------
Current Table
task1, task2, task3
-------------------------------------
item1 | 1/20/2019 2/20/2020
item2 | 2/23/2020 3/10/2019
item3 | 4/10/2020 5/10/2020
Expected output:
1/20/2019, item1, task1
3/10/2019, item2, task3
2/20/2020, item1, task2
2/23/2020, item2, task2
4/10/2020, item3, task1
5/10/2020, item3, task3
在数据库术语中,您要执行的操作称为规范化。您可以使用一对数组公式来执行此操作,如下所示: 首先构建垂直(B5:B7)和水平(C4:E4)轴值的所有可能组合的列表,然后输入,比如说,A10
=arrayformula(
split(
transpose(
split(
concatenate(
arrayformula(
unique(filter(B5:B7, not(isblank(B5:B7)))) & "|" &
unique(filter(C4:E4, not(isblank(C4:E4)))) & "\"
)
),
"\")
),
"|")
)
使用维度值查找表内的日期并将其放入C10中
=arrayformula(
text(vlookup(A10:A18, $B$4:$E$7, match(B10:B18, $C$4:$E$4, 0)+1, false), "MM/DD/YYYY")
)
注:
如果您希望日期、项目和任务在单独的列中,请尝试
=ArrayFormula(sort(split(transpose(split(textjoin("¶",true,if(C5:E7="","",C5:E7&"|"&B5:B7&"|"&C4:E4)),"¶")),"|"),1,true))
我必须手动将第一列格式化为mm/dd/yy日期。可以使用TEXT函数将日期格式化为字符串,作为公式的一部分,但不能用于排序。您可以将原始(未格式化)日期添加到单独的列中并进行排序,但这会使公式更加复杂
这比我的解决方案好,因为它是单一公式,并且已经排序。一个关键点是,您可以跳过ArrayFormula包装器,因为sort()已经强制执行数组上下文。