cerca verticale in vb

Salve a tutti!

semplifico visto che insieme al vostro aiuto il mio file si è complicato tantissimo e spero di restare chiaro ;)

La mia esigenza è la seguente:

 ho due fogli di lavoro il primo si chiama "Da comunicare" il secondo "test" il foglio test contiene record ordinati e la "chiave" di ricerca è in colonna A.

nel foglio "Da comunicare"  arrivano tramite macro dei record che popolano la tabella sulla seconda riga facendo scorrere i record verso il basso.

subito dopo aver inserito la nuova riga nella cella O2 mi serve impostare un cerca verticale di questo tipo

=CERCA.VERT(H2;Test!A:D;3;FALSO)

ma primo problema se non trova occorrenza mi dovrebbe restituire "blank"  e non il maledetto #N/D

perche poi altro controllo che vorrei mettere è se il valore in O2 <> blank

colora la riga da "A2:Q2" di rosso.

Ma non funziona ho fatto mille prove e mi perdo!

ho provato con se val errore IF(ISERROR(VLOOKUP ma poi mi sa che sbaglio qualcosa con gli apici o i ; ;(

la strada che stavo percorrendo è questa .... ma come si sistema?

meglio fare un ciclo che scorre tutte i record di test e se non trova nulla scrive blank mentre se lo trova scrive il valore di colonna tre e colora la riga di rosso?

ma come?

 

Range("O2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-7],test!C[-14]:C[-11],3,FALSE)"
    Range("P2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-8],test!C[-15]:C[-12],4,FALSE)"
    Range("O2:P2").Select
    Selection.Copy
    Range("O2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    

    If Range("O2").Value <> "" Then
          Range("A2:Q2").Interior.ColorIndex = 3
          Else
         
        End If

 

Informazioni domanda


Ultimo aggiornamento febbraio 21, 2018 Visualizzazioni 2.734 Si applica a:
Risposta

Salve a tutti!

semplifico visto che insieme al vostro aiuto il mio file si è complicato tantissimo e spero di restare chiaro ;)

La mia esigenza è la seguente:

 ho due fogli di lavoro il primo si chiama "Da comunicare" il secondo "test" il foglio test contiene record ordinati e la "chiave" di ricerca è in colonna A.

nel foglio "Da comunicare"  arrivano tramite macro dei record che popolano la tabella sulla seconda riga facendo scorrere i record verso il basso.

subito dopo aver inserito la nuova riga nella cella O2 mi serve impostare un cerca verticale di questo tipo

=CERCA.VERT(H2;Test!A:D;3;FALSO)

ma primo problema se non trova occorrenza mi dovrebbe restituire "blank"  e non il maledetto #N/D

perche poi altro controllo che vorrei mettere è se il valore in O2 <> blank

colora la riga da "A2:Q2" di rosso.

Ma non funziona ho fatto mille prove e mi perdo!

ho provato con se val errore IF(ISERROR(VLOOKUP ma poi mi sa che sbaglio qualcosa con gli apici o i ; ;(

la strada che stavo percorrendo è questa .... ma come si sistema?

meglio fare un ciclo che scorre tutte i record di test e se non trova nulla scrive blank mentre se lo trova scrive il valore di colonna tre e colora la riga di rosso?

ma come?

 

<cut>


Due alternative, quelle che utilizzo io di solito, le trovi qui:

http://www.maurogsc.eu/esempiforum12/cercavalori.zip

La prima m_1() utilizza Evaluate per scrivere nella cella B2 di FoglioLavoro il risultato relativo alla ricerca fatta sul foglio Dati in base al valore di A2 di FoglioLavoro.

La seconda m_2() è *tutta vb* per scrivere nella cella B5 di FoglioLavoro il risultato relativo alla ricerca fatta sul foglio Dati in base al valore di A5 di FoglioLavoro.

--
Mauro Gamberini
Microsoft© MVP (Excel)
http://www.maurogsc.eu

Il problema è stato risolto?

Siamo spiacenti che questo non sia stato d'aiuto.

Fantastico! Grazie per aver scelto questa risposta.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento, ci aiuta a migliorare il sito.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento.

Risposta
te l'ho chiesto invece di provare perché non riesco ad afferrare bene l'utilità di usare il vba per creare formule nel foglio invece di fare i calcoli direttamente.


Ci sono contesti in cui lo si fa.

Io non conosco quello di MauroAP, Ho solo risposto alla sua domanda e alla tua.

Quello di cui si discute qui poi, non è un calcolo, ma una ricerca in una tabella fatta tramite vb e le soluzioni postate sono più veloci rispetto ad un For...Next o ad un Loop.

 

--
Mauro Gamberini
Microsoft© MVP (Excel)
http://www.maurogsc.eu

Il problema è stato risolto?

Siamo spiacenti che questo non sia stato d'aiuto.

Fantastico! Grazie per aver scelto questa risposta.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento, ci aiuta a migliorare il sito.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento.