Discussione:
come faccio a estrarre record random in excel?
(troppo vecchio per rispondere)
carlo_excel_52
2005-08-04 11:56:02 UTC
Permalink
ho la necessità di estrarre, in modalità random, dei gruppi di records da
excel per es.: avendo una lista di residenti in diversi comuni vorrei una
lista, in automatico e casuale, di un certo numero di residenti in una via di
un certo comune. Il tutto in modo casuale. E' difficile?
Franz Verga
2005-08-04 12:55:49 UTC
Permalink
Post by carlo_excel_52
ho la necessità di estrarre, in modalità random, dei gruppi di
records da excel per es.: avendo una lista di residenti in diversi
comuni vorrei una lista, in automatico e casuale, di un certo numero
di residenti in una via di un certo comune. Il tutto in modo casuale.
E' difficile?
Ciao Carlo.
Potresti associare ad ogni record un numero progressivo e poi utilizzare la
funzione CASUALE() per generare dei numeri casuali (poiché i numeri generati
sono tra 0 ed 1, lidevi moltiplicare per il numero totale di record, cioè se
i tuoi record fossero 50 dovresti moltiplicare i numeri per 50, in modo da
avere numeri compresi tra 0 e 50) e, quindi, utilizzare il CERCA.VERT per
estrarre i record in base ai numeri casuali generati.
--
Spero d'esserti stato d'aiuto...

Ciao

Franz Verga

----------------------------
Per rispondermi traduci InVento in inglese (no maiuscole)
----------------------------
eliano
2005-08-04 13:01:06 UTC
Permalink
Post by carlo_excel_52
ho la necessità di estrarre, in modalità random, dei gruppi di records da
excel per es.: avendo una lista di residenti in diversi comuni vorrei una
lista, in automatico e casuale, di un certo numero di residenti in una via di
un certo comune. Il tutto in modo casuale. E' difficile?
Ciao Carlo.
Cerca su questo NG: RND dovresti trovare qualcosa di utile.
Saluti
Eliano
P.S. Non è difficile.:-))
cucchiaino
2005-08-04 15:16:47 UTC
Permalink
Post by carlo_excel_52
ho la necessità di estrarre, in modalità random, dei gruppi di records da
excel per es.: avendo una lista di residenti in diversi comuni vorrei una
lista, in automatico e casuale, di un certo numero di residenti in una via di
un certo comune. Il tutto in modo casuale. E' difficile?
Ciao carlo.

Non è difficile, Franz ti ha già "infarinato".
E' un quesito interessante. E' importante:

- come è organizzato il tuo database

- definire il "certo numero"

- in ogni via c'è sempre un numero sufficiente
di residenti per soddisfare quel "certo numero"?




()-- cucchiaino
carlo_excel_52
2005-08-04 17:16:03 UTC
Permalink
bene:
-il DB è organizzato per comune/indirizzo/nome_residente
-diciamo che dovrebbe scegliere le vie con almeno 10 abitanti
-se non c'è un numero sufficiente di abitanti tralascia e passa ad un'altra
via.
grazie
Post by cucchiaino
Post by carlo_excel_52
ho la necessità di estrarre, in modalità random, dei gruppi di records da
excel per es.: avendo una lista di residenti in diversi comuni vorrei una
lista, in automatico e casuale, di un certo numero di residenti in una via di
un certo comune. Il tutto in modo casuale. E' difficile?
Ciao carlo.
Non è difficile, Franz ti ha già "infarinato".
- come è organizzato il tuo database
- definire il "certo numero"
- in ogni via c'è sempre un numero sufficiente
di residenti per soddisfare quel "certo numero"?
()-- cucchiaino
cucchiaino
2005-08-04 20:57:45 UTC
Permalink
Post by carlo_excel_52
-il DB è organizzato per comune/indirizzo/nome_residente
-diciamo che dovrebbe scegliere le vie con almeno 10 abitanti
-se non c'è un numero sufficiente di abitanti tralascia e passa ad un'altra
via.
bene, un'ultima domanda:

il campo indirizzo contiene solo la via oppure è "sporco"
del numero civico?


()-- cucchiaino
carlo_excel_52
2005-08-05 07:16:04 UTC
Permalink
contiene anche il civico!
Post by cucchiaino
Post by carlo_excel_52
-il DB è organizzato per comune/indirizzo/nome_residente
-diciamo che dovrebbe scegliere le vie con almeno 10 abitanti
-se non c'è un numero sufficiente di abitanti tralascia e passa ad un'altra
via.
il campo indirizzo contiene solo la via oppure è "sporco"
del numero civico?
()-- cucchiaino
carlo_excel_52
2005-08-05 09:25:19 UTC
Permalink
rettifico: Il civico è separato dall'indirizzo
Post by cucchiaino
Post by carlo_excel_52
-il DB è organizzato per comune/indirizzo/nome_residente
-diciamo che dovrebbe scegliere le vie con almeno 10 abitanti
-se non c'è un numero sufficiente di abitanti tralascia e passa ad un'altra
via.
il campo indirizzo contiene solo la via oppure è "sporco"
del numero civico?
()-- cucchiaino
cucchiaino
2005-08-05 18:02:35 UTC
Permalink
Post by carlo_excel_52
rettifico: Il civico è separato dall'indirizzo
Post by carlo_excel_52
-il DB è organizzato per comune/indirizzo/nome_residente
-diciamo che dovrebbe scegliere le vie con almeno 10 abitanti
-se non c'è un numero sufficiente di abitanti tralascia e passa ad
un'altra via.
Ciao Carlo.

Allora.
Ho supposto che i dati, comune/indirizzo/nome_residente,
siano rispettivamente nelle colonne A B C.

La riga 1 contiene le intestazioni.

Ho supposto che la colonna E sia disponibile a raccogliere
l'output della macro.

Questa la macro:

----------------------------------------
Sub stessastrada()
Dim v(1 To 2000, 1 To 200) As Long
Dim nrn(1 To 2000) As Long
Dim cp(1 To 2000) As String
Dim suff() As Long
Dim scelti() As Boolean, si As Boolean

Dim r As Long, x As Long, k As Long
Dim w As Long, t As Long, cop As Long
Dim xn As Long, u As Long, nv As Long
Dim minimo As Integer, q As Integer
Dim z As Integer
Dim g As Variant
Dim c As String, via As String
Dim n As String, coppia As String

Range("E1:E100").ClearContents

minimo = 10

GoSub prepara

Randomize Time
x = Int(Rnd() * t) + 1
cop = suff(x)
g = Split(cp(cop), ":")
Cells(1, 5) = g(0)
Cells(2, 5) = g(1)
k = 3
w = nrn(cop)
ReDim scelti(1 To w)

For q = 1 To minimo
xn = Int(Rnd() * (w + 1 - q)) + 1
z = 0
For u = 1 To w
If Not (scelti(u)) Then
z = z + 1
If z = xn Then
scelti(u) = True
k = k + 1
Cells(k, 5) = Cells(v(cop, u), 3)
Exit For
End If
End If
Next
Next
Exit Sub


prepara:
nv = 0


r = 2
While Cells(r, 2).Value <> ""
c = Cells(r, 1)
via = Cells(r, 2)
n = Cells(r, 3)

coppia = c & ":" & via
si = False
For x = 1 To nv
If cp(x) = coppia Then
si = True
Exit For
End If
Next

If si = False Then
nv = nv + 1
cp(nv) = coppia
x = nv
End If

nrn(x) = nrn(x) + 1
v(x, nrn(x)) = r
r = r + 1
Wend

For x = 1 To nv
If nrn(x) >= minimo Then
t = t + 1
End If
Next

ReDim suff(1 To t)

t = 0
For x = 1 To nv
If nrn(x) >= minimo Then
t = t + 1
suff(t) = x
End If
Next
Return

End Sub
----------------------------------

Sostituisci la riga con

minimo = 10

con un altro numero oppure inserisci una
richiesta di input.


I risultati:

E1: il paese

E2: la via

Da E4 in giù i nomi (casuali) con lo stesso indirizzo.



So benissimo che è migliorabile, ma è quello che
mi è venuto in mente e che sono riuscito a
realizzare nel poco tempo che ho a disposizione.

Aspettando il feed back ...

