Domanda ricerca di una PAROLA all'interno di una stringa

ivan.d.p.

Utente junior
16 Aprile 2019
20
1
Excel 2007
0
RICERCA DI UNA UNA LISTA DI PAROLE ALL'INTERNO DI UNA STRINGA

Scusate la spiegazione forse un po' complessa, ma sono un neofita...

All'interno di una stringa (colonna G del FOGLIO 1) devo controllare (indifferentemente se le lettere sono maiuscole o minuscole) se siano presenti UNA o PIU' parole (o porzioni di essa)
di una tabella (FOGLIO 2 colonna A) e nella colonna F del FOGLIO 1 dovrò restituire il valore relativo trovato che si trova nella tabella nel FOGLIO 2 nella colonna B.
NB. LA LISTA DI PAROLO NELLA TABELLA PUO' CONTENERE 300/400 PAROLE CHIAVE

(Se è presente una sola parola inserire il valore di riferimento della colonna B Foglio 2) ESEMPIO FOGLIO 1 COLONNA F RIGHE 1 e 4
(Se sono presenti più parole inserire i vari numeri di riferimento) ESEMPIO FOGLIO 1 COLONNA F RIGA 2
(Se non è presente alcuna parola della tabella, lasciare il campo vuoto) ESMPIO FOGLIO 1 COLONNA F RIGA 3

FOGLIO 1 NELLA COLONNA B BISOGNA INSERIRE LA FORMULA CHE FACCIA LA RICERCA NELLA TABELLA DEL FOGLIO 2



























COLONNA G COLONNA F
1 PAGAMENTO MAESTRO DEL 04/01/19 CARTA *0969 DI EU 37,67 VIALE EUROPA PRIX QUALITY 1
2 PAGOBANCOMAT CON CARTA *0428 DEL 10/01 A&O SUPERMERCATO 1, 5
3 SPESA GIARDINIERE
4 SPESA Farmacia CENTRALE 3
FOGLIO 2 (dove c'è la tabella)






























COLONNA A COLONNA B
Lidl 1
A&O 1
PRIX 2
farmacia 3
madonnetta 4
super 5
 

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
17.645
113
65
Napoli
2013
300
ivan.d.p. @ivan.d.p.

Allega un file di Excel di esempio con i dati ed il risultato voluto inserito a mano.

P.S. Siamo in attesa dell'integrazione alla tua presentazione.
 

ivan.d.p.

Utente junior
16 Aprile 2019
20
1
Excel 2007
0
Innanzitutto grazie mille, ho già provveduto a integrare la mia presentazione. Eccomi ad allegarvi un file dove forse è più semplice capire ciò che serve rispetto ciò che ho scritto precedentemente
Ringraziandovi anticipatamente
saluto cordialmente
Ivan
 

Allegati

genio66

Utente assiduo
Expert
25 Marzo 2017
1.000
63
Friuli
LibreOffice 6
80
Buondì, con una formula potresti ottenere i risultati della stessa riga divisi per colonna, non in una cella come hai messo nell'esempio. Se comunque ti va bene prova a mettere in E2 (io l'ho messo in F2 per confronto)
=SE.ERRORE(INDICE(Foglio2!$B$2:$B$6;PICCOLO(SE(VAL.NUMERO(RICERCA(Foglio2!$A$2:$A$6;$C2));RIF.RIGA(Foglio2!$B$2:$B$6)-1);RIF.COLONNA(A$1)));"")
confermalo con CTRL+MAIUSCOLO+INVIO e tira in basso e a destra.
 

Allegati

  • Like
Reactions: ges and D@nilo

locate

Utente abituale
24 Ottobre 2016
431
28
locate varesino
2007/13
31
ciao

io ti propongo una sub() da inserire in foglio2

Visual Basic:
Option Explicit
Sub trova_corrispondenze()
Dim i As Long, o As Long
Dim Sh As String
Dim contatore As Long
Dim CODICE As String
Sh = "Foglio1"
contatore = 0
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
CODICE = UCase(Cells(i, "A"))
  For o = 2 To Sheets(Sh).Cells(Rows.Count, "C").End(xlUp).Row
  If InStr(1, UCase(Sheets(Sh).Cells(o, "C")), CODICE, 1) > 0 Then contatore = contatore + 1
  Next o
Cells(i, "C") = contatore
contatore = 0
Next i
End Sub
riallego il tuo file con la sub() inserita

ciao
 

Allegati

ivan.d.p.

