Excel VBA質問箱 IV

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

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


3900 / 76734 ←次へ | 前へ→

【78463】Re:数字の出てくる確率を変更したいのですが・・・
回答  γ  - 16/9/25(日) 12:26 -

引用なし
パスワード
   Dictionaryを使わない版も示しておきましょう。
たぶん、こちらのほうが理解し易いでしょうし、
追加の加工もし易いはずです。

Option Explicit

Sub test()     ' 繰り返し判定版
  Dim i As Long
  Dim j As Long
  Dim n As Long
  Dim m As Long
  Dim a As Long
  Dim b As Long
  Dim k As Long
  Dim seq As Long
    
  Range("A1").CurrentRegion.Clear
  
  For k = 1 To 50
    '最初の二つをランダムにセット(そのままにしてあります)
    For i = 1 To 2
      j = Int(((4 - 1 + 1) * Rnd) + 1)
      If i = 2 Then
        Do While Cells(i - 1, k).Value = j
          j = Int(((4 - 1 + 1) * Rnd) + 1)
        Loop
      End If
      Cells(i, k).Value = j
    Next i
    
    '使用する系列
    seq = WorksheetFunction.RandBetween(1, 2)

    For n = 3 To 100
      a = Cells(n - 2, k).Value
      b = Cells(n - 1, k).Value
      
      ' 特定の組み合わせのとき、系列を再検討
      If (a = 4 And b = 3) Or (a = 1 And b = 4) Or (a = 2 And b = 1) Then
        seq = whichSequence(0.85)
      End If
      
      '次の数値を得る
      If seq = 1 Then
        Cells(n, k).Value = nextByA(a, b)
      Else
        Cells(n, k).Value = nextByB(a, b)
        Cells(n, k).Interior.Color = 15773696  '背景色をつけました
      End If
    Next n
  Next k

End Sub
Function whichSequence(v As Double) As Long
  If Rnd < v Then
    whichSequence = 1
  Else
    whichSequence = 2
  End If
End Function

Function nextByA(a As Long, b As Long) As Long
  Select Case True
    Case a = 3 And b = 2: nextByA = 4
    Case a = 3 And b = 4: nextByA = 2
    Case a = 4 And b = 1: nextByA = 3
    Case a = 1 And b = 2: nextByA = 1
    Case a = 2 And b = 4: nextByA = 1
    Case a = 4 And b = 3: nextByA = 2
    Case a = 3 And b = 1: nextByA = 2
    Case a = 1 And b = 4: nextByA = 3
    Case a = 4 And b = 2: nextByA = 3
    Case a = 2 And b = 1: nextByA = 4
    Case a = 1 And b = 3: nextByA = 4
    Case a = 2 And b = 3: nextByA = 1 '■追加
  End Select
End Function

Function nextByB(a As Long, b As Long) As Long
  Select Case True
    Case a = 3 And b = 2: nextByB = 3
    Case a = 3 And b = 4: nextByB = 1
    Case a = 4 And b = 1: nextByB = 2
    Case a = 1 And b = 2: nextByB = 4
    Case a = 2 And b = 4: nextByB = 3
    Case a = 4 And b = 3: nextByB = 1
    Case a = 3 And b = 1: nextByB = 4
    Case a = 1 And b = 4: nextByB = 2
    Case a = 4 And b = 2: nextByB = 1
    Case a = 2 And b = 1: nextByB = 3
    Case a = 2 And b = 3: nextByB = 4 '■修正
    Case a = 1 And b = 3: nextByB = 2 '■追加
  End Select
End Function

25 hits

【78443】数字の出てくる確立を変更したいのですが・・・ m 16/9/24(土) 11:35 質問[未読]
【78444】Re:数字の出てくる確立を変更したいのです... γ 16/9/24(土) 12:18 発言[未読]
【78445】Re:数字の出てくる確立を変更したいのです... m 16/9/24(土) 13:01 質問[未読]
【78446】Re:数字の出てくる確立を変更したいのです... γ 16/9/24(土) 13:54 発言[未読]
【78447】Re:数字の出てくる確立を変更したいのです... m 16/9/24(土) 14:27 質問[未読]
【78448】Re:数字の出てくる確立を変更したいのです... m 16/9/24(土) 14:37 質問[未読]
【78449】Re:数字の出てくる確率を変更したいのです... γ 16/9/24(土) 14:53 発言[未読]
【78450】Re:数字の出てくる確率を変更したいのです... m 16/9/24(土) 15:20 質問[未読]
【78451】Re:数字の出てくる確率を変更したいのです... γ 16/9/24(土) 15:55 発言[未読]
【78456】Re:数字の出てくる確率を変更したいのです... γ 16/9/24(土) 19:08 発言[未読]
【78457】Re:数字の出てくる確率を変更したいのです... γ 16/9/24(土) 19:46 発言[未読]
【78458】Re:数字の出てくる確率を変更したいのです... m 16/9/24(土) 22:41 お礼[未読]
【78459】Re:数字の出てくる確率を変更したいのです... m 16/9/24(土) 23:32 お礼[未読]
【78462】Re:数字の出てくる確率を変更したいのです... γ 16/9/25(日) 12:24 発言[未読]
【78463】Re:数字の出てくる確率を変更したいのです... γ 16/9/25(日) 12:26 回答[未読]
【78464】Re:数字の出てくる確率を変更したいのです... m 16/9/25(日) 13:30 お礼[未読]
【78460】Re:数字の出てくる確率を変更したいのです... m 16/9/24(土) 23:56 お礼[未読]

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