Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 16 su 16

Se cella contiene valore scrivi stringhe su celle adiacenti

  1. #11
    surfgarden non è in linea Scolaretto
    Post
    146
    Like Inviati  
    0
    Like Ricevuti  
    0
    l'avevo già provato con l'argomento corrisp 0, col risultato che mi beccava solo la riga in cui, appunto, vi era corrispondenza esatta (SPESE ED ONERI --> riga 5).
    Medesimo risultato (#N/D, salvo riga 5) anche col CONCATENA che mi hai postato
    =CONFRONTA(CONCATENA("*";B2;"*");$A$2:$A$5;0)
    
    PS: il Like lo avevo provato così: "*"&B2&"*"
    Ultima modifica di surfgarden; 13-10-2020 15:21  Motivo: PS:

  2. #12
    Sgrubak non è in linea Scribacchino
    Post
    523
    Like Inviati  
    9
    Like Ricevuti  
    2
    Noto solo ora che stai cercando il valore della colonna B in A. Ovviamente non può funzionare...
    Puoi provare, con le necessarie modifiche ed adattamenti, ad usare questa funzione:
    Public Function ConfrontaInverso(testo1 As String, elenco As Range) As Long
    'Inizializzo la funzione a zero.
    ConfrontaInverso = 0
    'Dichiaro le variabili
    Dim cella As Range
    Dim lctesto As String
    Dim lcValue As String
    'Imposto il valore da cercare in Lower Case
    lctesto = LCase( testo1 )
    'Ciclo il range
    For Each cella In elenco
        lcValue = LCase( cella.Value )
        'Se c'è una corrispondenza ritorno il numero di riga ed esco
        If InStr(lctesto, lcValue) Then
            ConfrontaInverso = cella.Row
            Exit Function
        End If
    Next cella
    End Function
    
    Effettua il confronto mediante InStr. Un po' approssimato, ma come inizio potrebbe andare bene...

    EDIT:
    La usi così:
    =ConfrontaInverso(B2; $A$2:$A$5)+1
    
    Ultima modifica di Sgrubak; 13-10-2020 17:31 

  3. #13
    surfgarden non è in linea Scolaretto
    Post
    146
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Noto solo ora che stai cercando parte (..aggiungo io) deil valore della colonna B in A.
    La nuova soluzione che mi proponi mi lascia perplesso:
    il valore della matrice viene trovato (restituendomi la riga corrispondente) quando esatto a quello in B, o quando (sempre in B) è seguito da altri caratteri.
    L'unico caso in cui non viene trovato è quando è preceduto da altri caratteri.
    Non metto in discussione l'esattezza della tua funzione (appena ho un po' di tempo la studio, e la provo ad adattare). Tuttavia la soluzione dovrebbe essere molto più semplice.
    Se dobbiamo tornare al vba, allora perché non predisporre una tabella delle matrici su un foglio, e richiamarle su un secondo foglio in cui descrivo il testo del Case?
    In tal modo, quelle volte che mi capita di dover aggiornare la tabella matrici, mi basta copia/incollare il nuovo Case "dinamico" sul modulo in luogo di quello obsoleto.
    Mah... proverò tutto e posterò i risultati.

    Nel frattempo..grazie di nuovo per la tua gentile disponibilità
    Ultima modifica di surfgarden; 13-10-2020 22:36 

  4. #14
    Sgrubak non è in linea Scribacchino
    Post
    523
    Like Inviati  
    9
    Like Ricevuti  
    2
    Quote Originariamente inviato da surfgarden Visualizza il messaggio
    il valore della matrice viene trovato (restituendomi la riga corrispondente) quando esatto a quello in B, o quando (sempre in B) è seguito da altri caratteri.
    Per quanto ne so, solitamente si cerca una stringa più corta in una più lunga. È per questo che l'approccio che ti avevo suggerito non funzionava. Giustamente tu hai delle stringhe più lunghe in partenza (la causale che arriva dalla banca). È sempre impossibile trovare una corrispondenza di una stringa più lunga in una più corta.
    Ti trova corrispondenza se B è seguito da altri caratteri, a seguito del fatto che non hai specificato il terzo parametro della funzione CONFRONTA e (non so se casualmente o no) l'elenco nello screenshot è ordinato alfabeticamente.
    Quote Originariamente inviato da surfgarden Visualizza il messaggio
    Se dobbiamo tornare al vba, allora perché non predisporre una tabella delle matrici su un foglio, e richiamarle su un secondo foglio in cui descrivo il testo del Case
    1)Il VBA in questo caso è solo un piccolo passaggio. Definisce una funzione che, se ben scritta e sviluppata, si può poi applicare in qualsiasi contesto. Se domani questa stessa funzione ti serve in un'altra cartella di lavoro, puoi valutare di spostarla su un file XLA e la usi sempre, come se fosse una funzione nativa di Excel.

    2)Nel caso specifico, quella che ti ho suggerito se ne frega di quale elenco gli passi come secondo argomento, nel senso che puoi dargli in pasto una cella come una colonna intera, o addirittura un "rettangolo" di celle. Lei cerca li dentro e ti ritorna la riga in cui c'è corrispondenza. Non serve che tutte le volte modifichi il codice, ma solo il range in cui cercare. Se ti ritrovi a doverla usare per una serie di valori lunga, tipo 1000 valori? Ti ritroveresti a scrivere 1000 Case...

  5. #15
    surfgarden non è in linea Scolaretto
    Post
    146
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Per quanto ne so, solitamente si cerca una stringa più corta in una più lunga.
    È per questo che l'approccio che ti avevo suggerito non funzionava. Giustamente tu hai delle stringhe più lunghe in partenza (la causale che arriva dalla banca). È sempre impossibile trovare una corrispondenza di una stringa più lunga in una più corta.
    OK..Capito! Se da un lato è vero che stò cercando una stringa più corta (MATRICE) in una più lunga (VALORE ..cioè la causale), dall'altro lato la ricerca inizia da quella più lunga, per potermi restituire la riga di quella più corta. In pratica, la ricerca si inverte.

    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Ti trova corrispondenza se B è seguito da altri caratteri, a seguito del fatto che non hai specificato il terzo parametro della funzione CONFRONTA e (non so se casualmente o no) l'elenco nello screenshot è ordinato alfabeticamente.
    VERO anche questo. Dando alla matrice un ordinamento decrescente, l'unica riga restituita è quella del valore esatto

    Quanto al Case...sicuramente il tuo metodo, in questo caso, è moooolto meglio!
    Funzione perfetta!
    Questo il risultato in unico foglio già abbinata con INDIRETTO:

    https://imgur.com/C64XEIz

    ..esattamente quello che serviva a me.

    Ancora...grazie infinite, anche per le spiegazioni

  6. #16
    Sgrubak non è in linea Scribacchino
    Post
    523
    Like Inviati  
    9
    Like Ricevuti  
    2
    Quote Originariamente inviato da surfgarden Visualizza il messaggio
    ...VERO anche questo. Dando alla matrice un ordinamento decrescente, l'unica riga restituita è quella del valore esatto
    Se provi a passare -1 come terzo parametro, vedi che ordinando in maniera decrescente otterrai di nuovo la corrispondenza se caratteri prima e non dopo. In pratica lo stesso risultato di prima.

    Quote Originariamente inviato da surfgarden Visualizza il messaggio
    Funzione perfetta!
    No... Fa quel che ti serve, ma manca una gestione degli errori ed un sacco di altre accortezze. Ma per qualcosa di non professionale credo sia sufficiente.

    In ogni caso, lieto di esserti stato di aiuto.

    Buona serata!

+ Rispondi al messaggio
Pagina 2 di 2 primaprima 12

Potrebbero interessarti anche ...

  1. Risposte: 7
    Ultimo Post: 21-10-2017, 16:12
  2. Dividere testo nelle celle adiacenti
    Da moro54 nel forum Microsoft Excel
    Risposte: 13
    Ultimo Post: 06-02-2015, 09:41
  3. Eliminare valore in celle mantenendo la formula in altra cella
    Da Codice_da_Vinci nel forum Microsoft Excel
    Risposte: 9
    Ultimo Post: 02-06-2013, 13:12
  4. Concatenare 2 celle con valore + cella testo
    Da datalife nel forum Microsoft Excel
    Risposte: 4
    Ultimo Post: 17-02-2013, 10:25
  5. Intervalli celle non adiacenti
    Da Nick nel forum Microsoft Word
    Risposte: 5
    Ultimo Post: 02-09-2005, 13:25