Utente junior
16 Aprile 2019
20
1
Excel 2007
0
Innanzi tutto Grazie mille a tutti, in particolare a genio66, per la cortesia e la celerità della risposta.
La tua soluzione è geniale e funziona benissimo, a me ci sarebbero voluti 2 anni di tutorials ;-) e anche anche...
Purtroppo questo è un file che ho creato per semplificare e nel mio file reale, nelle colonne di fianco ho altri dati, ed avrei necessità, se fosse possibile, di adattare la formula affinché eventuali valori multipli riscontrati vengano segnalati in un'unica cella e non su più celle. Sempre che sia possibile.
Intanto ringrazio anticipatamente.
E' davvero bello vedere che c'è gente che aiuta spassionatamente il prossimo.
 

ivan.d.p.

Utente junior
16 Aprile 2019
20
1
Excel 2007
0
Intanto grazie locate per la tua disponibilità. Non so, forse non mi sono spiegato bene, o c'è stato un piccolo faintendimento, ma provando a lanciare la tua macro mi da dei risultati errarti.
La tua macro inserisce i dati nel FOGLIO 2 nella colonna C, ma i dati vanno inseriti nel FOGLIO 1 colonna E
E comunque i valori che restituisce la macro sono errati rispetto a quello che era richiesto.
Nelle celle del Foglio 1 nella colonna E vanno inserti uno o più valori
questi valori sono i valori della colonna B Foglio 2
relativi alle parole incontrate nella colonna A Foglio 2
che sono presenti nella stringa della colonna C del Foglio 1

Scusa ma sono un neofita e non conosco bene la terminologia. Spero essermi spiegato meglio
 

ivan.d.p.

Utente junior
16 Aprile 2019
20
1
Excel 2007
0
Buondì, con una formula potresti ottenere i risultati della stessa riga divisi per colonna, non in una cella come hai messo nell'esempio. Se comunque ti va bene prova a mettere in E2 (io l'ho messo in F2 per confronto)
=SE.ERRORE(INDICE(Foglio2!$B$2:$B$6;PICCOLO(SE(VAL.NUMERO(RICERCA(Foglio2!$A$2:$A$6;$C2));RIF.RIGA(Foglio2!$B$2:$B$6)-1);RIF.COLONNA(A$1)));"")
confermalo con CTRL+MAIUSCOLO+INVIO e tira in basso e a destra.
La soluzione di genio66 funziona bene, però per le mie necessità funziona in parte. Restituisce i valori su più colonne.
Scusate sarebbe possibile modificare la formula facendo sì che restituisca i valori su un'unica colonna?
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.208
113
Como
2011MAC 2016WIN
324
sarebbe possibile modificare la formula facendo sì che restituisca i valori su un'unica colonna?
Ciao,
si dovrebbero concatenare più formule, tanto vale che in un'altra colonna tramite la funzione CONCATENA oppure & metti tutti i risultati in un'unica colonna.
 

ivan.d.p.

Utente junior
16 Aprile 2019
20
1
Excel 2007
0
Capisco, il fatto è che potrebbero esserci molti risultati da concatenare.
Peccato.
Nemmeno con una macro si riuscirebbe a fare, dando il risultato finale in un'unica cella?
Grazie ancora per la disponibilità.
 

ivan.d.p.

Utente junior
16 Aprile 2019
20
1
Excel 2007
0
ho provato a vedere la sua soluzione, ma non da il risultato corretto. Se poteste magari quando avete tempo darci un'occhiata e magari correggere l'errore, sarebbe grandioso. ho anche risposto a locate indicando l'errore. Sono in attesa di risposta.
Intanto ringrazio nuovamente.
 
Ultima modifica:

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.208
113
Como
2011MAC 2016WIN
324
Ok, se ho capito bene prova con questa macro:

Visual Basic:
Option Explicit
Option Compare Text
Sub cerca()
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim uR1 As Long
    Dim uR2 As Long
    Dim x As Long
    Dim j As Long
    Set sh1 = Worksheets("Foglio1")
    Set sh2 = Worksheets("Foglio2")
    With sh1
        uR1 = .Cells(Rows.Count, 3).End(xlUp).Row
        uR2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
        x = 2
        Do While x <= uR2
            For j = 2 To uR1
                If InStr(.Cells(j, 3), sh2.Cells(x, 1)) > 0 And _
                InStr(.Cells(j, 5), sh2.Cells(x, 1)) = 0 Then
                    .Cells(j, 5) = .Cells(j, 5) & " " & sh2.Cells(x, 1)
                End If
            Next
            x = x + 1
        Loop
    End With
