Excel 滑块控件:如何将所有滑块的总和限制为 100?

oxo*_*oxo 3 excel vba slider

为清楚起见,请参阅图像。

滑块

我有 5 个变量(A、B、C、D 和 E),每个变量的范围都在 0-100 之间。我需要所有这些变量的总和始终为 100,而不是更多,而不是更少。但是,按照当前的设置方式,如果我将变量 A 从 21 更改为 51,则总数变为 130。

我如何设置它以便如果我更改一个变量,其他变量可以自动补偿该增加或减少,以便总数始终为100?

chr*_*sen 5

使用 Slider Change 事件,这样当一个滑块更改值时,其他滑块会缩放,使值总和为 100

示例代码,使用 3 个滑块 - 您可以缩放它以允许任意数量的滑块

Private UpdateSlider As Boolean

Private Sub ScaleSliders(slA As Double, ByRef slB As Double, ByRef slC As Double)
    Dim ScaleFactor As Double
    If (slB + slC) = 0 Then
        ScaleFactor = (100# - slA)
        slB = ScaleFactor / 2
        slC = ScaleFactor / 2

    Else
        ScaleFactor = (100# - slA) / (slB + slC)

        slB = slB * ScaleFactor
        slC = slC * ScaleFactor
    End If
End Sub


Private Sub ScrollBar1_Change()
    Dim slB As Double, slC As Double
   ' UpdateSlider = False
    If Not UpdateSlider Then
        slB = ScrollBar2.Value
        slC = ScrollBar3.Value
        ScaleSliders ScrollBar1.Value, slB, slC
        UpdateSlider = True
        ScrollBar2.Value = slB
        ScrollBar3.Value = slC
        UpdateSlider = False
    End If
End Sub

Private Sub ScrollBar2_Change()
    Dim slB As Double, slC As Double
    If Not UpdateSlider Then
        slB = ScrollBar1.Value
        slC = ScrollBar3.Value
        ScaleSliders ScrollBar2.Value, slB, slC
        UpdateSlider = True
        ScrollBar1.Value = slB
        ScrollBar3.Value = slC
        UpdateSlider = False
    End If
End Sub

Private Sub ScrollBar3_Change()
    Dim slB As Double, slC As Double
    If Not UpdateSlider Then
        slB = ScrollBar1.Value
        slC = ScrollBar2.Value
        ScaleSliders ScrollBar1.Value, slB, slC
        UpdateSlider = True
        ScrollBar1.Value = slB
        ScrollBar2.Value = slC
        UpdateSlider = False
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

请注意,滑块数据类型为整数,因此您可能需要允许舍入不等于 100