Here is another improved version.
Use likeCode:Option Explicit Function RANDOMNUMGENERATOR(ByVal MinVal As Long, ByVal MaxVal As Long, _ Optional HowMany As Long, Optional ByVal UNIQUE As Boolean = True) '// Created by : Krishnakumar @ ExcelFox.com Dim Diff As Long, Tot As Long Dim RNG() As Long, n As Long Dim AC, RowsCount As Long Dim tmp, ColCount As Long Dim r As Long, c As Long On Error Resume Next Set AC = Application.Caller If Err.Number <> 0 Then Err.Clear: On Error GoTo 0: GoTo 2: End If On Error GoTo 0 If TypeName(AC) <> "Range" Then RANDOMNUMGENERATOR = CVErr(xlErrRef) Exit Function End If Application.Volatile RowsCount = AC.Rows.Count ColCount = AC.Columns.Count Tot = RowsCount * ColCount If HowMany <> Tot Then HowMany = Tot ReDim RNG(1 To RowsCount, 1 To ColCount) 2: Diff = MaxVal - MinVal RANDOMNUMGENERATOR = Empty If UNIQUE Then With CreateObject("scripting.dictionary") Do While .Count <= HowMany - 1 Randomize .Item(MinVal + Int(Rnd * Diff)) = Empty Loop tmp = .keys For r = 1 To RowsCount For c = 1 To ColCount RNG(r, c) = tmp(n) n = n + 1 Next Next RANDOMNUMGENERATOR = RNG 'Application.Transpose(.keys) End With Else For r = 1 To RowsCount For c = 1 To ColCount RNG(r, c) = MinVal + Int(Rnd * Diff) Next Next RANDOMNUMGENERATOR = RNG End If End Function
Array enter
=RANDOMNUMGENERATOR(1,100)
in A1:B10 or
A1:A10 or
A1:J1




Reply With Quote

Bookmarks