返回列表 上一主題 發帖

困難題 求高手相助!!!!

本帖最後由 jackyq 於 2018-2-14 13:31 編輯

Sub 最簡單法___________________()

'組數過大時, 運算會極度耗時

  平均值 = [A2]
    上限 = [B2]
    下限 = [C2]
    組數 = [D2]

  Randomize
  
  Do
    Value_Sum = 0
    For w = 1 To (組數 - 1)
        Value = Rnd * (上限 - 下限) + 下限
        Value_Sum = Value_Sum + Value
        Range("G" & w) = Value
    Next
    殘值 = 平均值 * 組數 - Value_Sum
    循環次數 = 循環次數 + 1
   
  Loop Until 殘值 >= 下限 And 殘值 <= 上限
  Range("G" & w) = 殘值
  Debug.Print 循環次數
End Sub

TOP

本帖最後由 jackyq 於 2018-2-14 13:32 編輯

Sub 最小循環___________________()

  平均值 = [A2]
    上限 = [B2]
    下限 = [C2]
    組數 = [D2]

  Randomize
   
  For w = 1 To (組數 - 1)
      Value = Rnd * (上限 - 下限) + 下限
      Value_Sum = Value_Sum + Value
      Range("G" & w) = Value
  Next
  Value = 平均值 * 組數 - Value_Sum
  If Value < 下限 Then
     殘值 = Value - 下限
     Value = 下限
  End If
  If Value > 上限 Then
     殘值 = Value - 上限
     Value = 上限
  End If
  Range("G" & w) = Value
        
  If 殘值 = 0 Then Exit Sub

  Do
  For w = 1 To 組數
        value_try = Range("G" & w) + (殘值 / 組數)
     If value_try >= 下限 And value_try <= 上限 Then
        Range("G" & w) = value_try
        alls = alls + 1
     If alls >= 組數 Then Exit Do
     End If
  Next
  Loop
   
End Sub

TOP

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題