2016-12-16 9 views
1

私は以下のコードを作成しました。使用されたすべての行のC列の乱数を1から3まで84から下に置きます。それは3つの値に制限されているので、同じ番号をかなり頻繁に連続して取得しています。それを防ぐ方法はありますか?だからC84が "2"になったら、C85は "1"か "3"のどちらかでなければなりませんか?VBA - 後で同じ番号のないExcel RANDOM式

Sub RandomNumbers() 
Application.ScreenUpdating = False 
Range("C84") = "=RANDBETWEEN(1,3)" 
Dim LastRow As Integer 
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 
Range("C84:C" & LastRow) = "=RANDBETWEEN(1,3)" 
End Sub 
+0

出力をもっとランダムにするには、おそらく 'RANDBETWEEN(1、10)'を実行しますか?また 'ScreenUpdating'を元に戻すのを忘れました。 –

+0

なぜランダムを使用すると、連続して1 2 3だけを取り込むことができます。もっと理にかなっています。 – cyboashu

+0

1から3の間でなければならず、1,2,3のようにすることはできません。21313123123132132 ... – Robby

答えて

1

は、私たちがなしシーケンシャル繰り返しでランダムに1と3の間の値の列を生成したいと言います。 VBAなし

A1では、次のように入力します

=IF(A1=1,RANDBETWEEN(2,3),IF(A1=3,RANDBETWEEN(1,2),IF(RAND()<0.5,1,3))) 

をダウンコピーします:

=RANDBETWEEN(1,3) 

A2で入力し

enter image description here

VBAが確実に必要な場合は、VBAを使用して数式を貼り付けることができます。

+0

これは動作します!私はこのようにすることは決して考えなかったでしょう。ありがとう。 – Robby

1

方法次のループについて:

Sub RandomNumbers() 

Dim LastRow As Long 
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 

For i = 84 To LastRow 

ActiveSheet.Range("C" & i).Value = Application.WorksheetFunction.RandBetween(1, 3) 

    Do Until ActiveSheet.Range("C" & i).Value <> ActiveSheet.Range("C" & i - 1).Value 

    ActiveSheet.Range("C" & i).Value = Application.WorksheetFunction.RandBetween(1, 3) 

    Loop 

Next i 

End Sub 
+0

のようにする必要があります。これはおそらく動作しますが、ちょうど、あなたは 'ActiveSheet.'を削除できます。シート名を指定しない場合は暗黙のうちに指定します。 – user1274820

+1

新しいものを学びました。ありがとう@ user1274820 –

関連する問題