我简化了我的例子:
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))
这很有效,但不幸的是,我了解到它并不是最新的,我需要一些机制来刷新数据......用户已经说过他们不想要另一个按钮来刷新数据。 / p>
我还可以使用其他功能吗?
你会使用VBA和一些'on-open,on-close'活动吗?或者也许在VBA中完成这一切?
(2)假设有一个很好的公式来解决上述问题,我还要求我的Value列实际上是一个可能为空的日期,我的实际要求是获取组中的最小日期,忽略任何空白。关于等式的任何提示?!
感谢。
答案 0 :(得分:9)
在C2中输入数组公式:
=MAX(IF(A:A=A2,B:B))
并复制下来。
必须使用CTRL-SHIFT-ENTER输入数组公式,而不仅仅是输入键
答案 1 :(得分:0)
一些事情......我的第一个问题是我现有的电子表格设置为“手动计算”而不是“自动计算”。 (在“公式|计算选项”菜单下。)
以下是我用来添加的一些示例代码,根据另一列的“分组”计算最小日期。 (注意:我的电子表格大约有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