Unire righe Excel con dati doppi ed eliminare le altre

Anonimo
2016-05-13T09:46:20+00:00

Buongiorno a tutti.

A lavoro ho un grande dilemma da risolvere per poter avere (finalmente) un ottimo database in Excel.

Ho unito tutti i vari database che ho in uno unico ed ora mi trovo un file con 24600 righe circa.

Molte di queste righe sono doppie perchè hanno il campo e-mail (quello che utilizziamo per trovare i doppioni) uguale tra loro.

Ovviamente altri campi (Nome referente, Indirizzo, telefono, ecc) possono differire, cioè la riga 1 può avere l'indirizzo mentre la riga 2 ha il referente.

Vi faccio un esempio con questi tre campi:

RAGIONE SOCIALE INDIRIZZO E- MAIL
azienda1 srl via pippo, 1
azienda1 srl ******@ciao.it

Vorrei chiedervi se esiste un modo per poter unire le righe in una unica andando a riempire i campi ottenendo una cosa del genere. Magari anche eliminando le altre righe doppie.

RAGIONE SOCIALE INDIRIZZO E- MAIL
azienda1 srl via pippo, 1 ******@ciao.it

Vi ringrazio per il vostro immenso aiuto.

Ciao, buona giornata.

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

15 risposte

Ordina per: Più utili
  1. Anonimo
    2016-05-16T14:25:34+00:00

    Ciao tex_willer,

    No, al massimo la situazione che si potrebbe presentare è questa.

    RAGIONE SOCIALE INDIRIZZO E- MAIL
    azienda1 srl via pippo, 1 abc @ yyy.com
    azienda1 srl abc @ yyy.com
    azienda1 srl abc @ yyy.com
    azienda1 srl via pippo, 1 abc @ yyy.com

    Prova qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IMper inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range

        Dim oDicAzienda As Dictionary

        Dim oDicIndirizzo As Dictionary

        Dim oDicEmail As Dictionary

        Dim vArr As Variant, vArrDelete() As Variant

        Dim vArrKeysIndirizzo As Variant, varrKeysEmail As Variant

        Dim vArrOut() As Variant

        Dim sStr As String, aStr As String

        Dim LRow As Long

        Dim i As Long, j As Long, k As Long

        Dim sAzienda As String, sIndirizzo As String, sEmail As String

        Dim bIndirizzo As Boolean, bEmail As Boolean

        Const sNomeFoglio As String = "Foglio1"                         '<<==== Modifica

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(sNomeFoglio)

        With SH

            LRow = LastRow(SH, .Columns("A:A"))

            Set Rng = .Range("A2:C" & LRow)

        End With

        Set oDicAzienda = New Dictionary

        Set oDicIndirizzo = New Dictionary

        Set oDicEmail = New Dictionary

        vArr = Rng.Value

        For i = 1 To UBound(vArr)

            sAzienda = vArr(i, 1)

            sIndirizzo = vArr(i, 2)

            sEmail = vArr(i, 3)

            bIndirizzo = sIndirizzo <> vbNullString

            bEmail = sEmail <> vbNullString

            With oDicAzienda

                Rng.Cells(i, "A").Select

                If Not .Exists(sAzienda) Then

                    .Add Key:=sAzienda, Item:=sIndirizzo

                Else

                    If bIndirizzo Then

                        .Item(sAzienda) = sIndirizzo

                    End If

                    j = j + 1

                    ReDim Preserve vArrDelete(1 To j)

                    vArrDelete(j) = i + 1 & ":" & i + 1

                End If

            End With

            If bIndirizzo Then

                With oDicIndirizzo

                    If Not .Exists(sIndirizzo) Then

                        .Add Key:=sIndirizzo, Item:=sAzienda

                    End If

                End With

            End If

            If bEmail Then

                With oDicEmail

                    If Not .Exists(sAzienda) Then

                        .Add Item:=sEmail, Key:=sAzienda

                    End If

                End With

            End If

        Next i

        sStr = Join(vArrDelete, ",")

        vArrKeysIndirizzo = oDicIndirizzo.Keys

        varrKeysEmail = oDicEmail.Keys

        ReDim arrOut(1 To oDicAzienda.Count, 1 To 3)

        For k = 1 To oDicAzienda.Count

            aStr = oDicAzienda.Keys(k - 1)

            arrOut(k, 1) = aStr

            arrOut(k, 2) = oDicAzienda.Item(aStr)

            arrOut(k, 3) = oDicEmail.Item(aStr)

        Next k

        With Rng

            .ClearContents

            On Error GoTo XIT

            Application.ScreenUpdating = False

            .Resize(oDicAzienda.Count, 3).Value = arrOut

        End With

    XIT:

        Set oDicAzienda = Nothing

        Set oDicIndirizzo = Nothing

        Set oDicEmail = Nothing

        Application.ScreenUpdating = True

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range, _

                            Optional minRow As Long = 1)

        If Rng Is Nothing Then

            Set Rng = SH.Cells

        End If

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

        If LastRow < minRow Then

            LastRow = minRow

        End If

    End Function

    '<<========= 

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm
    • Alt+F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester | Esegui

    Potresti scaricare il mio file di prova Tex_Willer20160516.xlsm a:

    https://www.dropbox.com/s/qgnics554i3b2a4/Tex_Willer20160516.xlsm?dl=0

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-05-16T12:16:11+00:00

    Ciao tex_willer,

    tex willer ha chiesto:

    A lavoro ho un grande dilemma da risolvere per poter avere (finalmente) un ottimo database in Excel.

    [Cut]

    Norman ha risposto con una domanda:

    Prima di suggerire una soluzione, sei sicuro che non ci sia alcuna possibilità che un'azienda possa avere più indirizzi o più indirizzi e-mail? 

    Se una di queste eventualità fosse possibile, come si farebbe per individuare quale di questi indirizzi ed e-mail dovrebbero essere associati l'uno con l'altro?

    tex willer ha poi risposto:

    Noi il controllo lo facciamo proprio sugli indirizzi e-mail quindi se excel mi indica un doppione c'è proprio la necessità di unire le righe.

    In ogni caso mi suggeriresti la tua proposta di soluzione? Così vediamo insieme se può risolvere il problema.. grazie mille!

    Forse la mia domanda era insufficientemente chiara.

    Considera la seguente situazione in cui si trova un cliente con due sede e con indirizzi email diversi, ad esempio:

    RAGIONE SOCIALE INDIRIZZO E- MAIL
    azienda1 srl via pippo, 1
    azienda1 srl via Pluto, 999
    azienda1 srl abc @ yyy.com
    azienda1 srl efg  @ yyy.com

    In una tale situazione, senza informazioni aggiuntive, non c'è modo per permettermi di associare attendibilmente sia sede con l'indirizzo email corrispondente corretto. Ne consegue anche che non sarei in grado di determinare se la seconda riga  rappresentasse un doppione che dovrebbe essere cancellato. Forse, tuttavia, il database comprende un'altra colonna che contiene una matricola o un dato univoco che risolverebbe il dilemma.

    Pertanto, vorrei rinnovare la mia domande precedente.

    ===

    Regards,

    Norman

    No, al massimo la situazione che si potrebbe presentare è questa.

    RAGIONE SOCIALE INDIRIZZO E- MAIL
    azienda1 srl via pippo, 1 abc @ yyy.com
    azienda1 srl abc @ yyy.com
    azienda1 srl abc @ yyy.com
    azienda1 srl via pippo, 1 abc @ yyy.com

    Ti ringrazio.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-05-16T12:06:01+00:00

    Ciao tex_willer,

    tex willer ha chiesto:

    A lavoro ho un grande dilemma da risolvere per poter avere (finalmente) un ottimo database in Excel.

    [Cut]

    Norman ha risposto con una domanda:

    Prima di suggerire una soluzione, sei sicuro che non ci sia alcuna possibilità che un'azienda possa avere più indirizzi o più indirizzi e-mail? 

    Se una di queste eventualità fosse possibile, come si farebbe per individuare quale di questi indirizzi ed e-mail dovrebbero essere associati l'uno con l'altro?

    tex willer ha poi risposto:

    Noi il controllo lo facciamo proprio sugli indirizzi e-mail quindi se excel mi indica un doppione c'è proprio la necessità di unire le righe.

    In ogni caso mi suggeriresti la tua proposta di soluzione? Così vediamo insieme se può risolvere il problema.. grazie mille!

    Forse la mia domanda era insufficientemente chiara.

    Considera la seguente situazione in cui si trova un cliente con due sede e con indirizzi email diversi, ad esempio:

    RAGIONE SOCIALE INDIRIZZO E- MAIL
    azienda1 srl via pippo, 1
    azienda1 srl via Pluto, 999
    azienda1 srl abc @ yyy.com
    azienda1 srl efg  @ yyy.com

    In una tale situazione, senza informazioni aggiuntive, non c'è modo per permettermi di associare attendibilmente sia sede con l'indirizzo email corrispondente corretto. Ne consegue anche che non sarei in grado di determinare se la seconda riga  rappresentasse un doppione che dovrebbe essere cancellato. Forse, tuttavia, il database comprende un'altra colonna che contiene una matricola o un dato univoco che risolverebbe il dilemma.

    Pertanto, vorrei rinnovare la mia domande precedente.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-05-16T09:53:14+00:00

    Ciao tex_willer,

    A lavoro ho un grande dilemma da risolvere per poter avere (finalmente) un ottimo database in Excel.

    Ho unito tutti i vari database che ho in uno unico ed ora mi trovo un file con 24600 righe circa.

    Molte di queste righe sono doppie perchè hanno il campo e-mail (quello che utilizziamo per trovare i doppioni) uguale tra loro.

    Ovviamente altri campi (Nome referente, Indirizzo, telefono, ecc) possono differire, cioè la riga 1 può avere l'indirizzo mentre la riga 2 ha il referente.

    Vi faccio un esempio con questi tre campi:

    RAGIONE SOCIALE INDIRIZZO E- MAIL
    azienda1 srl via pippo, 1
    azienda1 srl *** L'indirizzo di posta elettronica viene rimosso per motivi di privacy ***

    Vorrei chiedervi se esiste un modo per poter unire le righe in una unica andando a riempire i campi ottenendo una cosa del genere. Magari anche eliminando le altre righe doppie.

    RAGIONE SOCIALE INDIRIZZO E- MAIL
    azienda1 srl via pippo, 1 *** L'indirizzo di posta elettronica viene rimosso per motivi di privacy ***

    Prima di suggerire una soluzione, sei sicuro che non ci sia alcuna possibilità che un'azienda possa avere più indirizzi o più indirizzi e-mail?

    Se una di queste eventualità fosse possibile, come si farebbe per individuare quale di questi indirizzi ed e-mail dovrebbero essere associati l'uno con l'altro?

    ===

    Regards,

    Norman

    Ciao Norman,

    grazie per la risposta.

    Noi il controllo lo facciamo proprio sugli indirizzi e-mail quindi se excel mi indica un doppione c'è proprio la necessità di unire le righe.

    In ogni caso mi suggeriresti la tua proposta di soluzione? Così vediamo insieme se può risolvere il problema.. grazie mille!

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2016-05-13T23:58:47+00:00

    Ciao tex_willer,

    A lavoro ho un grande dilemma da risolvere per poter avere (finalmente) un ottimo database in Excel.

    Ho unito tutti i vari database che ho in uno unico ed ora mi trovo un file con 24600 righe circa.

    Molte di queste righe sono doppie perchè hanno il campo e-mail (quello che utilizziamo per trovare i doppioni) uguale tra loro.

    Ovviamente altri campi (Nome referente, Indirizzo, telefono, ecc) possono differire, cioè la riga 1 può avere l'indirizzo mentre la riga 2 ha il referente.

    Vi faccio un esempio con questi tre campi:

    RAGIONE SOCIALE INDIRIZZO E- MAIL
    azienda1 srl via pippo, 1
    azienda1 srl *** L'indirizzo di posta elettronica viene rimosso per motivi di privacy ***

    Vorrei chiedervi se esiste un modo per poter unire le righe in una unica andando a riempire i campi ottenendo una cosa del genere. Magari anche eliminando le altre righe doppie.

    RAGIONE SOCIALE INDIRIZZO E- MAIL
    azienda1 srl via pippo, 1 *** L'indirizzo di posta elettronica viene rimosso per motivi di privacy ***

    Prima di suggerire una soluzione, sei sicuro che non ci sia alcuna possibilità che un'azienda possa avere più indirizzi o più indirizzi e-mail?

    Se una di queste eventualità fosse possibile, come si farebbe per individuare quale di questi indirizzi ed e-mail dovrebbero essere associati l'uno con l'altro?

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento