如何在组中获得最小值?

Posted

技术标签:

【中文标题】如何在组中获得最小值?【英文标题】:How to get min value in a group? 【发布时间】:2013-06-11 10:54:27 【问题描述】:

例子:

ID  Value   MAX
Group1  2   6
Group1  4   6
Group1  6   6
Group2  1   3
Group2  3   3
Group3  7   8
Group3  4   8
Group3  2   8
Group3  8   8
Group4  1   3
Group4  2   3
Group4  3   3
Group5  7   7

“MAX”列有我想要的结果。

我的两部分问题是:

(1) 如何获取“Max”列的值?

我目前正在使用数据透视表,但用户抱怨它太慢并且可能导致 Excel 无响应。

我尝试将数组函数与这样的公式一起使用:

=MAX(IF($A$9:$A$21=A12,$B$9:$B$21))

这不会保持最新状态,我需要一些机制来刷新数据。用户表示他们不希望再有一个按钮来刷新数据。

(2)假设有一个公式可以解决上述问题,我的Value列是一个可以为空的日期,我的要求也是获取组中的最小日期,忽略任何空白。

【问题讨论】:

【参考方案1】:

在C2中输入数组公式:

=MAX(IF(A:A=A2,B:B))  

然后抄下来。

数组公式必须使用 Ctrl + Shift + Enter 而不仅仅是 Enter 键。如果正确执行此操作,公式将在公式栏中显示并带有花括号。

【讨论】:

【参考方案2】:

一些事情...我的第一个问题是我现有的电子表格被设置为“手动计算”而不是“自动计算”。 (在菜单公式 | 计算选项下)。

这里是一些示例代码,我用来添加基于另一列的“分组”计算最小日期。 (注意:我的电子表格有大约 1500 行,我确实注意到在更改单元格和更新公式时速度变慢了)

Sub AddFormulaToCalculateEarliestRevisedDate()
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

    Dim identifierColumn As String
    Dim identierRow As String
    Dim identifierRange As String
    Dim valueRange As String
    Dim formulaColumn As String
    Dim formulaRange As String

    Dim myIdentifierRange As Range
    Dim myFormulaRange As Range
    Dim lastRow As String
    lastRow = ActiveSheet.Range("C5000").End(xlUp).Row

    identifierColumn = "B"
    identifierRange = "B6:B" & lastRow
    valueRange = "AP6:AP" & lastRow
    formulaColumn = "CZ"
    formulaRange = "CZ6:CZ" & lastRow

    Set myIdentifierRange = ActiveSheet.Range(identifierRange)
    Set myFormulaRange = ActiveSheet.Range(formulaRange)

    ' delete any existing any array formulas first! otherwise, get error
    myFormulaRange.ClearContents
    myFormulaRange.NumberFormat = "m/d/yyyy;;" ' notice the ;; to handle zero dates 1/0/1900 to be blank

    ' loop through each row and set the array formula
    Dim identifierCell As String
    Dim arrayFormula As String
    Dim r As Range
    For Each r In myIdentifierRange.Rows

        ' example: arrayFormula = =MIN(IF($B$6:$B$5000=B6,$AP$6:$AP$5000))
        identifierCell = identifierColumn & r.Row
        arrayFormula = "MAX(IF(" & identifierRange & "=" & identifierCell & "," & valueRange & "))"

        Range(formulaColumn & r.Row).FormulaArray = "=" & arrayFormula
    Next


    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

【讨论】:

以上是关于如何在组中获得最小值?的主要内容,如果未能解决你的问题,请参考以下文章

如果之前在组中没有看到值,则聚合值 - SQL / ORACLE

在组中的所有单元格中放置小计值

在组中的第一个 btn 上引导 CSS 边框半径

如何相对于组中的值获得行号

Rails bundler 不会在组内安装 gem

根据元素在组中的位置设置元素样式