Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Funzione Excel per estrapolare i dati

    Ciao a tutti,
    ho una domanda interessante per tutti voi, spero che qlc riesca ad aiutarmi.

    Ho un file Excel con 60.000 e passa nominativi; da questi devo esportare 1.800 aziende, di cui ho solo il nome, per poter tirae fuori i contatti via mail, i numeri di telefono ed i nomi.

    A Lavoro mi hanno parlato della Funzione VLOOKUP, che sembra però che lavori solo quando i nominativi combaciano perfettamente (e nel primo file da 65000 nominativi magari ho la Perfetti Spa, mentre nel secondo potrebbe esserci Perfetti e basta..)

    Qlc sa consigliarmi una funzione di excel che agilmente tiri fuori questa stringa di dati??

    Mille grazie
    Andrea

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Probabilmente non è la soluzione più performante ma è la prima che mi è venuta in mente e la più semplice. Ti faccio un esempio banale.

    Supponendo che le tue ditte siano nel range e3:e5 (quello che contiene perfetti e simili per intenderci) mentre l'elenco lungo sia nel range a2:a5 potresti ricorrere a vba:

    codice:
    Sub trova()
    For Each cella In Range("e3:e5")
        For Each cella2 In Range("a2:a5")
          If InStr(1, cella2, cella, vbTextCompare) > 0 Then
            MsgBox cella2
          End If
        Next cella2
    Next cella
    End Sub
    La funzioncina si limita a mostrarti a video le ditte. Se è questo ciò che cerchi risulta poi facile adattarlo al tuo contesto, ad esempio copiando tali righe con tutte le altre informazioni in un altro foglio.

  3. #3
    Ciao Nicola, grz anzitutto per il suggerimento.

    Purtroppo ne so poco o niente di VB e potrà anche capitare che ci siano delle aziende (dal file più piccolo) non presenti in quello più grande...

    Il VLOOKUP sembra nn darmi grande aiuto...

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da Sancabananize
    Purtroppo ne so poco o niente di VB e potrà anche capitare che ci siano delle aziende (dal file più piccolo) non presenti in quello più grande...
    E quindi? Mi è parso di capire che dall'elenco più piccolo debba trovare SOLO le corrispondenze in quello più grande e la macro che ti ho scritto fa esattamente quello.

  5. #5
    riesci a spiegarmi dunque il procedimento per inserire il codice che mi hai scritto?
    Come ti ho detto purtroppo ne capisco proprio poco di macro...

    Il file da cui devo estrapolare i dati ha la seguente area: Foglio1'!$A$2:$O$62819
    Devo estrapolarne le colonne G, H ed I che corrispondono al nome, il ruolo in azienda e l'eventuale mail (ove presente)...
    Il tutto lo devo riportare in un altro foglio excel che ha 1.800 ragioni sociali, naturalmente non ordinate come l'altro foglio da cui andrò ad estrapolare i dati...

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ricapitoliamo.

    Come si chiama il foglio con le 1800 ragioni sociali?
    In quale intervallo si trovano tali voci?

    Se ho capito bene dal foglio1, una volta trovata la corrispondenza, devi copiare le colonne H e I nel foglio dei 1800 record, mentre G è la colonna dei nomi sui quali effettuare il confronto.

    A ciascuna di queste 1800 voci corrisponde una sola voce tra le 62000?

  7. #7
    Allora: il foglio con le 1800 aziende da ricerca si chiama PROSPECT.xls e l'intervallo è A1:F1756
    In questo file devo copiare le colonne F, G, H ed I del Foglio GUIDA.XLS, il cui intervallo da cui estrapolare i dati è A2:O62819

    La colonna su cui fare i controlli è la B del file GUIDA.XLS, che dovrebbero matchare (col vlookup ho messo true alla fine perchè possono essere diversi - mancanre per es. l'spa o mancare altri piccoli dati).

    In molti casi, facendo una ricerca random, ho trovato blank alcuni campi, dunque immagino che mi ritorneranno vuote, poco male...l'importante è trovarne il più possibile!

    A ciascuna delle 1.800 aziende devo riportare nel file le voci relative al titolo (colonna F), Nome e Cognome (G), Posizione Aziendale (H) ed email (la più importante colona I)..

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Per praticità copierei nel foglio2, a partire dalla cella a1, l'lelenco delle 1800 aziende, lasciando nel foglio1 (fai attenzione che i nomi dei due fogli siano proprio quelli) l'elenco più lungo.

    A questo punto lancia questa macro

    codice:
    Sub trova()
    'Application.ScreenUpdating = False
    For Each cella In Range("foglio2!a1:a1756")
        For Each cella2 In Range("foglio1!b2:b62819")
          If cella2.Value <> "" And cella.Value <> "" Then
            If InStr(1, cella2, cella, vbTextCompare) > 0 Then
                With Sheets("Foglio1")
                    .Range("f" & cella2.Row & ":i" & cella2.Row).Copy Destination:=Foglio2.Range("b" & cella.Row)
                End With
            End If
          End If
        Next cella2
    Next cella
    'Application.ScreenUpdating = True
    End Sub
    Eseguila dopo esserti posizionato nel foglio2, in modo da assistere in tempo reale a ciò che avviene.
    Per precauzione testa lo script su una copia del file.
    La macro è pesantissima. Se dovesse esserci qualsiasi problema per interrompere l'esecuzione della stessa premi ctrl+pausa.

  9. #9
    Gentilissimo, grazie.. ci provo in serata e poi ti fo sapere! Grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.