您可以使用 Excel 2010+ 中提供的 Power Query 来完成此操作
在 Excel 2013 中,如果您没有它,您可能需要下载免费的 Microsoft 插件才能启用它。
在红色方块里放些东西。我只使用了x 字母,但它们必须是非空白的
- 在表格中选择一个单元格
- 数据/获取和转换/从表/范围
- 选择日期列和
Split column by delimiter:-
- 按区域设置更改类型
- 您需要选择
Date 和具有dd.mm.yy 格式的语言环境
- 我选择了瑞士-阿尔萨斯,但还有其他的
- 选择两个日期列和
Unpivot other columns
- 然后
Group By 地址列和聚合
-
Min Dates.1 列的开始日期
-
Max Dates.2 列的结束日期
- 将列移至最终设计并根据需要重命名
- 按地址列排序
这一切都可以通过 UI 完成
M 码
let
Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Dates", type text}, {"Address 1", type text}, {"Address 2", type text}, {"Address 3", type text}, {"Address 4", type text}, {"Address 5", type text}}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "Dates", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"Dates.1", "Dates.2"}),
#"Changed Type with Locale" = Table.TransformColumnTypes(#"Split Column by Delimiter", {{"Dates.1", type date}, {"Dates.2", type date}}, "gsw-CH"),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type with Locale", {"Dates.1", "Dates.2"}, "Address", "Value"),
#"Grouped Rows" = Table.Group(#"Unpivoted Other Columns", {"Address"}, {{"Start Date", each List.Min([Dates.1]), type date}, {"Finish Date", each List.Max([Dates.2]), type date}}),
#"Sorted Rows" = Table.Sort(#"Grouped Rows",{{"Address", Order.Ascending}})
in
#"Sorted Rows"
如果您需要使用公式,以下应该可以工作:
输入您的地址列表,例如G18:Gn
在下面的公式中,我定义了一个表并使用了结构化引用,但如果需要,您可以使用常规引用。
如上所述,我还将x 放在彩色块中。在这种情况下,它必须是x。不能只是non-blank
H18: =AGGREGATE(15,6,DATE(MID(Table3[Dates],7,2)+100,MID(Table3[Dates],4,2),LEFT(Table3[Dates],2))*1/(INDIRECT("Table3["&$G18&"]")="x"),1)
I18: =AGGREGATE(14,6,DATE(RIGHT(Table3[Dates],2)+100,MID(Table3[Dates],14,2),MID(Table3[Dates],10,2))*1/(INDIRECT("Table3["&$G18&"]")="x"),1)
并根据需要填写。
你得到相同的结果: