Importare dati da "pagine bianche"

Anonimo
2013-06-10T07:59:01+00:00

Salve a tutti.

innanzitutto grazie per l'attenzione.

Ho diversi file di Excel, strutturati in egual modo, dove al loro interno ci sono diverse colonne con ragione sociale, indirizzo e città di varie aziende.

Il mio obbiettivo è trovare CAP e Provincia di ognuna. Fino ad ora l'ho fatto manualmente dal sito di pagine bianche, ma visto che sono circa 800 contatti mi chiedevo se ci fosse il modo di automatizzare il tutto.

Non mi importa da dove siano importati i dati, l'importante è recuperare CAP e Provincia di ognuno.

Grazie a tutti in anticipo.

P.S. Ho appena cominciato ad imparare VBA, quindi sono un neofita.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2013-06-10T11:59:48+00:00

Public Function fCerca(ByVal rng As Variant, ByVal Comune As String) As String

   <cut>

Mauro ... questa poi da te non me la sarei mai aspettata. :)

Andrea.

Ho fatto e farò di peggio. E sono contento di non essere infallibile, quelle persone lì mi fanno paura. Come i fenomeni.

Ho adattato la Sub in Function lasciando cose inutili, eccola pulita:

Public Function fCerca(ByVal Comune As String) As String

    Dim lMax As Long

     Dim lMin As Long

     Dim lng As Long

     lMin = 2

     lMax = 14482

    Do While lMin <= lMax

         lng = (lMin + lMax) / 2

         If UCase(Cells(lng, 1).Value) = UCase(Comune) Then

             fCerca = "Comune: " & Cells(lng, 1).Value _

                 & "-" & "Cap: " & Cells(lng, 2).Value _

                 & "-" & "Provincia: " & Cells(lng, 3).Value

             Exit Function

         ElseIf Cells(lng, 1).Value < UCase(Comune) Then

             lMin = lng + 1

         Else

             lMax = lng - 1

         End If

     Loop

 End Function

 Se non lo utilizzi dallo stesso foglio:

Public Function fCerca(ByVal Foglio As String, ByVal Comune As String) As String

    Dim lMax As Long

    Dim lMin As Long

    Dim lng As Long

    Dim sh As Worksheet

    lMin = 2

    lMax = 14482

    Set sh = ThisWorkbook.Worksheets(Foglio)

    With sh

        Do While lMin <= lMax

            lng = (lMin + lMax) / 2

            If UCase(.Cells(lng, 1).Value) = UCase(Comune) Then

                fCerca = "Comune: " & .Cells(lng, 1).Value _

                    & "-" & "Cap: " & .Cells(lng, 2).Value _

                    & "-" & "Provincia: " & .Cells(lng, 3).Value

                Exit Function

            ElseIf .Cells(lng, 1).Value < UCase(Comune) Then

                lMin = lng + 1

            Else

                lMax = lng - 1

            End If

        Loop

    End With

 End Function

e varianti....

La risposta è stata utile?

