da cercavert a VBA



  • da cerca.vert a VBA
    di loy (utente non iscritto) data: 27/10/2014 12:12:34

    nel foglio 2, in più colonne ed in più celle/riga ho la ripetizione della formula cerca.vert che cerca valori o date puntando il foglio 1 archivio/dati.

    attualmente la formula cerca.vert svolge il suo compito perfettamente.

    domanda: è possibile sostituire i vari cerca.vert con un codice VBA.

    se è possibile, un esepio commentato.

    grazie anticipatamente per l'impegno e il possibile chiarimento.



  • di Lucas87 data: 27/10/2014 12:30:34

    Ciao
    Prova il file
    Cerca.vert VBA - Lucas87.xls

    Al momento il codice viene avviato dal pulsante.
    È possibile azionarlo quando viene inserito un nuovo valore



  • di Lucas87 data: 27/10/2014 14:37:00

    Non ho capito quello che ti serve.
    Comunque:
    Range("a" & rows.count)..... serve a trovare l'ultima cella della colonna A. In questo modo il ciclo FOR andrà ad analizzare solo le celle utilizzate. Se i valori da cercare si trovano su un'altra colonna, devi modificare di conseguenza.
    In Set fin = ..., Sheets(1).Columns(1) indica la colonna A del foglio 1, cioè l'area in cui fare la ricerca (corrisponde alla prima colonna della matrice del cerca.vert). Cells(i, 1) è il valore che viene cercato. Ad ogni ciclo la variabile I incrementa andando quindi ad indicare le celle successive, sempre sulla colonna A.
    Il codice in pratica fa la stessa cosa del cerca.vert: cerca il valore cells(i,1) sulla prima colonna della matrice (foglio2 colonna A) e restituisce il valore che si trova sulla stessa riga in un'altra colonna (fin.offset(0,1))



  • di loy (utente non iscritto) data: 27/10/2014 14:49:38

    Si lucas87

    hai ragione (scontato) forse mi sono espresso male e ti chiedo venia, spero di spiegarmi meglio.
    nel foglio 2 daccordo sulla colonna "a" ma io ho "+" cerca.vert nel foglio 2 e si trovano in colonne diverse dalla "a" con riferimenti diversi sia sul foglio 1 che sul foglio 2.
    quindi pensavo e domandavo se era possibile implementare il codice multi cerca.vert (mettendo in sequenza il codice che mi hai postato ma cambiando i riferimenti di ricerca)




  • di Lucas87 data: 27/10/2014 15:30:53

    Allega il file così evitiamo qualsiasi problema.


  • da cerca.vert a VBA "Risolta"
    di loy (utente non iscritto) data: 27/10/2014 15:51:43

    grazie Lucas87 per l'aiuto e la disponibilità.

    ho intenzione di fare alcune prove prima di disturbarti e modificare il mio file.

    per il momento ritengo esaustiva la tua spiegazione, qualora non dovessi riuscirci riproporrò un nuovo quesito con le difficoltà trovate.

    grazie ancora per il tuo impegno e cortesia

    loy



  • di loy (utente non iscritto) data: 30/10/2014 12:18:29

    Ciao Lucas87,

    non volevo disturbarti oltremodo e credevo che facendo delle prove riuscivo a di capire come tradurre in VBA la formula Cerca.Vert (Valore,Matrice_Tabella,Indice,Intervallo).

    purtroppo eccomi a chiedere ancora.

    ti rimetto in allegato il tuo file con i dati miei reali posizionati nelle rispettive colonne e celle.

    il tuo codice funziona ma nella colonna C del foglio 2 alla riga 37 dovrei avere la data che si trova nella colonna C del foglio1.
    Grazie ancora per la disponibilità



  • di Lucas87 data: 30/10/2014 12:39:33

    Ciao
    Con offset si fa riferimento ad una cella rispetto ad un'altra. Tra parentesi vengono indicati gli spostamenti di riga e colonna.
    Es
    Range("c2").Offset(3,5)
    fa riferimento ad H5 che si trova a 3 righe e 5 colonne da C2.
    Si avranno valori positivi all'aumentare di righe e colonne, valori negativi al loro diminuire.
    Nel tuo caso FIN indica la cella nel foglio1 che contiene il risultato della ricerca. Dovendo riportare il valore che si trova 2 celle a destra si dovrà considerare la cella che si trova a 0 righe e a 2 colonne.
     
    Cells(i, 3) = fin.Offset(0, 2)



  • di loy (utente non iscritto) data: 30/10/2014 13:28:47

    da buon inesperto farò delle prove per digerire compiutamente il tuo insegnamento prima di chiudere l'argomento.

    però avrei ancora un dubbio.

    per l'immissione normale della formula Cerca.vert la inserisco in una cella ben definita nel foglio....la cosa che non capisco è.. in VBA come faccio a definire la formula per esempio: a partire dalla cella 10 anziche 15 o 20???

    forse mi hai già risposto nelle tue precedenti indicazioni....ma non ho ancora capito...spero di non aver detto corbellerie.

    Grazie ancora



  • di loy (utente non iscritto) data: 30/10/2014 13:58:43

    c'è qualcosa che non capisco (sicuramente molte) ho riallegato il tuo file fermo restando il foglio 1, spostando nel foglio 2 alla colonna D riga 37 i dati di riferimento come debbo cambiare vba per ottenere le date con inizio da E 37.




  • di Lucas87 data: 30/10/2014 14:13:50

    Il ciclo for serve per definire le celle da analizzare nel foglio 2.
    Se i dati si trovano da D37 in giù il ciclo for va modificato (*1).
    A questo punto però bisogna modificare anche l'argomento della ricerca, che diventa (*2) visto che di trova in colonna 4 (D).
    Dovendo poi scrivere in colonna E si dovrà cambiare (*3)

    Il ciclo FOR e i riferimenti alle celle però sono concetti base del codice VBA.
    Non puoi capire un codice se non hai queste conoscenze.
     
    (*1)
    For i = 37 To Range("d" & Rows.Count).End(xlUp).Row
    oppure
    For i = 37 To Range("d37").End(xlDown).Row
    
    (*2)
    what:=Cells(i, 4)
    
    (*3)
    Cells(i, 5) = fin.Offset(0, 2)



  • di Zer0Kelvin data: 30/10/2014 14:14:56

    Slave a tutti.
    Mi sembra che siamo ancora nella fase:
    "informazioni insufficienti e poco chiare = molte e confuse repliche."
    Se mi posso permettere suggerirei di azzerare tutto.
    Lascia da parte tutte le ipotesi e spiega semplicemente:
    -che genere di dati hai sul tuo foglio (1 o piu tabelle? e cosa contengono?)
    -che cosa vorresti estrapolare da queste tabelle e dove vorresti mettere il risultato.



  • di loy (utente non iscritto) data: 30/10/2014 14:34:57

    Grazie ancora Lucas87 per la pazienza e disponibilità.

    Ciao Zer0Kelvin, ti ringrazio per l'interesse al mio scritto.

    il mio unico interesse è capire come in excel vba... riportare la formula cerca.vert

    La formula cerca.vert non ho difficoltà nell'usarla ma sto trovando difficolta a capire come dare una spiegazione in VBA passo passo a "Cerca.Vert (Valore,Matrice_Tabella,Indice,Intervallo)".

    In particolare in VBA come identifico "il Valore - Matrice_Tabella - Indice - Intervallo

    vorrei tanto chiedere in prestito la Vs. conoscenza per qualche attimo.

    scusatemi se ho scritto banalità.



  • di alfrimpa (utente non iscritto) data: 30/10/2014 15:12:09

    Premetto che non so se la mia risposta è quello che cerchi ti comunque provo a dire la mia.

    Se si vuole usare la funzione cerca.vert in VBA si deve usare la seguente istruzione.

    All'interno della parentesi metti i consueti parametri del cerca.vert (anche sotto forma di variabili).

    Spero sia utile

    Alfredo
     
    Application.WorksheetFunction.VLookup(............)






  • di Lucas87 data: 30/10/2014 15:42:59

    In effetti la risposta di alfrimpa è la traduzione letterale del CERCA.VERT in VBA, ovviamente aggiungendo il ciclo for che passa in rassegna l'elenco dei valori da cercare.

    Se invece ti interesse avere una codice che in maniera diversa simula la formula e per capire come funziona il codice allora guarda il file
    Spiegazione.xls



  • di Zer0Kelvin data: 30/10/2014 15:49:20

    Volendo semplificare molto la cosa si potrebbe:
    1) utilizzare la function proposta da alfrimpa che non fa altro che invocare la fonzione CERCA.VERT da VBA
    2) realizzare una UDF con un comportamento analogo (vedi sotto)
    WorksheetFunction.VLookup fornisce lo stesso risultato di CERCA.VERT, ma provoca un errore di esecuzione se non viene trovato alcun valore.
    Cerca_Vert ignora il parametro Intervallo e se usata dal lato VBA provoca anch'essa un errore di esecuzione se non trova una corrispondenza esatta.
     
    Public Function Cerca_Vert(Valore, Matrice_Tabella, Indice, Optional Intervallo)
        Cerca_Vert = Matrice_Tabella.Columns(1).Find(Valore, , xlValues, xlWhole).Offset(0, Indice - 1)
    End Function
    



  • di loy (utente non iscritto) data: 30/10/2014 16:04:37

    Lucas87 - Zer0Kelvin - alfrimpa... grazie ancora per le spiegazioni e del contributo personale che pazientemente mi avete offerto.

    ritengo che l'argomento fin qui trattato mi serve come spunto per approfondire di persona....senza fare ulteriori domande che vi distoglierebbero dal fornire il vostro utile apporto ad altri utenti

    ringrazio e spero di sentirvi ancora...mgari con quesiti più intriganti (in VBA)

    Cordialità e saluti a tutti

    Loy