|
こんなかな?
Option Explicit
Public Sub Sample()
'◆乱数の上限値
Const clngUpper As Long = 5
'◆乱数の下限値
Const clngLower As Long = 1
'◆取り出す個数
Const clngNumber As Long = 4
'◆出力先頭行位置
Const clngRow As Long = 1
'◆出力先頭列
Const clngColumn As Long = 1
Dim i As Long
Dim lngCount As Long
Dim lngRows As Long
Dim rngResult As Range
Dim lngData(1 To clngNumber, 1 To 1) As Long
Dim lngMark As Long
Dim strProm As String
'出力Listの先頭セル位置
Set rngResult = ActiveSheet.Cells(clngRow, clngColumn)
rngResult.EntireColumn.ClearContents
Randomize
Do
'乱数を発生
lngMark = Int((clngUpper - clngLower + 1) * Rnd + clngLower)
'配列に乱数が重複しているか確認
For i = 1 To lngCount
If lngData(i, 1) = lngMark Then
Exit For
End If
Next i
'重複が無いなら
If i > lngCount Then
'発生した乱数を配列に代入
lngCount = lngCount + 1
lngData(lngCount, 1) = lngMark
End If
'代入した個数が指定個数になるまで繰り返し
Loop Until lngCount = clngNumber
'出力
rngResult.Resize(clngNumber).Value = lngData
strProm = "処理が完了しました"
Wayout:
Set rngResult = Nothing
MsgBox strProm, vbInformation
End Sub
|
|