2013-04-02 8 views
7

Ho un database Excel e sto cercando di evitare di combinare manualmente dati duplicati. Ho un sacco di elenchi che sono essenzialmente gli stessi a parte la colonna dei tag. Quello che mi piacerebbe averlo fare è combinare questi 5 elenchi in 1 elenco, rendendo le categorie un elenco separato da virgole in una singola cella.Combinazione di voci duplicate con dati univoci in Excel

trasformare questo

Data Example

in questo

Desired result

Esiste un modo per raggiungere questo? Il mio documento ha un paio di migliaia di annunci, quindi sto ovviamente cercando di evitare il percorso di modifica manuale. Sono un novizio di Excel, quindi qualsiasi mano che tiene o tutorial a cui potresti indirizzarmi sarebbe apprezzata.

+0

super facile se la lista è già ordinata in base alla prima colonna (ad es., Quindi tutti i "negozi associati di pneumatici canadesi" sono raggruppati insieme) e solo marginalmente più difficili se non sono ordinati. Archiviare gli elenchi in un array 2D e creare l'elenco separato da virgole nella seconda colonna dell'array. Al termine, scrivere su un nuovo foglio/ecc. –

+0

@DavidZemens Non sono sicuro di come fare per farlo? Può essere fatto attraverso Excel, o è fatto in modo programmatico? Sono un designer che cerca di farmi strada tra i problemi di gestione dei dati in cui mi sto imbattendo, quindi non sono proprio sicuro di come farlo. – jbwharris

+0

Sì, questo può essere fatto utilizzando VBA (Visual Basic for Applications) che è probabilmente il modo più semplice per "comunicare" a livello di codice con Excel. La risposta suggerita da Nick, di seguito, dovrebbe essere più o meno funzionalmente equivalente a ciò che ho descritto ed è un altro buon metodo per questo tipo di problema (prima oggi suggerivo [questo tipo di soluzione] (http://stackoverflow.com/questions/15748138/convert-list-of-items-in-an-excel-table-to-comma-separated-string/15749038 # 15749038) su un'altra domanda). –

risposta

20

Questo può essere fatto anche utilizzando le formule. Perché il mio esempio funzioni, i dati dovrebbero essere ordinati dalla prima colonna e ci dovrebbe essere una riga di intestazione.

Avresti bisogno di altre due colonne (C & D). Innanzitutto, aggiungi una formula che in sostanza dice di concatenare i dati nella colonna B se i dati nella colonna A sono gli stessi della riga sopra di esso, altrimenti ripristina la concatenazione. La colonna successiva conterrà una formula per identificare le concatenazioni finali in modo da poter ordinare in seguito.

Ecco come lo farei con annunci e le categorie nelle colonne A & B (ancora una volta, i dati dovrebbero essere ordinati per colonna A e non ci sarebbe bisogno di essere una riga di intestazione): enter image description here

Ecco i risultati. Ora vorrei copiare l'intero intervallo e incollare i valori su un altro foglio. Le righe con zero per la colonna D sono quelle che vorrei utilizzare. Ordinamento per colonna D li fluttuerebbe verso l'alto.

+0

Ok, questo sembra più vicino a quello che sto cercando di fare e allinea con la mia conoscenza di Excel. Ho provato a modificare la formula su = IF (A2 = A1, L1 & "," & I2, I2 + L3) e mi sta dicendo che ho un riferimento circolare. Ho raggruppato più righe di dati, ma sono tutti dati duplicati tranne la colonna della categoria. Farebbe casino? – jbwharris

+0

Lasciatemi provare a suddividere meglio una parte dell'istruzione if. Per vero: concatena la cella direttamente sopra (la concatenazione cumulativa) con la categoria nella riga corrente (presumo I2). Per false: nessuna concatenazione, basta fare riferimento alla categoria nella riga corrente (I2). Penso che L3 stia causando il riferimento circolare. Questa formula funziona? = IF (A2 = A1, L1 & "," e I2, I2) –

+0

Perfetto, sta facendo esattamente quello che mi serve. Grazie mille! – jbwharris

1

Questo (dovrebbe) generare un nuovo foglio dal foglio sorgente con i duplicati concatenati.

Per utilizzare il seguente codice è necessario aggiungere a un nuovo modulo nel VBA Editor

Una scorciatoia per aprire l'editor VBA è Alt+F11 (per Windows) e Alt+Fn+F11 (per Mac)

volta l'Editor è aperto aggiungi un nuovo modulo selezionandolo dal menu "inserisci" nella barra dei menu principale. Dovrebbe automaticamente aprire il modulo pronto ad accettare il codice, se non è necessario selezionarlo (sarà chiamato "ModuleN" dove N è il prossimo numero disponibile) dal project explorer.

Non sono sicuro che lo "Scripting.Dictionary" sia disponibile in osx, ma non mi fa male provare.

Option Explicit 

Sub Main() 
Dim Source As Worksheet: Set Source = ThisWorkbook.Worksheets("Sheet1") 
Dim Destination As Worksheet: Set Destination = ThisWorkbook.Worksheets("Sheet2") 

Dim Records As Object: Set Records = CreateObject("Scripting.Dictionary") 

Dim Data As Variant 
Dim Index As Long 
Dim Row As Integer: Row = 1 

Data = Source.Range("A1", "B" & Source.Rows(Source.UsedRange.Rows.Count).Row).Value2 

For Index = LBound(Data, 1) To UBound(Data, 1) 
    If Records.Exists(Data(Index, 1)) Then 
     Destination.Cells(Records(Data(Index, 1)), 2).Value2 = Destination.Cells(Records(Data(Index, 1)), 2).Value2 & ", " & Data(Index, 2) 
    Else 
     Records.Add Data(Index, 1), Row 
     Destination.Cells(Row, 1).Value2 = Data(Index, 1) 
     Destination.Cells(Row, 2).Value2 = Data(Index, 2) 
     Row = Row + 1 
    End If 
Next Index 

Set Records = Nothing 

End Sub 
+0

Come ho già detto, non sono un asso con Excel. Dove vado a eseguire quel codice? – jbwharris

+0

Ho appena controllato e non c'era un'opzione del modulo sotto Opzione. Domani proveremo a lavorare dove ho Office 2007. Grazie. – jbwharris