@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
@NickTheGeek3 жыл бұрын
Grazie a te per il commento Riccardo.
@robertobraicovick68676 жыл бұрын
Grazie!
@emanuelemansueti86815 жыл бұрын
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
@NickTheGeek5 жыл бұрын
Ciao, probabilmente avendo dichiarato la variabile come integer viene inizializzata comunque a zero; quindi in effetti non è necessaria l'inizializzazione; grazie per la segnalazione
@frasier763 жыл бұрын
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
@NickTheGeek3 жыл бұрын
Grazie a te Lorenzo, sì sarebbe stato utile allegarli forse sempre, ma inizierò a farlo solo dal video 79 per il progetto finale.
@tecnicip10214 жыл бұрын
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.
@NickTheGeek4 жыл бұрын
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
@GiuseppeVetti3 жыл бұрын
@@NickTheGeek Dim x As integer :) ci ho messo mezz'ora a capire perchè non funzionava :)
@NickTheGeek3 жыл бұрын
@@GiuseppeVetti ciao Giuseppe, a cosa ti riferisci? Non funzionava la sub che ho scritto sopra?
@RanieroCiani5 жыл бұрын
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
@NickTheGeek5 жыл бұрын
Ottimo, problema risolto :)
@Giulio76fra4 жыл бұрын
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??
@NickTheGeek4 жыл бұрын
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
@Giulio76fra4 жыл бұрын
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!
@NickTheGeek4 жыл бұрын
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
@Giulio76fra4 жыл бұрын
@@NickTheGeek Chiarissimo! grazie e buona serata
@danielrossi29514 жыл бұрын
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 ?
@NickTheGeek4 жыл бұрын
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
@elisabettacaldara80544 жыл бұрын
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
@NickTheGeek4 жыл бұрын
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.
@elisabettacaldara80544 жыл бұрын
@@NickTheGeek AH! che sciocca....grazie mille
@martinagrusovin145 жыл бұрын
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
@NickTheGeek5 жыл бұрын
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?
@martinagrusovin145 жыл бұрын
@@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
@NickTheGeek5 жыл бұрын
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.
@martinagrusovin145 жыл бұрын
@@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!
@NickTheGeek5 жыл бұрын
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.
@davidebonanno38847 жыл бұрын
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.
@NickTheGeek7 жыл бұрын
ciao Davide, mancano ancora diversi video, da cosa pensavi che questo fosse l'ultimo?
@davidebonanno38847 жыл бұрын
NickTheGeek non ne ho più visti dopo il n.24
@NickTheGeek7 жыл бұрын
li pubblico ogni domenica, il video 25 sarà domenica prossima
@davidebonanno38847 жыл бұрын
NickTheGeek !! Perfetto grazie..
@NickTheGeek7 жыл бұрын
grazie a te per l'interessamento :)
@raflonoce5 жыл бұрын
Grandissima lezione , bravo, ma come faccio a generare un blocco di (es dieci numeri ) senza avere duplicati ?
@NickTheGeek5 жыл бұрын
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
@raflonoce5 жыл бұрын
@@NickTheGeek Grazie davvero, ora mimetto a provare.
@raflonoce5 жыл бұрын
@@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..
@raflonoce5 жыл бұрын
@@NickTheGeek ciao Nik ci sono riuscito, cmq se vuoi la ricetta per la focaccia dimmelo pure.
@NickTheGeek5 жыл бұрын
ottimo, complimenti per essere riuscito a risolvere con le 5 colonne; per la ricetta non importa, ma grazie lo stesso :D
@Max_sbk125 жыл бұрын
"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?
@NickTheGeek5 жыл бұрын
Se non usi Randomize la macro funziona lo stesso, ma i numeri estratti saranno sempre gli stessi.
@Max_sbk125 жыл бұрын
@@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?
@NickTheGeek5 жыл бұрын
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.
@7AndyC5 жыл бұрын
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
@NickTheGeek5 жыл бұрын
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.
@7AndyC5 жыл бұрын
@@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 :)
@7AndyC5 жыл бұрын
@@NickTheGeek non ho capito come si collega excel con visual basic :( non riesco :S
@NickTheGeek5 жыл бұрын
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
@7AndyC5 жыл бұрын
@@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 :)
@davidecongiu61733 жыл бұрын
Sono l'unico a cui il 5 è uscito dopo 62 iterazioni?