0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-06-10T09:44:10+00:00

    ho trovato un database di tutti i comuni italiani: http://sdrv.ms/13stZQZ .

    Se devi cercare Cap e provincia via vb nel file con i comuni che hai lincato, inserendo in una InputBox il nome del comune (maiuscolo o minuscolo non ha importanza), queste macro fanno ciò che chiedi(mCerca_2 è più veloce, anche se con soli 14 mila dati non sembra):

    Public Sub mCerca_1()

        Dim lng As Long

        Dim sh As Worksheet

        Dim v As Variant

        v = UCase(Application.InputBox("Inserire il nome del comune"))

        If v = "" Then Exit Sub

        If v = False Then Exit Sub

        Set sh = ThisWorkbook.Worksheets("Dati")

        With sh

            For lng = 2 To 14481

                If UCase(.Cells(lng, 1).Value) = v Then

                    MsgBox "Comune: " & .Cells(lng, 1).Value _

                        & vbNewLine & "Cap: " & .Cells(lng, 2).Value _

                        & vbNewLine & "Provincia: " & .Cells(lng, 3).Value

                    Exit Sub

                End If

            Next

        End With

        Set sh = Nothing

    End Sub

    Public Sub mCerca_2()

        Dim lMax As Long

        Dim lMin As Long

        Dim lng As Long

        Dim sh As Worksheet

        Dim v As Variant

        v = UCase(Application.InputBox("Inserire il nome del comune"))

        If v = "" Then Exit Sub

        If v = False Then Exit Sub

        Set sh = ThisWorkbook.Worksheets("Dati")

        lMin = 2

        lMax = 14482

        With sh

            Do While lMin <= lMax

                lng = (lMin + lMax) / 2

                If UCase(.Cells(lng, 1).Value) = v Then

                    MsgBox "Comune: " & .Cells(lng, 1).Value _

                        & vbNewLine & "Cap: " & .Cells(lng, 2).Value _

                        & vbNewLine & "Provincia: " & .Cells(lng, 3).Value

                    Exit Sub

                ElseIf .Cells(lng, 1).Value < v Then

                    lMin = lng + 1

                Else

                    lMax = lng - 1

                End If

            Loop

        End With

        Set sh = Nothing

    End Sub

    Volendo possiamo trasformarle in funzioni richiamabili dalle celle, esempio:

    Public Function fCerca(ByVal rng As Variant, ByVal Comune As String) As String

        Dim lMax As Long

        Dim lMin As Long

        Dim lng As Long

        lMin = 2

        lMax = 14482

        Do While lMin <= lMax

            lng = (lMin + lMax) / 2

            If UCase(Cells(lng, 1).Value) = UCase(Comune) Then

                fCerca = "Comune: " & Cells(lng, 1).Value _

                    & "-" & "Cap: " & Cells(lng, 2).Value _

                    & "-" & "Provincia: " & Cells(lng, 3).Value

                Exit Function

            ElseIf Cells(lng, 1).Value < UCase(Comune) Then

                lMin = lng + 1

            Else

                lMax = lng - 1

            End If

        Loop

    End Function

    Da richiamare:

    =fCerca("A2:A15000";"Bologna")

    Anche in questo caso Bologna può essere maiuscolo o minuscolo. Bologna può trovarsi in una cella.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-06-10T09:37:53+00:00

    Ciao Andrea,

    ottimo consiglio.

    ho trovato un database di tutti i comuni italiani: http://sdrv.ms/13stZQZ .

    Questo invece è una parte del file che devo elaborare, http://sdrv.ms/13sucUm , quello che mi interessa è appunto trovare in modo automatizzato CAP e provincia (senza parentesi).

    Spero di essere stato esplicativo.

    Comunque non sono un esperto di Excel, quindi non sono molto pratico delle formule sopracitate.

    Grazie in anticipo e perdona l'ignoranza.

    Alessandro

    Ciao Alessandro,

    ti riallego il tuo file con le formule per trovare cap e provincia  in base al comune.

    Alcune formule restituiscono il valore #N/D, significa che il comune non è stato trovato nell'archivio. Le formule eseguono una ricerca 'esatta', senza tenere conto delle maiuscole/minuscole, " San Dona' Del Piave" non è " San Dona' Di Piave" e così per molti altri, in alcuni campi c'è il cap o la provincia tra parentesi. Dovrai intervenire manualmente sul campo comune facendo le correzioni opportune.

    Ho notato che quasi tutti i comuni hanno uno spazio come primo carattere: è una pessima abitudine e dovresti eliminarlo, eventualmente utilizzando =ANNULLA.SPAZI().

    Una volta trovati tutti i cap e le province sarebbe meglio eliminare le formule di ricerca, per non appesantire troppo il file con formule che a quel punto saranno diventate inutili. Vedremo poi come fare quest'operazione.

    Ecco il file con le formule, nello stesso ho inserito anche il foglio con l'archivio dei comuni per comodità.

    Ciao,

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-06-10T08:47:59+00:00

    Ciao Andrea,

    ottimo consiglio.

    ho trovato un database di tutti i comuni italiani: http://sdrv.ms/13stZQZ .

    Questo invece è una parte del file che devo elaborare, http://sdrv.ms/13sucUm , quello che mi interessa è appunto trovare in modo automatizzato CAP e provincia (senza parentesi).

    Spero di essere stato esplicativo.

    Comunque non sono un esperto di Excel, quindi non sono molto pratico delle formule sopracitate.

    Grazie in anticipo e perdona l'ignoranza.

    Alessandro

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-06-10T08:23:05+00:00

    Salve a tutti.

    innanzitutto grazie per l'attenzione.

    Ho diversi file di Excel, strutturati in egual modo, dove al loro interno ci sono diverse colonne con ragione sociale, indirizzo e città di varie aziende.

    Il mio obbiettivo è trovare CAP e Provincia di ognuna. Fino ad ora l'ho fatto manualmente dal sito di pagine bianche, ma visto che sono circa 800 contatti mi chiedevo se ci fosse il modo di automatizzare il tutto.

    Non mi importa da dove siano importati i dati, l'importante è recuperare CAP e Provincia di ognuno.

    Grazie a tutti in anticipo.

    P.S. Ho appena cominciato ad imparare VBA, quindi sono un neofita.

    Ciao Alessandro,

    puoi scaricare un archivio in formato excel/csv dei comuni italiani con i dati che ti servono, in rete ce ne sono molti e con dati diversi, una volta individuato quello che fa al caso tuo sarà sufficiente implementare una ricerca con formule utilizzando ad esempio CERCA.VERT o l'accoppiata INDICE/CONFRONTA oppure con del codice vba.

    Quando hai individuato e scaricato l'archivio, vedremo come fare la ricerca se non ci riesci da solo.

    Ciao,

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento