[Risolto] Macro per generare N numeri casuali in range speci

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Avatar utente
Mr.Crocodile
Messaggi: 36
Iscritto il: mercoledì 4 giugno 2014, 19:01

[Risolto] Macro per generare N numeri casuali in range speci

Messaggio da Mr.Crocodile »

Salve, purtroppo non sono esperto di programmazione di macro e non credo sia possibile “registrare” la macro che mi servirebbe e che cerco di spiegare:
Ho un foglio di calcolo nel quale indicare in una cella il numero N di passeggeri di un volo (N può variare tra 1 e 189). Una volta inserito il dato N vorrei che tramite un pulsante, che creerò io, fossero generati N numeri casuali compresi tra 1 e 189 per simulare il riempimento dei posti a bordo e che tali numeri fossero inseriti ciascuno nella sua casella [prevederò una colonna con 189 caselle da riempire parzialmente (o interamente nel caso i passeggeri siano proprio 189) con i numeri estratti]. Dovrebbe essere una cosa tipo la tombola in cui i numeri estratti dovrebbero essere inseriti nelle loro posizioni.
Quindi per esempio se N=120 devono essere effettuate 120 estrazioni di numeri tra 1 e 189 cosicché si simuli la distribuzione dei passeggeri a bordo.
Grazie in anticipo
Andrea
Ultima modifica di Mr.Crocodile il venerdì 6 giugno 2014, 11:41, modificato 2 volte in totale.
Andrea
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro per generare N numeri casuali in un range specific

Messaggio da patel »

allega un piccolo file di esempio con anche il risultato desiderato
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
Mr.Crocodile
Messaggi: 36
Iscritto il: mercoledì 4 giugno 2014, 19:01

Re: Macro per generare N numeri casuali in un range specific

Messaggio da Mr.Crocodile »

patel ha scritto:allega un piccolo file di esempio con anche il risultato desiderato
Eccolo
File di Test.ods
(22.57 KiB) Scaricato 383 volte
Come si vede c'è la cella in cui inserire il numero di passeggeri del volo (da 1 a 189) che in questo esempio è 120
Poi vorrei che la macro generasse quindi 120 numeri casuali tra 1 e 189 (con una sola occorrenza ovviamente per ciascun estratto) e ottenere una x accanto al numero estratto così da conoscere il posto riservato per il singolo passeggero.

In pratica una volta noto il numero N dei passeggeri vorrei simulare un riempimento casuale dei relativi posti a bordo, per questo l'estrazione dei numeri deve essere tra 1 e 189 ma con un numero di estrazioni limitato al numero N di passeggeri effettivi.

Il tutto mi serve per sapere quale posizione (casuale) il singolo passeggero andrà ad occupare all'interno della cabina per motivi di calcolo del baricentro effettivo.

Spero di essere stato chiaro.
Grazie in anticipo dell'eventuale aiuto

Andrea
Andrea
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro per generare N numeri casuali in un range specific

Messaggio da Gaetanopr »

Ciao prova il file che ti allego
Allegati
File di Test.ods
(13.78 KiB) Scaricato 435 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro per generare N numeri casuali in un range specific

Messaggio da patel »

altra versione senza uso di collection per evitare i duplicati

Codice: Seleziona tutto

option base 1
Sub RandomRange()
Dim i As Integer, j As Integer, temp As Integer, arr(189), first As Integer, last As Integer
Sheet = ThisComponent.Sheets(0)
npax = Sheet.getCellRangeByName("C3").value
last = 189
first = 1
'  ------- riempie l'array
For i = first to last
   arr(i)=i
Next
' ---------- mescola l'array
For i = last To first Step -1
  j = Rnd * (last - first + 1) + first
  If j > last Then j = last
  temp = arr(i)
  arr(i) = arr(j)
  arr(j) = temp
Next
Sheet.getCellRangeByName("C9:C197").ClearContents(5)
For x = 1 To npax
     Sheet.getCellByPosition(2,arr(x)+7).String = "x"
Next x
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
Mr.Crocodile
Messaggi: 36
Iscritto il: mercoledì 4 giugno 2014, 19:01

Re: Macro per generare N numeri casuali in un range specific

Messaggio da Mr.Crocodile »

Ringrazio anzitutto entrambi per le soluzione proposte.
Da ragazzino avevo programmato un po' in basic con il vecchio commodore 16 (poi 128) ed allora avevo un manuale che spiegava la sintassi di tutti i comandi disponibili.
Ho notato che ci sono un congruo numero di somiglianze (ovviamente essendo sempre Basic) ma anche comandi che ignoro e dei quali non sono riuscito a trovare una guida completa come mi aspettavo. Probabilmente non sono stato capace di cercare bene.

Per esempio il parametro in parentesi al comando ClearContents non sono stato capace di interpretarlo. ho trovato qui https://wiki.openoffice.org/wiki/IT/Doc ... _Documents ma non descrive i valori che avete utilizzato voi (4 e 5).

Inoltre nella soluzione proposta da patel quale è il motivo di fare il ciclo for invertito anzichè diretto (da first a last)?

Cosa fa il comando

Codice: Seleziona tutto

option base 1
Andrea
Avatar utente
Mr.Crocodile
Messaggi: 36
Iscritto il: mercoledì 4 giugno 2014, 19:01

Re: Macro per generare N numeri casuali in un range specific

Messaggio da Mr.Crocodile »

Mr.Crocodile ha scritto: Cosa fa il comando

Codice: Seleziona tutto

option base 1
Ho trovato:
https://wiki.openoffice.org/wiki/IT/Doc ... ide/Arrays
Andrea
Rispondi