Corso VBA Excel ITA - 24 - Come generare numeri casuali, e differenze tra For e While

  Рет қаралды 10,622

NickTheGeek

NickTheGeek

Күн бұрын

Пікірлер: 89
@andreagiovannini2858
@andreagiovannini2858 5 ай бұрын
Grazie Nick, anche questo video chiarissimo!
@riccardoricky1335
@riccardoricky1335 3 жыл бұрын
@NickTheGeek anche questa una lezione chiarissima, non sapevo nulla di VBA ora inizio a capire questo linguaggio di programmazione e grazie a queste spiegazioni così chiare e semplici finalmente sono riuscito a creare dei piccoli programmi utili al mio lavoro. Grazie Nick, chiarissima la distinzione tra ciclo for...next e do while...loop
@NickTheGeek
@NickTheGeek 3 жыл бұрын
Grazie a te per il commento Riccardo.
@robertobraicovick6867
@robertobraicovick6867 6 жыл бұрын
Grazie!
@emanuelemansueti8681
@emanuelemansueti8681 5 жыл бұрын
Ciao NickTheGeek. Innanzitutto grazie per questi video, sono molto utili. Ma è proprio necessario inizializzare la variabile "contatore" con 0 (13:26 del video)? non è implicito? Io ho provato senza mettere l'istruzione contatore=0 prima del loop ed infatti mi ha funzionato correttamente
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ciao, probabilmente avendo dichiarato la variabile come integer viene inizializzata comunque a zero; quindi in effetti non è necessaria l'inizializzazione; grazie per la segnalazione
@frasier76
@frasier76 3 жыл бұрын
Ciao Nick ho lasciato il like per questi due video sul ciclo while do Forse sarebbe utile allegare i file di esempio nei video. Grazie
@NickTheGeek
@NickTheGeek 3 жыл бұрын
Grazie a te Lorenzo, sì sarebbe stato utile allegarli forse sempre, ma inizierò a farlo solo dal video 79 per il progetto finale.
@tecnicip1021
@tecnicip1021 4 жыл бұрын
Nick, desidero ringraziarti per aver creato questo corso. Grazie al tuo lavoro mi sono appassionato a VBA. Una richiesta se possibile. Potresti spiegarmi come estrarre random "condizionati" con percentuali pre impostate? Mi spiego meglio. Desidero che in una cella esca come risultato la lettera A con una probabilità del 20%, o la lettera "B" con una probabilità del 35%, o la lettera "C" con una probabilità dell' 8%.. e così via. Una estrazione random ma condizionata dalle percentuali che assegno come probabilità. GRAZIE.
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao, posso scrivere direttamente qui il codice; per questo ho cancellato l'altro tuo commento in cui mi scrivevi il tuo indirizzo email. Farei un'estrazione di un numero casuale intero tra 1 e 100, e quindi un controllo su quel numero per stabilire la lettera da estrarre; ad esempio, se vuoi A al 50%, B al 30% e C al 20%: Sub random() x = Int(100 * Rnd + 1) If x
@GiuseppeVetti
@GiuseppeVetti 3 жыл бұрын
@@NickTheGeek Dim x As integer :) ci ho messo mezz'ora a capire perchè non funzionava :)
@NickTheGeek
@NickTheGeek 3 жыл бұрын
@@GiuseppeVetti ciao Giuseppe, a cosa ti riferisci? Non funzionava la sub che ho scritto sopra?
@RanieroCiani
@RanieroCiani 5 жыл бұрын
Ciao Nicola, avrei un domanda…. In una cartella di (es.) 5 fogli, voglio una sub che mi elenchi i nomi dei fogli e mi crei collegamenti Hypertestuali a ciascuno di essi (cella a1 di ciascuno). Quando clicco sui collegamenti che mi ha creato, funziona quasi sempre correttamente, ma in certi casi mi dice “riferimento non valido”. Hai un’idea del perché? Ti allego le righe di codice, e grazie 1000! AGGIORNAMENTO (risolto!): il problema era che i nomi dei fogli non devono contenere trattini (e forse neppure altri caratteri speciali) per funzionare come collegamenti ipertest! grazie Sub WW1() 'stampa la lista dei nomi dei fogli con collegamento Hypertestuale Dim i As Integer For i = 1 To Sheets.Count ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _ SubAddress:=Sheets(i).Name & "!A1", _ TextToDisplay:=Sheets(i).Name & "!A1" Cells(i + 1, 1).Select Next i End Sub
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ottimo, problema risolto :)
@Giulio76fra
@Giulio76fra 4 жыл бұрын
Buonasera NickTheGeek davvero complimenti per il corso grazie! unico dubbio, ho copiato pari pari la macro che hai spiegato in questo video, se la lancio una volta funziona perfettamente, ma se la lancio una seconda volta, il debug print restituisce la nota "il numero 5 è uscito dopo 0 tentativi" devo per forza resettare cliccando il tasto "stop" anche se la macro è conclusa, sembra che rimanga memorizzato il valore di "i" del precendete avvio della macro ... come mai??
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao Giulio, a me sembra che funzioni regolarmente, anche lanciandola più volte di seguito; se sei certo che la sub sia identica alla mia, prova (se vuoi) a mandarmi il file all'indirizzo nickthegeek.yt@gmail.com
@Giulio76fra
@Giulio76fra 4 жыл бұрын
Buonasera NickTheGeek, grazie per la mail (in futuro la sfrutterò di sicuro :-) ) e la tua risposta. Credo di aver capito qual'è il problema ... avevo dichiarato le variabili "i" e "contatore" come Private all'esterno della macro invece che dentro, infatti inserendole a l'interno della macro "dim" funziona correttamente, questo può significare che non in tutti casi le variabili dichiarate come Public o Private si comportano allo stesso modo di quando si dichiarano all'interno della macro? ad ogni modo con questa accortezza ho risolto! ... e comunque ...sei mitico!
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Eh addirittura mitico, grazie! Comunque sì, se dichiari la variabile in testa al modulo, allora resta "viva" anche dopo la fine della subroutine, mantenendo il valore assunto in precedenza. In generale, puoi dichiarare le variabili come: - Dim, sia a livello di subroutine che di modulo, a seconda che tu voglia farle vedere solo dalla procedura oppure da tutto il modulo; - Private, solo a livello di modulo, per farle vedere da tutto il modulo (uguale a Dim) - Public, solo a livello di modulo, per farle vedere da tutto il progetto - Static, solo a livello di subroutine, per non far azzerare il loro valore quando la subroutine termina; è diversa dalla dichiarazione a livello di modulo, perché con Static la variabile viene comunque vista solo dalla subroutine in cui viene dichiarata, ma se la subroutine viene lanciata una seconda volta allora la variabile mantiene comunque il valore assunto in precedenza
@Giulio76fra
@Giulio76fra 4 жыл бұрын
@@NickTheGeek Chiarissimo! grazie e buona serata
@danielrossi2951
@danielrossi2951 4 жыл бұрын
Buonasera, una domanda per cortesia: Come mai nella seconda parte del video, quando uso il ciclo do-while-loop, uso la funzione RND senza prima scrivere RANDOMIZE ? A questo punto mi chiedo, a cosa serve e quando bisogna scrivere RANDOMIZE ?
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao, Randomize deve essere sempre usato, altrimenti i risultati di Rnd sono sempre gli stessi; nella descrizione ho scritto che mi sono dimenticato di inserirlo nel video
@elisabettacaldara8054
@elisabettacaldara8054 4 жыл бұрын
Buongiorno Nick, scusi la domanda, ma perché il contatore ha come valore 13? Se guardo i numeri riportati nella colonna A, mi aspettavo che avesse come valore 7... Grazie e buona domenica
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao, il contatore ha valore 13 perché le estrazioni complessive sono state 13, in quanto ogni numero può uscire più volte prima di vedere il 5.
@elisabettacaldara8054
@elisabettacaldara8054 4 жыл бұрын
@@NickTheGeek AH! che sciocca....grazie mille
@martinagrusovin14
@martinagrusovin14 5 жыл бұрын
Ciao, una domanda. Se metto la definizione di i fuori da While Loop, va tutto il loop, come mai? Questo non sono riuscita a capirlo
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ciao, non ho ben capito: per "definizione" intendi l'istruzione Dim? Mi sembra che sia sempre fuori dal loop. Oppure intendi i=1? Cosa intendi quando dici che ti va tutto il loop? Che non rispetta la condizione Do While i 5? Cosa succede esattamente?
@martinagrusovin14
@martinagrusovin14 5 жыл бұрын
@@NickTheGeek Sì, scusa intendevo la variabile i. i = ecc... deve essere messa dentro al ciclo Do While? Non capisco perché non può essere definita fuori come ad esempio la variabile contatore. Grazie
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Se intendi i = Int(Rnd * 10 + 1), dipende da cosa vuoi fare e che tipo di controlli vuoi avere. In questo caso volevo avere evidenza che l'interruzione del ciclo fosse dovuta all'estrazione del 5, quindi con la sua scrittura nel foglio; se avessi messo quell'istruzione prima del Do While, se fosse stato estratto subito un 5, il ciclo non sarebbe mai stato eseguito e non avrei nemmeno mai visto il 5 scritto nel foglio Excel. Facendo come mostrato, invece, ho la certezza che il ciclo venga eseguito una volta (perché all'inizio i non è inizializzata quindi non può essere uguale a 5); se a quel punto viene estratto subito un 5 viene comunque scritto, così ho la certezza che il ciclo si è fermato perché è stato estratto un 5. L'esempio è un po' stupido (perché in questo caso ho comunque la certezza che l'unico motivo per cui il ciclo può fermarsi è che venga estratto un 5), ma con casi più complessi potrebbe avere senso. Lo stesso risultato viene comunque ottenuto con il ciclo Do... Loop While, che mostro nel video successivo (il 25). Fammi sapere se ho capito bene quello che volevi chiedermi.
@martinagrusovin14
@martinagrusovin14 5 жыл бұрын
@@NickTheGeek grazie! Sto affrontando con i tuoi tutorial per la prima volta il linguaggio di programmazione e devo dire che è tutto molto complicato ma tu sei chiarissimo!
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ottimo, mi fa piacere che i video siano utili :) La materia è ostica ma ti consiglio di fare più esercizi e prove possibili, perché più sbagli e più impari.
@davidebonanno3884
@davidebonanno3884 7 жыл бұрын
ciao NickTheGeek, siamo proprio arrivati all'ultima video lezione? hai pensato a video con esempi pratici? grazie mille per cio' che hai spiegato in modo cosi' chiaro.
@NickTheGeek
@NickTheGeek 7 жыл бұрын
ciao Davide, mancano ancora diversi video, da cosa pensavi che questo fosse l'ultimo?
@davidebonanno3884
@davidebonanno3884 7 жыл бұрын
NickTheGeek non ne ho più visti dopo il n.24
@NickTheGeek
@NickTheGeek 7 жыл бұрын
li pubblico ogni domenica, il video 25 sarà domenica prossima
@davidebonanno3884
@davidebonanno3884 7 жыл бұрын
NickTheGeek !! Perfetto grazie..
@NickTheGeek
@NickTheGeek 7 жыл бұрын
grazie a te per l'interessamento :)
@raflonoce
@raflonoce 5 жыл бұрын
Grandissima lezione , bravo, ma come faccio a generare un blocco di (es dieci numeri ) senza avere duplicati ?
@NickTheGeek
@NickTheGeek 5 жыл бұрын
ciao Raffaele, grazie per i complimenti. Non credo ci sia un sistema diretto per farlo, quindi bisogna fare una verifica manuale su tutti i numeri già scritto. Ad esempio: Sub casuale() Randomize Range("a1:a10").ClearContents Dim i As Integer For i = 1 To 10 ultima_riga = Cells(Rows.Count, 1).End(xlUp).Row inizio: numero_casuale = Int(Rnd * 10) For j = 1 To ultima_riga If Cells(j, 1) = numero_casuale Then GoTo inizio Cells(i, 1) = numero_casuale Next j Next i End Sub In pratica, all'interno del ciclo "For i" viene calcolata qual è l'ultima riga scritta nella colonna A, quindi si calcola il numero casuale, poi si verifica per ciascun numero già scritto (ciclo "For j") se il numero corrisponde al numero casuale; se si trova una corrispondenza, non si scrive niente e si ricomincia dal calcolo del numero casuale; se non viene trovata alcuna corrispondenza, il numero casuale viene scritto nella prima cella libera
@raflonoce
@raflonoce 5 жыл бұрын
@@NickTheGeek Grazie davvero, ora mimetto a provare.
@raflonoce
@raflonoce 5 жыл бұрын
@@NickTheGeek ciao Nik, mi sono svegliato a più riprese e più leggo e rileggo il codice più ammiro il tuo il il lavoro delle persone come te, si dispongono in verticale sulla colonna A per dieci celle in discesa, sto cercando di capire come fare per usare solo cinque colonne, Saluti da una Parma grigia oggi e anche un pò fredda. Ciao. Io ti posso dare la ricetta per fare una focaccia buonissima..
@raflonoce
@raflonoce 5 жыл бұрын
@@NickTheGeek ciao Nik ci sono riuscito, cmq se vuoi la ricetta per la focaccia dimmelo pure.
@NickTheGeek
@NickTheGeek 5 жыл бұрын
ottimo, complimenti per essere riuscito a risolvere con le 5 colonne; per la ricetta non importa, ma grazie lo stesso :D
@Max_sbk12
@Max_sbk12 5 жыл бұрын
"dovete scriverlo in tutte le macro in cui è presente la funzione Rnd" ... ma tu l'hai dimenticato ed ha funzionato comunque? Quindi si può omettere?
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Se non usi Randomize la macro funziona lo stesso, ma i numeri estratti saranno sempre gli stessi.
@Max_sbk12
@Max_sbk12 5 жыл бұрын
@@NickTheGeek nel caso della generazione dei numeri random ok, ma nel caso di utilizzo di Rnd nel ciclo Do While per la ricerca del numero 5 non è necessario?
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Sì è necessario, qui non si vede perché ho lanciato la macro una sola volta, ma se l'avessi lanciata altre volte sarebbero usciti ancora gli stessi numeri.
@7AndyC
@7AndyC 5 жыл бұрын
salve , mi saprebbe dire come si potrebbe generare un elenco di numeri casuali a condizione che siano differenti da serie di numeri presenti su una tabella precedentemente creata ? , esempio : TABELLA : 1 30 33 66 54 44 78 99 82 22 66 45 .... " Trova 12 Numeri casuali diversi da 1 30 33 66 54 44 78 99 82 22 66 45 ... ? Porgo Cordiali Saluti
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ciao, ogni volta che crei un numero random dovresti fare un controllo per verificare che non sia già presente tra quelli iniziali. Quindi, supponendo che i numeri iniziali siano nella colonna A tra le righe 1 e 12, e che i numeri da generare siano da 1 a 100, potresti scrivere questo codice: Sub test() Randomize Dim i As Integer Dim j As Integer Dim numero_casuale As Integer For i = 1 To 12 inizio: numero_casuale = Int(Rnd * 100 + 1) For j = 1 To 12 If numero_casuale = Cells(j, 1) Then GoTo inizio End If Next j Cells(i, 2) = numero_casuale Next i End Sub In pratica, la variabile numero_casuale contiene il numero generato, mentre il ciclo j confronta questo numero con ciascuno dei 12 numeri iniziali. Se trova una corrispondenza, allora va all'etichetta "inizio" (cioè subito sotto l'inizio del ciclo i, in modo da creare un altro numero casuale senza modificare il valore di i). Se non trova alcuna corrispondenza, il valore di numero_casuale viene scritto nella colonna B, fino a trovarne 12 (perché il ciclo i va da 1 a 12). Fammi sapere.
@7AndyC
@7AndyC 5 жыл бұрын
@@NickTheGeek la ringraziooooooo è gentilissimo :D mi metto subito all'opera , ammetto di essere ignorante in questa materia e la ringrazio infinitamente per il tempo che ha dedicato a questa richiesta potendo semplicemente ignorarmi , è una persona davvero gentile :)
@7AndyC
@7AndyC 5 жыл бұрын
@@NickTheGeek non ho capito come si collega excel con visual basic :( non riesco :S
@NickTheGeek
@NickTheGeek 5 жыл бұрын
per entrare nell'editor VB da Excel devi usare la barra di Sviluppo, se non ce l'hai devi aggiungerla come mostro nel primo video della playlist kzbin.info/www/bejne/fl7akmewhqqHetk poi nel secondo video mostro come entrare kzbin.info/www/bejne/gGjFaYSCormtqaM Fammi sapere
@7AndyC
@7AndyC 5 жыл бұрын
@@NickTheGeek la ringrazio tantissimo :) ci sono riuscito , però nella generazione dei numeri casuali capita che mi riporta sequenze di numeri già esistenti :( , supponiamo che ho 4 linee , 1) 1 2 3 4 5 ; 2) 1 2 3 5 6 ; 3) 2 3 6 5 8 ; 4) 5 6 7 8 9 ..... c'è una possibilità che si aggiungano le righe di una tabella pre-esistente e si aggiunga come opzione : ( crea 5 numeri , 5 o 9 o 20 numeri ... ma che non comportino la ripetizione di numeri , che essa sia solo la ripetizione di 2 numeri nella stessa riga o di tutti .... come avere una creazione che neghi la ripetizione di numeri su righe ... creando per esempio ; 1 2 3 4 5 , 1 6 7 8 9 , 10 11 22 15 16 , ... e così via , senza ripetizioni di due numeri nella stessa riga :( , PS se la disturbo la capisco pienamente se non le andrà di rispondere , le porgo cordiali saluti :)
@davidecongiu6173
@davidecongiu6173 3 жыл бұрын
Sono l'unico a cui il 5 è uscito dopo 62 iterazioni?
@NickTheGeek
@NickTheGeek 3 жыл бұрын
Non so se sei l'unico, ma 62 sono tante :-P
Corso VBA Excel ITA - 25 - Cicli Do Until e Do... Loop While
10:41
Corso VBA Excel ITA - 23 - Ciclo Do While... Loop
15:35
NickTheGeek
Рет қаралды 11 М.
IL'HAN - Qalqam | Official Music Video
03:17
Ilhan Ihsanov
Рет қаралды 700 М.
Quando A Diferença De Altura É Muito Grande 😲😂
00:12
Mari Maria
Рет қаралды 45 МЛН
Corso VBA Excel ITA - 22 - Combinazioni For/If
22:55
NickTheGeek
Рет қаралды 11 М.
Corso VBA Excel ITA - 31 - Matrici multidimensionali
33:52
NickTheGeek
Рет қаралды 8 М.
I made Tetris in C, this is what I learned
15:15
Austin Larsen
Рет қаралды 31 М.
Corso VBA Excel ITA - 13 - Stringhe (parte 1)
15:09
NickTheGeek
Рет қаралды 12 М.
Corso VBA Excel ITA - 30 - Matrici
23:29
NickTheGeek
Рет қаралды 10 М.
Corso VBA Excel ITA - 26 - Ciclo For Each... Next
30:31
NickTheGeek
Рет қаралды 11 М.
Corso VBA Excel ITA - 21 - Cicli annidati
21:33
NickTheGeek
Рет қаралды 10 М.
Excel VBA #22  Do Until  e Do While Loop  esempi con Select Case
26:49
Gerardo Zuccalà
Рет қаралды 14 М.
Corso VBA Excel ITA - 15 - Boolean
13:23
NickTheGeek
Рет қаралды 9 М.