数(正確になるように、擬似ランダム)ランダムを取るために、あなたはRnd
機能を使用することができます。これは0から1までの範囲の値を与えます。特定の数値を範囲から取得するには、use this solutionを使用できます。
Dim LastRow As Long, rRow As Long
LastRow = Range("A" & Rows.Count).End(xlUp).Row ' Last row based on column A
rRow = Int((LastRow - 2 + 1) * Rnd + 2)
は今、あなたは、この15回を取る必要があり、あなたは文句を言わない、同じ行を複数回取得することを確認してください:だから、最後に行2のあなたの範囲から乱数を取得するには、たとえば行うことができます。配列を使用して行番号を格納することができます。残念ながら、VBAには、特定の値が内部にあるかどうかをチェックする機能はありません。私たちは値をループすることでそれを行います。
Dim LastRow As Long, rRow As Long
Dim rowArr(14) As Long
Dim found As Boolean
LastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = 0 To 14
rRow = Int((LastRow - 2 + 1) * Rnd + 2)
found = False
If i > 0 Then
For j = i - 1 To 0 Step -1
If rowArr(j) = rRow Then found = True
Next j
End If
If found Then
i = i - 1
Else
rowArr(i) = rRow
End If
Next i
ランダムな行の値の合計が12に等しいかどうかを確認する必要はありません。また、そうでない場合は、プロセス全体をループします。ループはあなたがつもり列Gの値の合計15行を含む配列rowArr
を持って、いつ終了する
Dim LastRow As Long, rRow As Long
Dim rowArr(14) As Long
Dim found As Boolean, mainCriterium As Boolean
Dim sumOfValues As Double
mainCriterium = False
Do While mainCriterium = False
LastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = 0 To 14
rRow = Int((LastRow - 2 + 1) * Rnd + 2)
found = False
If i > 0 Then
For j = i - 1 To 0 Step -1
If rowArr(j) = rRow Then found = True
Next j
End If
If found Then
i = i - 1
Else
rowArr(i) = rRow
End If
Next i
For i = 0 To 14
sumOfValues = sumOfValues + Range("G" & rowArr(i)).Value
Next i
If sumOfValues = 12 Then mainCriterium = True
Loop
だから、12
に等しいです:全体のことは、次のようになりますあなたは15をしたいですランダムな行列Xの15個の値の合計が12と異なる場合、プログラムはさらに15個のランダムな行を取り、それらが12に等しいかどうかをチェックします。可能であれば、15個の値/セルの合計は12個に等しくなります(あなたの例によると)それらのすべてが少なくとも1の値を持つ場合、 – Limak
ohh。実際にはダミーだけです。これは実際のデータではありません。私は何を達成したいのかを見せたいだけです。ご不便をおかけして申し訳ございません 。手伝って頂けますか? @リマク –