End Sub
 

Allegati

  • Like
Reactions: Gianfranco55

ivan.d.p.

Utente junior
16 Aprile 2019
20
1
Excel 2007
0
INTANTO GRAZIE MILLE, ci sei andato vicinissimo, ma come risultato nella cella desiderata mi riproponi i valori della colonna A del foglio 2, ma la richiesta era per i relativi valori che risiedono nella stessa riga a nella colonna B del foglio 2.
Grazie
 

Gianfranco55

Utente assiduo
5 Novembre 2015
4.558
83
64
Valdagno
excel 365
175
ciao
cambia colonna e dovrebbe andare
Visual Basic:
Option Explicit
Option Compare Text
Sub cerca()
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim uR1 As Long
    Dim uR2 As Long
    Dim x As Long
    Dim j As Long
    Set sh1 = Worksheets("Foglio1")
    Set sh2 = Worksheets("Foglio2")
    With sh1
        uR1 = .Cells(Rows.Count, 3).End(xlUp).Row
        uR2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
        x = 2
        Do While x <= uR2
            For j = 2 To uR1
                If InStr(.Cells(j, 3), sh2.Cells(x, 1)) > 0 And _
                InStr(.Cells(j, 5), sh2.Cells(x, 1)) = 0 Then
                    .Cells(j, 5) = .Cells(j, 5) & " " & sh2.Cells(x, 2)
                End If
            Next
            x = x + 1
        Loop
    End With
End Sub
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.208
113
Como
2011MAC 2016WIN
324
Basta cambiare questo da così
Visual Basic:
sh2.Cells(x, 1)
a così
Visual Basic:
sh2.Cells(x, 2)
EDIT: Ciao Gianfranco, vedo adesso che ci avevi già pensato tu
 

Gianfranco55

Utente assiduo
5 Novembre 2015
4.558
83
64
Valdagno
excel 365
175
ciao Ges
io aggiungerei la cancellazione della colonna E
altrimenti continua a d aggiungere dati
al posto di aggiornarli
tipo
Visual Basic:
Option Explicit
Option Compare Text
Sub cerca()

    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim uR1 As Long
    Dim uR2 As Long
    Dim x As Long
    Dim j As Long
    Set sh1 = Worksheets("Foglio1")
    Set sh2 = Worksheets("Foglio2")
    sh1.Range("E2:E100").ClearContents
    With sh1
        uR1 = .Cells(Rows.Count, 3).End(xlUp).Row
        uR2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
        x = 2
        Do While x <= uR2
            For j = 2 To uR1
                If InStr(.Cells(j, 3), sh2.Cells(x, 1)) > 0 And _
                InStr(.Cells(j, 5), sh2.Cells(x, 1)) = 0 Then
                    .Cells(j, 5) = .Cells(j, 5) & " " & sh2.Cells(x, 2)
                End If
            Next
            x = x + 1
        Loop
    End With
End Sub
ho aggiunto
sh1.Range("E2:E100").ClearContents

NB
è facile variare il lavoro degli altriMuoio_muoio
 
  • Like
Reactions: ges

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.208
113
Como
2011MAC 2016WIN
324
Anzi visto che usi i numeri puoi cambiare così:
Visual Basic:
Option Explicit
Option Compare Text
Sub cerca()
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim uR1 As Long
    Dim uR2 As Long
    Dim x As Long
    Dim j As Long
    Set sh1 = Worksheets("Foglio1")
    Set sh2 = Worksheets("Foglio2")
    With sh1
        uR1 = .Cells(Rows.Count, 3).End(xlUp).Row
        uR2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
        sh1.Columns("E:E").NumberFormat = "@"
        .Range("E2:E" & uR1) = ""
        x = 2
        Do While x <= uR2
            For j = 2 To uR1
                If InStr(.Cells(j, 3), sh2.Cells(x, 1)) > 0 And _
                    InStr(.Cells(j, 5), sh2.Cells(x, 1)) = 0 Then
                    If .Cells(j, 5) = "" Then
                        .Cells(j, 5) = sh2.Cells(x, 2)
                    Else
                        .Cells(j, 5) = .Cells(j, 5) & " - " & sh2.Cells(x, 2)
                    End If
                End If
            Next
            x = x + 1
        Loop
    End With
End Sub
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!