Problema con vlookup



  • Problema con vlookup
    di mela (utente non iscritto) data: 03/02/2014 12:39:41

    Salve a tutti.
    Questa è la prima volta che scrivo un software in Vba e sto riscontrando un problema...
    Io ho una colonna con una serie di sigle che rappresentano delle categorie e, nella colonna successiva, ho dei numeri che corrispondono a delle durate. Ho bisogno di trascrivere la durata corrispondente a ogni categoria e la funzione più adatta credo sarebbe vlookup. Il problema è che la categoria da cercare non è sempre la stessa ma varia all'interno di un ciclo for, di conseguenza io ho impostato una variabile A, che è uguale alla categoria che varia di volta in volta al variare del ciclo for. Se però nel vlookup imposto come variabile da cercare la A la cerca come costante, cioè cerca proprio la lettera A non il valore della categoria corrispondente. Non so come fare per fargli cercare il nome della categoria che, man mano che va avanti il ciclo for, è associato alla A...
    Ringrazio anticipatamente chi di voi sarà così gentile da aiutarmi e intanto riporto un esempio per spiegarmi meglio...
     
    Sub Mod()
    For i= 1 To N
    A=Sheets("Foglio1").Cells(i,4).Value
    Sheets("Foglio3").Cells(i,5)="=VLOOKUP(""A"",'Foglio2'!RC[-11]:R[17]C[-10],2)"
    Next
    End Sub
    
    



  • di patel data: 03/02/2014 12:57:19

    sarebbe meglio allegare un file di esempio per poter testare la tua macro





  • di mela (utente non iscritto) data: 03/02/2014 16:18:15

    Ho allegato un file... Vedi un po' se così si capisce meglio il problema... Come puoi vedere con la funzione vlookup cerca la lettera A e non la categoria associata... Sarà sicuramente un problema stupido ma io non riesco a capire...:/



  • di patel data: 03/02/2014 16:50:17

    prova così
     
    Sub Esempio()
    For i = 5 To 6
    A = Sheets("Foglio2").Cells(i, 1).Value
    Sheets("Foglio2").Cells(i, 6).FormulaR1C1 = "=VLOOKUP(" & """" & A & """" & ",Foglio1!RC[-5]:R[8]C[-4],2,FALSE)"
    Next
    End Sub






  • di mela (utente non iscritto) data: 03/02/2014 17:08:44

    Ok grazie mille mi hai risolto il problema della lettura della variabile, anche se non ho ben capito perché mettendo solo tutti quelle virgolette in più funziona...
    Se non è troppo disturbo vorrei chiederti anche un'altra cosa: se fai partire il programmino che mi hai mandato tu, e se vai a guardare proprio la formula che esce su Excel per ogni cella della colonna F del Foglio2, puoi vedere che il range in cui funziona il vlookup cambia per ognuna di queste celle, come se si aggiornasse ad ogni passaggio del for. Non è che sapresti suggerirmi come fare per fare in modo che questo range rimanga sempre lo stesso?



  • di patel data: 03/02/2014 17:28:47

    sei tu che hai inserito le formule con la notazione RC, utilizza la notazione normale tipo $A$B10 e non avrai questo problema





  • di mela (utente non iscritto) data: 03/02/2014 20:25:09

    Io ho usato questa notazione perché registrando la macro direttamente da excel l'istruzione l'ho trovata scritta così. .. e siccome, come ho detto, è la prima volta che uso vba ho pensato che fosse l'unico modo possibile. .. ho provato anche a mettere proprio Range ("A2:B6") per esempio ma mi da errore. .. quindi, anche se ho capito che per te è una cosa molto banale, potresti cortesemente dirmi come dovrei scrivere il range che ti ho portato prima come esempio con questa notazione che dici tu con il simbolo del dollaro? Ti ringrazio ancora per la disponibilità. ..:)



  • di patel data: 03/02/2014 20:56:02

    così
     
    Sub Esempio()
    For i = 5 To 6
    A = Sheets("Foglio2").Cells(i, 1).Value
    Sheets("Foglio2").Cells(i, 6).Formula = "=VLOOKUP(" & """" & A & """" & ",Foglio1!$A2:$B10,2,FALSE)"
    Next
    End Sub
    






  • di mela (utente non iscritto) data: 04/02/2014 10:26:58

    Funziona!!! Quindi se metto FormulaR1C1 significa che voglio usare la notazione con le righe e le colonne... Invece scrivendo solo Formula posso scrivere il range come mi hai suggerito tu...:) Grazie mille per i preziosi consigli Patel! :)



  • di patel data: 04/02/2014 10:47:56

    cit.
    "anche se non ho ben capito perché mettendo solo tutti quelle virgolette in più funziona... "

    nelle formule il range è racchiuso da apici, per poter scrivere da vba gli apici come testo occorre ripeterli più volte come puoi vedere nel codice