Risultati da 1 a 10 di 10

Discussione: Estrarre Testo da Stringhe non regolari e matching



  1. #1
    L'avatar di tmac720
    Clicca e Apri
    Data Registrazione
    Feb 2016
    Località
    milano
    Messaggi
    3
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    0

    Estrarre Testo da Stringhe non regolari e matching

    Salve a tutti, mi trovo ad affrontare un problema lavorativo.
    Ho un elenco di indirizzi del tipo:

    Indirizzo
    Via Filippo Brunelleschi, 7, 42048 Rubiera RE, Italy
    Stradello Massaroni, 41014 Castelvetro di Modena MO, Ita

    e in un altro foglio l'elenco delle provincie e regioni italiane:

    Regione Provincia
    Abruzzo AQ
    Abruzzo... PE...
    Veneto VE

    Vorrei che in una colonna accanto all'indirizzo mi apparisse la Regione di appartenenza, ma proprio non riesco a capire come fare;
    è possibile farlo solo con formule excel o serve VBA? C'è qualcuno che riesce a vedere una soluzione. Grazie

  2. #2

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2808
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    979
    Posta un file senza dati sensibili, forse si può fare qualcosa.

  3. #3
    L'avatar di tmac720
    Clicca e Apri
    Data Registrazione
    Feb 2016
    Località
    milano
    Messaggi
    3
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    0
    Ecco il file. Stavo cercando una soluzione con VBA, ma mi sembra come sparare con un cannone ad un topolino, e in più il mio livello è vba for dummies...
    File Allegati File Allegati

  4. #4

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2808
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    979
    Purtroppo è un database completamente disomogeneo (alcuni record hanno solo CAP e Italy alcuni solo Italy)
    Bisogna armarsi di santa pazienza e ordinare il database per renderlo omogeneo (tipo Via, Num, CAP, Prov, Italy).

  5. #5
    L'avatar di pkrome59
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Reggio Calabria
    Età
    58
    Messaggi
    1188
    Versione Office
    Office 2013
    Likes ricevuti
    1198
    Likes dati
    2133
    Ciao, se ho intuito bene una possibile soluzione potrebbe essere la seguente:
    Foglio1, in B2:
    =INDICE(Foglio2!$A$2:$A$7;AGGREGA(15;6;(RIF.RIGA(Foglio2!$B$2:$B$7)-RIF.RIGA(Foglio2!$B$2)+1)/(TROVA(Foglio2!$B$2:$B$7;Foglio1!$A2)>0+0);RIGHE(Foglio1!$A$1)))
    e tirare giù.
    Allego il file di prova.
    Fa sapere se va bene.
    File Allegati File Allegati

  6. I seguenti 2 utenti hanno dato un "Like" a pkrome59 per questo post:


  7. #6
    L'avatar di tmac720
    Clicca e Apri
    Data Registrazione
    Feb 2016
    Località
    milano
    Messaggi
    3
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    0
    Ok, Grazie. Torno a casa e provo a dare un'occhiata. Domani ti faccio sapere!

  8. #7
    L'avatar di Bolz1
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Padova
    Età
    41
    Messaggi
    117
    Versione Office
    '11 e 16 MAC
    Likes ricevuti
    7
    Likes dati
    1
    Wonderful!

    La spiegheresti pezzo per pezzo per favore?

    Più o meno ho capito il ragionamento...ma meno che più
    Ultima modifica fatta da:Canapone; 28/06/17 alle 15:20
    "Se tu segui tua stella non puoi fallire a glorioso porto" (Dante, Inferno - XV)

  9. #8
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    815
    Versione Office
    2016 64bit
    Likes ricevuti
    147
    Likes dati
    53
    Ecco cosa ho partorito in formato VBE e funziona solo per le righe dove effettivamente è presente una sigla di una provincia, dove non c'è la cella rimane vuota.
    Faccio presente che manca nella lista Monza e Brianza MB che ho inserito per le prove con la macro:
    Codice: 
    Option Explicit
    
    Sub Cerca_Provincia()
    
        Dim prv(103) As String  'matrice sigle province (è da calcolare !!)
        Dim ind As String       'stringa da analizzare
        Dim X As Long           'contatore generico (matrice poi indirizzi)
        Dim P As Integer        'contatore matrice province
        Dim Y As Long           'contatore caratteri stringa indirizzo
        Dim pos As Integer      'posizione rilevata nella stringa
        Dim ce As Boolean       'flag trovata corrispondenza
        Dim prov As String      'sigla provincia trovata
        Dim wsh1 As Worksheet   'foglio sigle
        Dim wsh2 As Worksheet   'foglio indirizzi
        Dim ur1 As Long         'ultima riga province
        Dim ur2 As Long         'ultima riga indirizzi
                
        Set wsh1 = ThisWorkbook.Worksheets("Sheet2")
        Set wsh2 = ThisWorkbook.Worksheets("risultati")
         'carica la matrice province
        ur1 = wsh1.Cells(Rows.Count, 1).End(xlUp).Row   'calcola l'ultima riga utilizzata nel foglio
        For X = 2 To ur1                                'righe province
            prv(X - 2) = wsh1.Range("A" & X).Value
        Next X
         'cicla le righe indirizzi
        ur2 = wsh2.Cells(Rows.Count, 1).End(xlUp).Row   'calcola l'ultima riga utilizzata nel foglio
        For X = 2 To ur2                                'righe indirizzi
            ind = Range("B" & X).Value
             'cicla i caratteri della stringa indirizzo
            For Y = 1 To Len(ind) - 1                   '-1 visto che ci sono 2 caratteri per provincia
                 'ciclo pari al numero di sigle nella matrice
                For P = 0 To UBound(prv)
                    pos = InStr(Y, ind, prv(P))
                     'verifica se è stata trovata la sigla
                    If pos > 0 Then
                        ce = True                       'trovata corrispondenza sigla
                        prov = prv(P)                   'memorizza provincia trovata
                    End If
                Next P
            Next Y
             'se la sigla è stata rilevata riportala nella colonna C
            If ce = True Then
                wsh2.Range("C" & X) = prov
            End If
            ce = False                                  'ripristina flag per indirizzo successivo
        Next X
        
    End Sub

  10. #9
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    815
    Versione Office
    2016 64bit
    Likes ricevuti
    147
    Likes dati
    53
    Ehm, serviva trovare la regione non la provincia e ormai è tardi per rettificare la precedente, riporto la correzione in un nuovo post:
    Codice: 
    Option Explicit
    Sub Cerca_Provincia()
    
        Dim prv(103) As String  'matrice sigle province (è da calcolare !!)
        Dim ind As String       'stringa da analizzare
        Dim X As Long           'contatore generico (matrice poi indirizzi)
        Dim P As Integer        'contatore matrice province
        Dim Y As Long           'contatore caratteri stringa indirizzo
        Dim pos As Integer      'posizione rilevata nella stringa
        Dim ce As Boolean       'flag trovata corrispondenza
        Dim prov As String      'sigla provincia trovata
        Dim rgn As String       'regione provincia trovata
        Dim wsh1 As Worksheet   'foglio sigle
        Dim wsh2 As Worksheet   'foglio indirizzi
        Dim ur1 As Long         'ultima riga province
        Dim ur2 As Long         'ultima riga indirizzi
                
        Set wsh1 = ThisWorkbook.Worksheets("Sheet2")
        Set wsh2 = ThisWorkbook.Worksheets("risultati")
         'carica la matrice province
        ur1 = wsh1.Cells(Rows.Count, 1).End(xlUp).Row   'calcola l'ultima riga utilizzata nel foglio
        For X = 2 To ur1                                'righe province
            prv(X - 2) = wsh1.Range("A" & X).Value
        Next X
         'cicla le righe indirizzi
        ur2 = wsh2.Cells(Rows.Count, 1).End(xlUp).Row   'calcola l'ultima riga utilizzata nel foglio
        For X = 2 To ur2                                'righe indirizzi
            ind = Range("B" & X).Value
             'cicla i caratteri della stringa indirizzo
            For Y = 1 To Len(ind) - 1                   '-1 visto che ci sono 2 caratteri per provincia
                 'ciclo pari al numero di sigle nella matrice
                For P = 0 To UBound(prv)
                    pos = InStr(Y, ind, prv(P))
                     'verifica se è stata trovata la sigla
                    If pos > 0 Then
                        ce = True                       'trovata corrispondenza sigla
                        'prov = prv(P)                   'memorizza provincia trovata
                        rgn = wsh1.Range("B" & P + 2)   'memorizza relativa regione
                    End If
                Next P
            Next Y
             'se la sigla è stata rilevata riportala nella colonna C
            If ce = True Then
                wsh2.Range("C" & X) = rgn
            End If
            ce = False                                  'ripristina flag per indirizzo successivo
        Next X
        
    End Sub

  11. #10
    L'avatar di pkrome59
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Reggio Calabria
    Età
    58
    Messaggi
    1188
    Versione Office
    Office 2013
    Likes ricevuti
    1198
    Likes dati
    2133
    Ciao, una variante potrebbe essere:
    Foglio1, in B2:
    =SE.ERRORE(INDICE(Foglio2!$A$2:$A$7;AGGREGA(15;6;(RIF.RIGA(Foglio2!$B$2:$B$7)-RIF.RIGA(Foglio2!$B$2)+1)/(--(TROVA(Foglio2!$B$2:$B$7;Foglio1!$A2)>0));RIGHE(Foglio1!$A$1)));"")
    e tirare giù.
    Allego il file di prova.
    File Allegati File Allegati

Discussioni Simili

  1. Estrazione di più stringhe da unico testo
    Di Samuela nel forum Domande su Excel in generale
    Risposte: 0
    Ultimo Messaggio: 29/12/16, 15:45
  2. estrarre stringhe alfanumeriche da excel
    Di zaqsedc nel forum Domande su Excel in generale
    Risposte: 7
    Ultimo Messaggio: 11/10/16, 18:52
  3. Estrarre stringhe testo o numeri da una cella
    Di robynud nel forum Domande su Excel in generale
    Risposte: 7
    Ultimo Messaggio: 17/03/16, 12:07
  4. Estrarre numeri da stringhe -quiz
    Di ges nel forum Domande su Excel in generale
    Risposte: 14
    Ultimo Messaggio: 29/08/15, 00:02
  5. Quiz #5 Estrarre nomi da Stringhe
    Di Gerardo Zuccalà nel forum Domande su Excel in generale
    Risposte: 1
    Ultimo Messaggio: 23/06/15, 06:03

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •