Ci scrivono:
Buonasera, io dovrei estrarre, casualmente, da una colonna di 170 celle 40 celle. Mi potreste dare info su la funzione da utilizzare ? Grazie
<!–more–>
Risposta:
Dopo aver indicato nella cella D1 il numero di valori che voglio estrarre dal mio elenco
basta premere il bottone “ESTRAI” che esegue il seguente codice (commentato):
Public Sub EstraiCelleDaElenco() Dim arr As New Collection Dim i As Long Dim IndiceCasuale As String Dim DA_ESTRARRE As Integer DA_ESTRARRE = Sheet1.Range("D1") '---------------------------------------------------------------------------------------' 'Pulisco colonna dove estrarre i numeri Sheet2.Select Last_Row2 = Sheet2.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row If Last_Row2 > 1 Then Sheet2.Range(Cells(2, 1), Cells(Last_Row2, 1)).ClearContents End If '---------------------------------------------------------------------------------------' 'Individuo ultima riga non vuota dell'elenco MAX = Sheet1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'Definisco intervallo inferiore (indice della prima riga contente i dati) MIN = 2 'é la riga del primo elemento dell'elenco 'Ripeto il ciclo DO-LOOP fino a quando il numero di elementi contenuti nel vettore 'arr' 'è uguale al numero degli elementi da estrarre 'DA_ESTRARRE Do Until arr.Count = DA_ESTRARRE 'estraggo un numero da inserire in un vettore IndiceCasuale = Int((MAX - MIN + 1) * Rnd + MIN) 'Se il numero fosse già presente nel vettore, non sarebbe possibile inserirlo e si genererebbe un errore. 'Ottengo quindi il risultato voluto (estrazione senza ripetizione) 'e faccio riprendere il ciclo On Error Resume Next arr.Add IndiceCasuale, IndiceCasuale Loop For i = 1 To arr.Count 'Ricalcolo l'ultima riga vuota del foglio in cui estrarre i dati Last_Row2 = Sheet2.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'Copio nel foglio ESTRAZIONE i valori del foglio DATI 'utilizzando i numeri di riga casuali estratti precedentemente ed inseriti nel vettore arr 'di cui prendo gli gli elementi 'i' dal numero 1 all'ultimo arr.Count Sheet2.Cells(Last_Row2 + 1, 1) = Sheet1.Cells(arr(i), 1) Next End Sub
A voi il file:
APRI
Riccardo Vincenti