excel - 如何在excel中合并数据行
问题描述
当它们具有相同的 ID、顺序和类时,我试图合并行。但是,合并的行需要对长度求和,并输入正确的开始和结束。所以合并的行将具有第一行的开始值和最后一行的结束值请检查图像以了解我的意思。
我很确定我可以使用 SUMIF 实现长度的总和,但我无法弄清楚如何将正确的开始和结束值输入到合并的行中。
这甚至可以用excel吗?我不能使用数据透视表,因为我不是简单地尝试对长度求和,我希望列保持不变,只是为了相应地合并行。任何帮助都感激不尽!
解决方案
在您的示例中,您想要的begin
and似乎分别是and ,我在方法中使用了它。end
min
max
使用 Excel 2010+ 中提供的 Power Query 相对简单。
- 选择 ID、Order 和 Class 列
Group By
- 对于聚合有最小的开始;最大结束;和长度总和
- 将 Class 列移回末尾
瞧!
这一切都可以从 UI 快速完成
M-代码
let
Source = Excel.CurrentWorkbook(){[Name="Table7"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Order", Int64.Type}, {"begin", Int64.Type}, {"end", Int64.Type}, {"length", Int64.Type}, {"class", Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"ID", "Order", "class"}, {{"Begin", each List.Min([begin]), type number}, {"End", each List.Max([end]), type number}, {"Length", each List.Sum([length]), type number}}),
#"Reordered Columns" = Table.ReorderColumns(#"Grouped Rows",{"ID", "Order", "Begin", "End", "Length", "class"})
in
#"Reordered Columns"
为了完整性:如果您确实需要在每个组中使用第一行和最后一行Begin
,End
而不是Min/Max
,您可以使用以下代码。
在该group by
步骤中,您选择聚合 begin/end,而不是按 max/min 聚合All Rows
。这将创建一个表,其中包含每个组的开始和结束条目。List.First
然后,您可以使用andList.Last
函数提取第一个和最后一个条目。
自定义列的代码:
List.First(Table.Column([#"Start/End"],"begin"))
List.Last(Table.Column([#"Start/End"],"end"))
M-代码
let
Source = Excel.CurrentWorkbook(){[Name="Table7"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Order", Int64.Type}, {"begin", Int64.Type}, {"end", Int64.Type}, {"length", Int64.Type}, {"class", Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"ID", "Order", "class"}, {{"Length", each List.Sum([length]), type number}, {"Start/End", each _, type table [ID=number, Order=number, begin=number, end=number, length=number, class=number]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Begin", each List.First(Table.Column([#"Start/End"],"begin"))),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "End", each List.Last(Table.Column([#"Start/End"],"end"))),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"Start/End"}),
#"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"ID", "Order", "Begin", "End", "Length", "class"})
in
#"Reordered Columns"
顺便说一句,您可以使用常规数据透视表非常接近(特别是如果您可以使用 Min/Max 作为开始/结束)。但是,它没有那么灵活,而且我认为您不能按照显示的方式对列进行排序。
下面是一个简单的数据透视表。
您将 ID、Order 和 class 拖到 Rows 区域。您将 Begin、End 和 Length 拖动到应用 Min、Max 和 Sum 的值区域。
然后以表格形式显示布局;关闭总计和小计,你有:
推荐阅读
- dns - 有人可以告诉我在验证我的域时我做错了什么吗?
- css - 内容在完美圆圈内的 Div
- database - 使用 Oracle 连接使用 4 个表
- python - python 将 numpy.ndarray 从 (4942L, 1L) 转换为 (4942L,)
- java - Selenium(Java)中的“NoSuchElementException”之后如何继续执行?
- java - 什么设计模式适合处理很多条件分支
- android - 使用 Dagger 2 在活动和片段中注入相同的类对象
- kubernetes - 503 Service Unavailable with Ambassador QOTM 服务
- flutter - Flutter在进入路由器之前有事件吗?
- c# - 使用 C# 从外部 api 读取 json 数据