如何将值约束到excel中的范围?

时间:2016-11-24 01:47:10

标签: excel excel-vba vba

在C ++中,我会使用boost::clamp。基本上我有一些excel功能

A1*B2+C3+D4

我想将其约束为+/-某个数字,将其称为X1。显而易见的是:

MAX(-X1, MIN(X1, A1*B2+C3+D4))

但我希望能够做到这一点:

CLAMP(A1*B2+C3+D4, -X1, X1)

这或类似的东西存在吗?我只是很好奇 - 显然这种解决方法有效,它只是丑陋。

2 个答案:

答案 0 :(得分:21)

这可以使用MEDIAN完成。 MEDIAN选择三个值的中间值,从而有效地限制下限和上限。

例如,假设您的最小值为5,最大值为10:

=MEDIAN(5,0,10)是5

=MEDIAN(5,7,10)是7

=MEDIAN(5,12,10)是10

答案 1 :(得分:0)

使用电子表格公式我不认为你可以比min / max构造做得更好。您可以在VBA中写clamp

Function clamp(x As Double, lower As Double, upper As Double) As Double
    If x < lower Then
        clamp = lower
    ElseIf x > upper Then
        clamp = upper
    Else
        clamp = x
    End If
End Function

如果您在标准代码模块中输入,那么您可以例如做这样的事情:

enter image description here

在A栏中,我的值在0到2 * pi范围内。在C2中,我的值为0.5。在B1中我输入了

=clamp(SIN(A1),-$C$2,$C$2)

并复制下来。该图显示了结果。

(由于我提供了VBA解决方案,我将添加Excel-VBA标记。即使您更喜欢非VBA解决方案,未来其他人也可能会搜索问题并熟悉VBA溶液)。