![Excel 公式(返回不同单元格减法的最大数字以及用于答案的单元格)](https://linux22.com/image/1493341/Excel%20%E5%85%AC%E5%BC%8F%EF%BC%88%E8%BF%94%E5%9B%9E%E4%B8%8D%E5%90%8C%E5%8D%95%E5%85%83%E6%A0%BC%E5%87%8F%E6%B3%95%E7%9A%84%E6%9C%80%E5%A4%A7%E6%95%B0%E5%AD%97%E4%BB%A5%E5%8F%8A%E7%94%A8%E4%BA%8E%E7%AD%94%E6%A1%88%E7%9A%84%E5%8D%95%E5%85%83%E6%A0%BC%EF%BC%89.png)
我试图返回不同单元格差异的最大数字 - 即计算后返回最大数字a1-b1,a1-c1,b1-c1。 假设
a1=3
b1=2
c1=1
然后返回的数字是 2(如a1=3 minus c1=1 gives 2
)。我还想知道答案具体来自a1-c1,或无论情况如何。实际单元格数量远高于给定的三个,因此在单独的单元格中执行每个方程是不可行的。
答案1
以下用户定义函数(UDF)可以处理任意数量的单元格(不只是三个):
Public Function MaxDiff(rIN As Range) As String
Dim r1 As Range, r2 As Range, WhichOnes As String
Dim v As Double, diff As Double
Dim difftemp As Double
diff = 0
For Each r1 In rIN
v = r1.Value
For Each r2 In rIN
difftemp = Abs(v - r2.Value)
If difftemp > diff Then
diff = difftemp
WhichOnes = r1.Address(0, 0) & "-" & r2.Address(0, 0)
End If
Next r2
Next r1
MaxDiff = CStr(diff) & " -> " & WhichOnes
End Function
它给出了范围内单元格绝对差的最大值以及这些单元格的地址。例如:
用户定义函数 (UDF) 非常容易安装和使用:
- ALT-F11 打开 VBE 窗口
- ALT-I ALT-M 打开新模块
- 粘贴内容并关闭 VBE 窗口
如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除 UDF:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要从 Excel 使用 UDF:
=MaxDiff(A1:Z1)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其工作!
答案2
三个公式:
由于最大差异始终是最大数与最小数之间的差异,因此找到差异:
=MAX($A$1:$A$10)-MIN($A$1:$A$10)
查找地址:
最大限度:
=ADDRESS(AGGREGATE(15,6,ROW($A$1:$A$10)/($A$1:$A$10=MAX($A$1:$A$10)),1),AGGREGATE(15,6,COLUMN($A$1:$A$10)/($A$1:$A$10=MAX($A$1:$A$10)),1))
最小值:
=ADDRESS(AGGREGATE(15,6,ROW($A$1:$A$10)/($A$1:$A$10=MIN($A$1:$A$10)),1),AGGREGATE(15,6,COLUMN($A$1:$A$10)/($A$1:$A$10=MIN($A$1:$A$10)),1))
如果您希望它们全部放在一个单元格中(如@Gary'sStudent),只需将它们连接起来即可:
=MAX($A$1:$A$10)-MIN($A$1:$A$10) & "->" & ADDRESS(AGGREGATE(15,6,ROW($A$1:$A$10)/($A$1:$A$10=MAX($A$1:$A$10)),1),AGGREGATE(15,6,COLUMN($A$1:$A$10)/($A$1:$A$10=MAX($A$1:$A$10)),1)) & "-" & ADDRESS(AGGREGATE(15,6,ROW($A$1:$A$10)/($A$1:$A$10=MIN($A$1:$A$10)),1),AGGREGATE(15,6,COLUMN($A$1:$A$10)/($A$1:$A$10=MIN($A$1:$A$10)),1))