()-- cucchiaino
carlo_excel_52
2005-08-06 05:57:03 UTC
Permalink
...questa mattina ho avuto la sorpresa di trovare la soluzione al mio quesito
bella e pronta! Ti ringrazio infinitamente. E' la prima volta che ricorro a
questo aiuto e, oltre ad aver cliccato la casellina SI sull'utilità della
risposta, non so come fare per assegnarti il feed back positivo. Di nuovo
grazie e buon fine settimana!
Post by Franz Verga
Post by carlo_excel_52
rettifico: Il civico è separato dall'indirizzo
Post by carlo_excel_52
-il DB è organizzato per comune/indirizzo/nome_residente
-diciamo che dovrebbe scegliere le vie con almeno 10 abitanti
-se non c'è un numero sufficiente di abitanti tralascia e passa ad
un'altra via.
Ciao Carlo.
Allora.
Ho supposto che i dati, comune/indirizzo/nome_residente,
siano rispettivamente nelle colonne A B C.
La riga 1 contiene le intestazioni.
Ho supposto che la colonna E sia disponibile a raccogliere
l'output della macro.
----------------------------------------
Sub stessastrada()
Dim v(1 To 2000, 1 To 200) As Long
Dim nrn(1 To 2000) As Long
Dim cp(1 To 2000) As String
Dim suff() As Long
Dim scelti() As Boolean, si As Boolean
Dim r As Long, x As Long, k As Long
Dim w As Long, t As Long, cop As Long
Dim xn As Long, u As Long, nv As Long
Dim minimo As Integer, q As Integer
Dim z As Integer
Dim g As Variant
Dim c As String, via As String
Dim n As String, coppia As String
Range("E1:E100").ClearContents
minimo = 10
GoSub prepara
Randomize Time
x = Int(Rnd() * t) + 1
cop = suff(x)
g = Split(cp(cop), ":")
Cells(1, 5) = g(0)
Cells(2, 5) = g(1)
k = 3
w = nrn(cop)
ReDim scelti(1 To w)
For q = 1 To minimo
xn = Int(Rnd() * (w + 1 - q)) + 1
z = 0
For u = 1 To w
If Not (scelti(u)) Then
z = z + 1
If z = xn Then
scelti(u) = True
k = k + 1
Cells(k, 5) = Cells(v(cop, u), 3)
Exit For
End If
End If
Next
Next
Exit Sub
nv = 0
r = 2
While Cells(r, 2).Value <> ""
c = Cells(r, 1)
via = Cells(r, 2)
n = Cells(r, 3)
coppia = c & ":" & via
si = False
For x = 1 To nv
If cp(x) = coppia Then
si = True
Exit For
End If
Next
If si = False Then
nv = nv + 1
cp(nv) = coppia
x = nv
End If
nrn(x) = nrn(x) + 1
v(x, nrn(x)) = r
r = r + 1
Wend
For x = 1 To nv
If nrn(x) >= minimo Then
t = t + 1
End If
Next
ReDim suff(1 To t)
t = 0
For x = 1 To nv
If nrn(x) >= minimo Then
t = t + 1
suff(t) = x
End If
Next
Return
End Sub
----------------------------------
Sostituisci la riga con
minimo = 10
con un altro numero oppure inserisci una
richiesta di input.
E1: il paese
E2: la via
Da E4 in giù i nomi (casuali) con lo stesso indirizzo.
So benissimo che è migliorabile, ma è quello che
mi è venuto in mente e che sono riuscito a
realizzare nel poco tempo che ho a disposizione.
Aspettando il feed back ...
()-- cucchiaino
ivano
2005-08-06 11:24:40 UTC
Permalink
Post by carlo_excel_52
...questa mattina ho avuto la sorpresa di trovare la soluzione al mio quesito
bella e pronta! Ti ringrazio infinitamente. E' la prima volta che ricorro a
questo aiuto e, oltre ad aver cliccato la casellina SI sull'utilità della
risposta, non so come fare per assegnarti il feed back positivo. Di nuovo
grazie e buon fine settimana!
Un plauso anche per il feedback...
troppo spesso dimenticato...!

ivano
cucchiaino
2005-08-06 11:54:01 UTC
Permalink
carlo_excel_52:

Ciao Carlo.
Post by carlo_excel_52
...questa mattina ho avuto la sorpresa di trovare la soluzione al mio quesito
bella e pronta!
Hai aiutato anche tu, descrivendo in modo preciso il problema.
Post by carlo_excel_52
Ti ringrazio infinitamente.
Grazie a te per aver posto un quesito interessane.
Post by carlo_excel_52
E' la prima volta che ricorro a
questo aiuto e, oltre ad aver cliccato la casellina SI sull'utilità della
risposta, non so come fare per assegnarti il feed back positivo.
Ecco: l'hai appena fatto! E, come dice giustamente Ivano,
non sempre ciò avviene.
Post by carlo_excel_52
Di nuovo
grazie e buon fine settimana!
Di nuovo grazie e ... a rivederci su questo schermo!



()-- cucchiaino
carlo_excel_52
2005-08-07 07:27:03 UTC
Permalink
... ciao,
l'appetito vien mangiando!?!!!
se volessi ripetere il ciclo per tre o quattro volte (quindi 4 differenti
comuni) e volessi porre un flag sugli abitanti già estratti si potrebbe fare?
Mi potresti dare una dritta? Con stima Carlo
Post by Franz Verga
Ciao Carlo.
Post by carlo_excel_52
...questa mattina ho avuto la sorpresa di trovare la soluzione al mio quesito
bella e pronta!
Hai aiutato anche tu, descrivendo in modo preciso il problema.
Post by carlo_excel_52
Ti ringrazio infinitamente.
Grazie a te per aver posto un quesito interessane.
Post by carlo_excel_52
E' la prima volta che ricorro a
questo aiuto e, oltre ad aver cliccato la casellina SI sull'utilità della
risposta, non so come fare per assegnarti il feed back positivo.
Ecco: l'hai appena fatto! E, come dice giustamente Ivano,
non sempre ciò avviene.
Post by carlo_excel_52
Di nuovo
grazie e buon fine settimana!
Di nuovo grazie e ... a rivederci su questo schermo!
()-- cucchiaino
eliano
2005-08-04 16:41:05 UTC
Permalink
Post by carlo_excel_52
ho la necessità di estrarre, in modalità random, dei gruppi di records da
excel per es.: avendo una lista di residenti in diversi comuni vorrei una
lista, in automatico e casuale, di un certo numero di residenti in una via di
un certo comune. Il tutto in modo casuale. E' difficile?
Ciao Carlo.
Vedo che non hai dato risposta ai consigli di Franz nè tantomeno alle
domande di cucchiaino, domande molto pertinenti e condizionanti della
eventuale soluzione.
Restando in attesa di conoscere la situazione oggettiva ti segnalo un sito
dal quale potrai ricavare qualche lume in merito ad operazioni random:
http://www.ennius.altervista.org/vba/vba6.php
Saluti
Eliano
Loading...