Comment supprimer les lignes en double sur la base de certaines colonnes

11

J'ai une feuille Excel qui contient des lignes en double

Je souhaite supprimer une ligne si ses colonnes ACDEF sont identiques (ignorer B lors du calcul des doublons mais la supprimer lors de la suppression d'une ligne)

Pour le moment, il ignore B pendant la comparaison ainsi que la suppression.

user33949
la source
Pouvez-vous ajouter une capture d'écran avec un avant et un après souhaité? J'ai du mal à imaginer ce dont vous avez besoin (désolé)
Dave
Ainsi, toute valeur en double dans les colonnes A, C, D, E, F entraînera une suppression de ligne entière, en conservant la première instance du doublon? Que faire si A1 correspond à A2, mais C2 correspond à C3, la ligne 2 est-elle supprimée?
Raystafarian

Réponses:

18

Dans Excel 2013

  1. Sélectionnez toutes les données
  2. Sélectionnez l'onglet Données -> Supprimer les doublons
  3. Cochez «Mes colonnes ont des en-têtes» si vos données ont des en-têtes de colonne.
  4. Décochez toutes les colonnes que vous ne souhaitez PAS utiliser en comparaison
  5. appuyer sur OK

Terminé

user33949
la source
Non, cela recherche des lignes similaires aux autres lignes. J'y ai aussi pensé, mais c'est une solution à une question différente :)
Garrulinae
@Garrulinae Que dites-vous, pouvez-vous expliquer comment cela ne fonctionne pas? Il semble que la réponse à la question d'OP soit correcte.
TheCrazyProgrammer
@TheCrazyProgrammer - En examinant cela plus de 2 ans plus tard, je peux voir que la question du PO " Je veux supprimer une ligne si ses colonnes ACDEF sont identiques " peut être interprétée de deux manières différentes. Je suppose que cela signifie que si ces colonnes sont identiques les unes aux autres dans cette ligne . Cette réponse suppose que cela signifie que les valeurs dans les colonnes de cette ligne sont identiques à celles d'une autre ligne . Avec le recul, cette hypothèse semble avoir été correcte, d'autant plus qu'elle a été marquée comme la bonne réponse.
Garrulinae
@Garrulinae Gotcha. Maintenant, j'ai vu et compris votre réponse. Sur une note latérale, je suis surpris que la fonctionnalité requise par OP (et moi) existe en tant que bouton simple dans Excel, mais la recherche sur Google vous donne un tas d'articles faisant des choses compliquées qui m'ont un moment fait douter de cette réponse.
TheCrazyProgrammer
@TheCrazyProgrammer, j'ai aussi une petite note - je viens juste de réaliser que c'est l'OP qui a posté cette réponse! C'est évidemment la bonne réponse, mais c'est dommage que la question ne soit pas plus claire.
Garrulinae
1

Si je vous ai bien compris, compte tenu des lignes 1 et 2, vous souhaitez supprimer une ligne 2 si et seulement si A1 = A2, C1 = C2, D1 = D2, E1 = E2 et F1 = F2.

C'est ce que j'ai trouvé. Il pourrait probablement être plus court mais il fait l'affaire:

Sub DeleteDuplicate()
Dim current As String
ActiveSheet.Range("A1").Activate
Do While ActiveCell.Value <> ""
    current = ActiveCell.Address
    ActiveCell.Offset(1, 0).Activate
    Do While ActiveCell.Value <> ""
        If ((ActiveSheet.Range(current).Value = ActiveCell.Value) And (ActiveSheet.Range(current).Offset(0, 2).Value = ActiveCell.Offset(0, 2).Value) And (ActiveSheet.Range(current).Offset(0, 3).Value = ActiveCell.Offset(0, 3).Value) And (ActiveSheet.Range(current).Offset(0, 4).Value = ActiveCell.Offset(0, 4).Value) And (ActiveSheet.Range(current).Offset(0, 5).Value = ActiveCell.Offset(0, 5).Value)) Then
            ActiveSheet.Rows(ActiveCell.Row).Delete
        Else
        ActiveCell.Offset(1, 0).Activate
        End If
    Loop
    ActiveSheet.Range(current).Offset(1, 0).Activate
Loop
End Sub

Cela revient à parcourir toutes les lignes restantes en utilisant l'ActiveCell comme pointeur vers la ligne en cours d'évaluation et à stocker la cellule de la ligne "d'origine" dans la variable actuelle . Une fois la boucle terminée, la cellule sous le courant est activée et la boucle d'évaluation interne recommence.

Si j'ai foiré quelque part, n'hésitez pas à me le dire :)

kenkh
la source
1

Ajoutez cette formule dans chaque ligne, par exemple; dans la colonne G:

=IF(AND(A2=C2,A2=D2,A2=E2,A2=F2),"DELETE ME","")

Cela donnera un résultat comme:

A   B   C   D   D   F   G
-   -   -   -   -   -   -
x   o   x   x   x   x   DELETE ME
x   x   x   x   x   o   
x   x   x   x   x   x   DELETE ME
x   o   o   x   x   x   

Créez ensuite un filtre sur la colonne G pour les lignes qui disent «SUPPRIMEZ-MOI» et supprimez-les.

Garrulinae
la source
0

@ Garrulinae

J'ai utilisé votre idée comme source d'inspiration. J'avais beaucoup de lignes et ce que je voulais, c'était supprimer les lignes contenant les valeurs en double d'une colonne. Si j'utilise Supprimer les doublons sur cette colonne, cela supprimera uniquement les données de cette colonne et non la ligne entière. Je voulais supprimer toutes les 2e et 3e lignes de l'ensemble de la table. Donc, ce que j'ai fait, j'ai créé une nouvelle colonne et laissé la valeur de la première ligne vide, supprimez-moi dans les deuxième et troisième lignes. Et puis j'ai copié les valeurs des trois premières lignes de cette colonne particulière uniquement (pas la ligne entière) et collé sur toute la colonne du tableau. Maintenant, je devais "supprimer moi" à chaque 2e et 3e ligne de la colonne entière. Ensuite, je n'ai qu'à trier les valeurs de cette colonne et supprimer toutes les lignes contenant me supprimer. Vous pouvez utiliser la même solution si vous souhaitez supprimer tous les 2e, 3e et 4e ou 2e, 3e, 4e et 5e ou ainsi de suite ...

J'espère que cela aide quelqu'un ...

Sunil
la source
2
Je ne comprends pas bien ce que vous dites. Au lieu de décrire ce que vous avez fait, pouvez-vous nous montrer la ou les formules que vous avez utilisées, présenter des exemples de données et montrer comment votre réponse fonctionne sur ces données?
Scott