web-dev-qa-db-fra.com

Combinaison d'entrées en double avec des données uniques dans Excel

J'ai une base de données Excel et j'essaie d'éviter de combiner manuellement des données en double. J'ai un tas d'annonces qui sont essentiellement les mêmes à part la colonne des balises. Ce que j'aimerais faire, c'est combiner ces 5 listes en 1 liste, faisant des catégories une liste séparée par des virgules dans une seule cellule.

Tourne ça

Data Example

dans ce

Desired result

Y a-t-il un moyen d'y parvenir? Mon document contient quelques milliers de listes, donc j'essaie évidemment d'éviter la route d'édition manuelle. Je suis un novice d'Excel, donc toute tenue de main ou tutoriel que vous pourriez me montrer serait apprécié.

7
jbwharris

Cela peut également être fait à l'aide de formules. Pour que mon exemple fonctionne, les données devraient être triées par la première colonne et il faudrait une ligne d'en-tête.

Vous auriez besoin de deux colonnes supplémentaires (C & D). Tout d'abord, ajoutez une formule qui dit essentiellement de concaténer les données de la colonne B si les données de la colonne A sont identiques à la ligne au-dessus, sinon réinitialisez la concaténation. La colonne suivante contiendrait une formule pour identifier les concaténations finales afin que vous puissiez trier plus tard.

Voici comment je le ferais avec les listes et les catégories dans les colonnes A et B (encore une fois, les données devraient être triées par colonne A et il faudrait une ligne d'en-tête): enter image description here

Voici les résultats. Maintenant, je copierais toute la plage et collerais les valeurs dans une autre feuille. Les lignes avec zéro pour la colonne D sont ce que je voudrais utiliser. Le tri par colonne D les ferait flotter vers le haut. enter image description here

23
Dave Thornton

Cela va (devrait) générer une nouvelle feuille à partir de votre feuille source avec les doublons concaténés.

Pour utiliser le code suivant, vous devez l'ajouter à un nouveau module dans l'éditeur VBA

Un raccourci pour ouvrir l'éditeur VBA est Alt+F11 (pour Windows) et Alt+Fn+F11 (pour Mac)

Une fois l'éditeur ouvert, ajoutez un nouveau module en le sélectionnant dans le menu "Insérer" de la barre de menu principale. Il devrait ouvrir automatiquement le module prêt à accepter le code, sinon vous devez le sélectionner (sera nommé "ModuleN" où N est le prochain numéro disponible) à partir de l'explorateur de projet.

Je ne sais pas si le "Scripting.Dictionary" est disponible en osx, mais ça ne fait pas de mal d'essayer.

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
1
NickSlash