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

我有 5 个变量(A、B、C、D 和 E),每个变量的范围都在 0-100 之间。我需要所有这些变量的总和始终为 100,而不是更多,而不是更少。但是,按照当前的设置方式,如果我将变量 A 从 21 更改为 51,则总数变为 130。
我如何设置它以便如果我更改一个变量,其他变量可以自动补偿该增加或减少,以便总数始终为100?
使用 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