Il giorno martedì 5 febbraio 2013 01:30:45 UTC+1, Bruno Campanini ha scritto:
> It happens that Claudio Designo formulated :
>
> > Salve
>
> >
>
> > ho la necessità di estrarre 600 righe, in maniera casuale, con estrazione
>
> > senza ripetizione, da un elenco di 22.000 righe e 4 colonne (nome, indirizzo,
>
> > cap, città) mi hanno consigliato la macro appresso riportata ma non funziona.
>
> > Chi può aiutarmi? utilizzo il buon vecchio excel 2007
>
>
>
> Questa genera 600 numeri casuali unici
>
> compresi fra 1 e 22000
>
> ====================================
>
> Public Sub Eran600GiovaniEforti()
>
> Dim extRows As New Collection, S As Long
>
> Dim TargetRange As Range, i As Long
>
> Set TargetRange = [BC!K1]
>
> Do
>
> S = Int(22000 * Rnd + 1)
>
> On Error Resume Next
>
> extRows.Add S, CStr(S)
>
> On Error GoTo 0
>
> Loop Until extRows.count = 600
>
> For i = 1 To extRows.count
>
> TargetRange(i) = extRows(i)
>
> Next
>
> End Sub
>
> ====================================
>
>
>
> Bruno
accipicchia ... ancora forza bruta poco performante ...
questa è una udf che restituisce una matrice di ListCoun elementi diversi e casuali nell'intervallo bottom-top
Function GetRandList_g(ListCount As Long, Bottom As Long, Top As Long)
Dim x As Long, i As Long, z As Long, m As Long
If Top < Bottom Or ListCount < 1 Then
GetRandList_g = Null
Exit Function
End If
m = Top - Bottom + 1
ReDim tb(1 To m)
For i = 1 To m
tb(i) = i + Bottom - 1
Next
For i = 1 To m
x = Int(Rnd() * m) + 1
z = tb(x)
tb(x) = tb(i)
tb(i) = z
Next
If ListCount < m Then
ReDim Preserve tb(1 To ListCount)
End If
GetRandList_g = Application.Transpose(tb)
End Function
saluti
r