Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3033 / 76735 ←次へ | 前へ→

【79341】Re:ランダムな数字の入力方法
回答  γ  - 17/8/1(火) 6:16 -

引用なし
パスワード
   参考にして下さい。
端数処理やシートへのあてはめは、
そちらで対応してください。

Option Explicit

Dim higher As Double
Dim center As Double
Dim lower  As Double

Function getRand(x As Double, y As Double) As Double
  getRand = x + (y - x) * Rnd()
End Function

' 範囲内ならそのまま、範囲外なら補正してランダム値を返す
' opt=0: センターまでの間のランダム値
' opt=1: 上下限値寄りのランダム値
' opt=0: センター寄りのランダム値
Function getRandExt(x As Double, opt As Long) As Double
  If x > higher Then
    Select Case opt
    Case 0: getRandExt = getRand(center, higher)
    Case 1: getRandExt = getRand((center + higher) / 2, higher)
    Case 2: getRandExt = getRand(center, (center + higher) / 2)
    End Select
  ElseIf x < lower Then
    Select Case opt
    Case 0: getRandExt = getRand(lower, center)
    Case 1: getRandExt = getRand(lower, (lower + center) / 2)
    Case 2: getRandExt = getRand((lower + center) / 2, center)
    End Select
  Else
    getRandExt = x
  End If
End Function

Sub test()
  Dim ary(1 To 5) As Double
  Dim k As Long
  
  higher = 800.55555
  center = 775.55555
  lower = 750.55555

  ary(1) = 810: ary(2) = 775: ary(3) = 815: ary(4) = 740: ary(5) = 750
  
  For k = 1 To 5
    Debug.Print getRandExt(ary(k), 0)
  Next

  Debug.Print "----慎重に戻す---------------"
  For k = 1 To 5
    Debug.Print getRandExt(ary(k), 1)
  Next

  Debug.Print "----大胆に戻す---------------"
  For k = 1 To 5
    Debug.Print getRandExt(ary(k), 2)
  Next
End Sub

1 hits

【79338】ランダムな数字の入力方法 アエロリット 17/7/31(月) 20:59 質問[未読]
【79339】Re:ランダムな数字の入力方法 γ 17/7/31(月) 23:04 発言[未読]
【79340】Re:ランダムな数字の入力方法 アエロリット 17/7/31(月) 23:29 発言[未読]
【79341】Re:ランダムな数字の入力方法 γ 17/8/1(火) 6:16 回答[未読]
【79343】Re:ランダムな数字の入力方法 アエロリット 17/8/1(火) 22:33 お礼[未読]

3033 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free