【问题标题】:MS Excel: how can I make Max() more efficient?MS Excel:我怎样才能让 Max() 更有效率?
【发布时间】:2011-11-08 12:40:30
【问题描述】:

我有一组如下所示的数据:

ID  Value   MaxByID  
0   32  80  
0   80  80  
0   4   80  
0   68  80  
0   6   80  
1   32  68  
1   54  68  
1   56  68  
1   68  68  
1   44  68  
2   54  92  
2   52  92  
2   92  92  
4   68  68  
4   52  68  
5   74  74  
5   22  74  
6   52  94  
6   52  94  
6   46  94  
6   94  94  
6   56  94  
6   14  94    

我使用{=MAX(IF(A$2:A$100=A2,B$2:B$100))} 来计算MaxByID 列。然而,数据集有超过 100k 行,其中大部分是唯一的 ID:这似乎是一种非常低效的方法,因为 C:C 中的每个单元格都必须遍历 A:A 中的每个单元格。

ID 字段是数字并且可以排序 - 有没有更智能的方法找到 MaxByID?

【问题讨论】:

    标签: excel performance array-formulas


    【解决方案1】:

    您可以使用数据透视表来查找每个唯一 ID 的最大值:请参阅 this link 示例。

    一旦你有了那个表,VLOOKUP 应该能让你快速找到每个IDMaxByID

    【讨论】:

    • 这很棒。我永远不会想到在数据透视表上进行 VLOOKUP。谢谢!
    • 如果你采用 Pivot Table 的方式,那么 GetPivotData 应该比 Vlookup 更快,我怀疑。
    【解决方案2】:

    按 ID 排序后,您可以添加列以获取起始行号并计算每个唯一值。
    这两个数字允许您计算唯一值范围的大小和位置。
    那么你可以使用 MAX(OFFSET(StartValueCell,StartThisUnique-1,0,CountThisUnique,1)) 来获取最大值

    【讨论】:

      【解决方案3】:

      这可能会更快

      {=IF(A2=A1,C1,MAX(($A$2:$A$24=A2)*($B$2:$B$24)))}
      

      由于您的数据似乎已排序,您可以查看 ID 是否与上面的行匹配,然后简单地复制最大值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-08
        • 2015-12-23
        • 2016-08-10
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多