如何获取MAX值的ID?

问题描述 投票:0回答:1

我是 Excel 及其 VBA 对象模型的新手。 我有这个表(A-D)按 A 和 B 排序。对于每个 A-B 组行,我想找到该最大值的 MAX D(成本)值和 C(销售 ID)。就像较小的表 (F1:J4)。我摆弄了一个数据透视表,但无法获取销售 ID。 【忽略格式,为方便阅读而添加】

无论如何,我正在寻找 VBA 解决方案。如果我为每个 A-B 组创建一个范围,我确信我可以做到这一点。但如何呢?我能找到的最接近的是这个问题:GroupBy and Sum rows using multiple columns in Excel,但这并没有给我ID值,而且看起来相当不雅观。

有什么指点吗? enter image description here

excel vba pivot-table
1个回答
0
投票

这可以使用 Windows Excel 2010+ 和 Microsoft 365(Windows 或 Mac)中提供的 Power Query 来完成

使用 Power Query

  • 选择数据表中的某个单元格
  • Data => Get&Transform => from Table/Range
  • PQ 编辑器打开时:
    Home => Advanced Editor
  • 记下第 2 行中的表名称
  • 将下面的 M 代码粘贴到您所看到的位置
  • 将第 2 行中的表名称更改回最初生成的名称。
  • 阅读评论并探索
    Applied Steps
    以了解算法
let

//change table name in next line to reflect actual data source
    Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content],

//If Sale ID and Cost are not integers, will need to change data type
// both in this step and below
    #"Changed Type" = Table.TransformColumnTypes(Source,{
        {"Name", type text}, {"Product", type text}, {"Sale ID", Int64.Type}, {"Cost", Int64.Type}}),

//Group by the relative columns, then filter and extract the ID and max cost
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Name", "Product"}, {
        {"Id/Max Cost", (t)=>Table.SelectRows(t, each [Cost]=List.Max(t[Cost])),
        type table[Name=text, Product=text, Sale ID=Int64.Type, Cost=Int64.Type]}}),
        
    #"Expanded Id/Max Cost" = Table.ExpandTableColumn(#"Grouped Rows", "Id/Max Cost", 
        {"Sale ID", "Cost"}, {"Max Cost.Sale ID", "Max Cost.Cost"})
in
    #"Expanded Id/Max Cost"

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.