condizione in VBA



  • condizione in VBA
    di Attilio (utente non iscritto) data: 23/09/2012 06:14:27

    Un caro saluto a tutti del forum, sono nuovo e vorrei imparare il VBA, sto facendo un programmino con excel, le formule inerenti excel sono tutte ok, il problema è il vba, ho nel foglio3 i dati dove in range("A1:A300") sono elencati numeri da 0 a 100, ognuno di questo numeri in corrispondenza della propria riga, es. lo 0 ha nella sua stessa riga, degli altri numeri, precisamente 16 numeri, che occupano ognuno la propria cella, quindi in A1 c'è lo zero, A2 altro numero, in A3 altro numero e cosi via per 16 celle escluso lo 0, nel foglio2 e precisamente nella cella(U3) viene impostato un qualsiasi valore numerico che servirà nel programma come condizione di inzio ricerca. spiegazione letterale della funzione che mi serve: se in cella(U3) inserisco il n° 2, deve partire la condizione di ricerca, in questa maniera, man mano che inserisco numeri, non in maniera ordinata, nel foglio1 riguardante il range("A1:A500"), la condizione deve controllare se dopo l'uscita del 2° numero (vedi condiizione cella(U3), se non è presente nessun numero della riga di riferimento dei numeri inseriti nel foglio1, nel foglio 1 mi deve elencare quella sequenza di numeri nel range("C2:R2"), ovviamente, siccome ogni numero ha una sua sequenza in caso che ci siano più sequenze da elencare, devono avere la possibilità di essere anch'esse elencate nel foglio1, per esempio nel range sottostante della prima sequenza, speriamo di essere stato chiaro, se ci sono problemi ditemi come posso aiutarvi a essere più comprensibile, anche se la cosa non finisce proprio qui, andremo per gradi, grazie tante per il vostro interessamento, Attilio



  • di Vecchio Frac data: 23/09/2012 08:55:27

    Ciao e benvenuto, il problema è un po' tortuoso e bisogna ricostruirlo per capire bene.
    Non è che puoi allegare un file di esempio, con dati fittizi, in modo da concentrarci solo sulla questione senza dover pensar anche alla struttura?





  • di Attilio (utente non iscritto) data: 23/09/2012 11:12:12

    Allegato un esempio del file speriamo che si capisce


  • Tiro al bersaglio
    di Vecchio Frac data: 23/09/2012 11:25:16

    Gli sfondi che hai scelto sono favolosi!
    Appena ho un attimo mi ci dedico.
    Magari nel frattempo ci arrivano anche altri (io sono notoriamente lento ^_^)...





  • di Vecchio Frac data: 23/09/2012 14:46:29

    Per quante volte io legga e rilegga sia il tuo post qui che le spiegazioni nel file Excel, non riesco ad afferrare il quesito.
    Ci sono anche alcune incongruenze tra il file e il tuo post:
    - non esiste un "foglio3"
    - i dati in "Tavole" non sono in range("A1:A300") e comunque i numeri non sono solo cento;
    - nel "foglio2 e precisamente nella cella(U3)" *non* viene impostato alcun numero, c'è una formula che si riferisce al valore di T1 del foglio1 (quindi eventualmente è qui che si devono cambiare i valori, quindi il foglio2 a che serve?)
    - parli sempre di "condizioni di ricerca" ma credo impropriamente, inoltre anche fosse che vuoi "impostare" un criterio di elaborazione, non ha senso la frase "deve partire la condizione di ricerca"; una condizione non parte mai, eventualmente è l'elaborazione che si basa su una condizione preimpostata.

    Insomma ho un po' di confusione. Proverò a entrare nella tua testa ma se puoi dacci qualche esempio concreto delle operazioni (digito qualcosa in questa cella qui per una due o tre volte e mi aspetto questo risultato nella cella talaltra).






  • di Vecchio Frac data: 23/09/2012 21:21:39

    Ho visto anche il secondo fil allegato, nel quale sono presenti alcune informazioni in più.
    Tuttavia non sono ancora riuscito ad afferrare bene il lavoro da fare :(
    Tu imposti una sequenza di tot numeri (chi stabilisce quanti e quali sono i numeri della sequenza? in che fase del lavoro?), li inserisci in colonna A del foglio1. Fin qui, ok.
    Quindi passo ad esaminare ognuno di questi numeri e li ricerco, a partire dal primo, in Tavole. Fattibilissimo. UNa volta trovato tale numero, posso considerare la riga in cui si trova, che contiene un elenco di sedici numeri. Ok.
    Se nei numeri di tale riga sono presenti (tutti?) i numeri del foglio1 di partenza, colonna A (in ordine sparso? in sequenza? uno solo basta?) allora... che ci faccio? li ricopio? e dove?
    Poi passo ad esaminare il secondo numero della sequenza in foglio1 e ripeto il procedimento.
    Ho bisogno come vedi di ulteriori spiegazioni.
    Capito il meccanismo (l'algoritmo) che ti porterebbe, a mano, a eseguire almeno una volta un'operazione completa, sarà poi semplice tradurlo in codice... il metodo .Find dell'oggetto Range servirà al caso nostro ;)





  • di HarryBosch data: 24/09/2012 00:42:00

    Ciao ragazzi
    si, veramente carini gli sfondi, soprattutto quello blu. Perdonami Attilio ma anch'io non sono riuscito a inquadrare perfettamente il meccanismo che vorresti realizzare. Mi sembra che Vecchio Frac ti abbia ora chiesto quello che serve per completare il quadro iniziale; e aggiungerei un paio di info:
    - riprendendo Vecchio Frac, dove li riportiamo questi dati?, e integrerei con: nella prima riga disponibile del foglio1 o cancelliamo tutti i dati precedenti?
    - se invece non troviamo nessuna corrispondenza, cosa facciamo?
    Mentre la ricerca sembra abbastanza chiara, non sono riuscito a focalizzare l'utilizzo del Foglio1.



  • di Attilio data: 24/09/2012 08:29:30

    un grazie per tutto e anche per i complimenti per gli sfondi, ve ne ho caricati 4, mi riferisco agli sfondi, allora, cercherò di rispondere passo passo alle domande, alla domanda imposti una sequenza di tot numeri, no i numeri saranno creati da un pulsante che ad ogni click creerà un numero random, la quantità massima dei numeri sarà di 50, i numeri della sequenza vanno dall' 1 al 36, tanti quanti sono i bambini, per la fase del lavoro, senza la numerazione inserita in colonna a:a il programma non serve, nella colonna A:a i numeri sono in ordine sparso, uno serie solo non basta, si tratterebbe di una gara selettiva in base ad i numeri estratti a caso uno sotto l'altro va benissimo, per il ricopio devono comparire in foglio1 man mano che vengono inseriti i numeri random della colonna a del foglio1, mi fermi qui se c'è ancora qualcosa...........sapete cosa fare, grazie



  • di Vecchio Frac data: 24/09/2012 11:39:58

    Mi dispiace ma mi sento limitato, per quanti sforzi io faccia non riesco a capire il meccanismo.
    Ho creato un pulsante che estrae a caso tot numeri (cella T1) e li incolonna in A.
    Ovviamente in foglio1 tutta la serie delle colonne E-T viene di volta in volta azzerata per far spazio alle nuove righe (quindi le formule che esistevano e puntavano a Foglio2 vengono eliminate).
    Per ognuno di questi numeri riporto la riga corrispondente del foglio Tavole, in Foglio1 (da E a T).
    Ora, posso anche controllare che nella sequenza appena ricavata *non* ci siano i successivi numeri estratti, ma se ciò accade che faccio?
    Quel che vorrei da te, Attilio, è una descrizione passo passo di quel che faresti manualmente con i possibili venti che si possono verificare (faccio così e cosà, se succede questo faccio quest'altro altrimenti faccio quello). Solo così potremo definire un algoritmo ripetibile.
    Credo inutile che io alleghi il file con le mie modifiche (anche se l'algoritmo per l'estrazione casuale di tot numeri non ripetuti sarebbe carino da condividere, come idea ^_^).





  • di Attilio data: 24/09/2012 18:44:16

    facciamo così, ultimo tentativo, ti spiego il programma dalla sua partenza cosa deve fare.
    1a Fase: compare foglio1 vuoto, inserisco in T1 il numero 7, a questo punto, clicco pulsante random che estrarrà un solo numero, che posizionerà nella cella A1, a questo punto la macro (non sò se si chiama così), comincia il controllo: es. estratto il numero 8, ricerca del numero 8 sul foglio Tavole colonna A:A, individuata la riga, aspetta da questo momento l'inserimento dei successivi numeri sempre messi uno per volta nella colonna A:A del foglio1, per intenderci sotto il numero 8, adesso controlla se nella riga del numero 8 esiste questo numero, se esiste, la ricerca passa al numero successivo che abbiamo inserito sotto l'8 sempre tramite pulsante random, se i numeri successi inseriti non sono rilevati nella riga del 2° numero, per ben T1, la riga ispezionata deve comparire sul foglio1, mi fermo qui, vediamo se mi sono saputo spiegare meglio, ciao e grazie ancora



  • di Vecchio Frac data: 24/09/2012 21:43:51

    Non voglio assolutamente scoraggiarti. E infatti allego un file che è giunto alle revisione 4 a forza di cercare di capire il meccanismo, che ancora è ostico!
    Ho aggiunto al file nel foglio1 un riquadro giallo con il tuo ultimo intervento come promemoria, francamente ancora non è chiaro cosa deve accadere se il secondo numero della serie non viene trovato, e così il terzo, il quarto ecc. fino ad esaurire la serie dei [T1] numeri estratti.
    Comunque il file per il momento si limita ad estrarre [T1] numeri casuali, a porli in A:A del foglio1 e a scandagliare le Tavole proponendo la riga del numero preso a confronto se nella sua riga non trova i nunmeri a lui successivi. Ma ho ancora molta confusione.
    Forse Vanni che è più giovane di me ha la mente più fresca e può aiutarmi :)





  • di Attilio data: 25/09/2012 15:57:00

    Grazie, sei molto gentile, cmq non ti preoccupare per lo scoraggiamento, noi abruzzesi siamo di indole capa tosta, ehehehehe, cmq ho scaricato il file, qualcosa va bene, ti dirò io passo passo le modifiche da apportare se non riesco io.



  • di Attilio data: 26/09/2012 08:47:19

    Allora prima correzione da fare, il pulsante "Elabora" deve elaborare un numero solo ad ogni click e la numerazione random deve essere compresa tra 0 e 36, è possibile?



  • di Attilio data: 26/09/2012 08:59:38

    scusa ancora una cosa, i numeri che vengo trasferiti in visuale dal foglio Tabelle si possono colorare di bianco?



  • di Vecchio Frac data: 26/09/2012 10:12:07

    cit. " il pulsante "Elabora" deve elaborare un numero solo ad ogni click "
    --> nella Sub scatenata dal pulsante Elabora basta eliminare il ciclo For e generare un numero alla volta, controllando di non aver già raggiunto il limite di numeri estratti diu cui in [T1]

    cit. " la numerazione random deve essere compresa tra 0 e 36 "
    --> l'algoritmo della Function Estrai() genera 36 numeri (da 1 a 36). La riscriviamo aggiustando i limiti

    cit. " i numeri che vengono trasferiti in visuale dal foglio Tabelle [--> Tavole] si possono colorare di bianco? "
    --> è già così, se ne occupa l'istruzione " [E2:T5000].Font.ColorIndex = 2 "







  • di Attilio (utente non iscritto) data: 29/09/2012 21:29:37

    qualcuno si è scordato di me, o sono io che non ho capito?



  • di Vecchio Frac data: 29/09/2012 23:14:34

    Io ero rimasto a:
    cit. " cmq ho scaricato il file, qualcosa va bene, ti dirò io passo passo le modifiche da apportare se non riesco io. "





  • di Attilio (utente non iscritto) data: 29/09/2012 23:19:46

    Allora per quanto riguarda questa citazione:
    cit. " il pulsante "Elabora" deve elaborare un numero solo ad ogni click "
    --> nella Sub scatenata dal pulsante Elabora basta eliminare il ciclo For e generare un numero alla volta, controllando di non aver già raggiunto il limite di numeri estratti diu cui in [T1]
    i numeri da generare devono essere illimitati dallo 0 al 36, intanto vediamo questa cosa, grazie