Essayer de mettre en évidence des valeurs uniques sur plusieurs feuilles dans Excel 2007

0

J'essaie de comparer les valeurs de la colonne A Sheet1(que j'ai renommée "AR") et de la colonne A Sheet2(que j'ai renommée "Coller ici") et de mettre en surbrillance les lignes contenant des valeurs n'existant pas dans l'autre feuille. (Les deux colonnes se terminent par une cellule vide.) J'ai trouvé une macro qui, à mon avis, correspond à ce que je voulais ici. Suppression efficace des enregistrements en double sur plusieurs feuilles Excel et j'essaie de la modifier pour répondre à mes besoins. ne peut pas le faire fonctionner. Actuellement, lorsque je l'exécute, il verrouille Excel et je dois terminer la tâche sur Excel.

Voici ce que j'ai jusqu'à présent:

Option Explicit

Sub Compare2()
    Application.ScreenUpdating = False

    Dim startRow As Integer
    startRow = 1

    Dim row As Integer
    row = startRow

    Dim bRow As Integer

    'sharks below, cap'ain
    ' This loop is looping on row.
    ' Scan down column AR!A (i.e., Sheet1!A) until we find an empty cell.
    Do While (Worksheets("AR").Range("A" & row).Value <> "")

        Dim aVal As String
        aVal = Worksheets("AR").Range("A" & row).Value
        bRow = startRow             'I see thy booty

        ' This loop is looping on bRow.  Scan down column 'Paste Here'!A
        ' (i.e., Sheet2!A) until we find an empty cell.
        Do While (Worksheets("Paste Here").Range("A" & bRow).Value <> "")

            Dim aVal2 As String
            aVal2 = Worksheets("Paste Here").Range("A" & bRow).Value

            If (aVal <> aVal2) Then
                Worksheets("AR").Rows(row).Interior.ColorIndex = 6
                                ' we found a traitor; feed 'em to the sharks
                row = row - row
                Exit Do
            End If

            If (aVal2 <> aVal) Then
                Worksheets("Paste Here").Rows(row).Interior.ColorIndex = 6
                row = row - row
                Exit Do
            End If

            bRow = bRow + 1
        Loop

        row = row + 1
    Loop

End Sub

Toute aide que vous pouvez fournir serait utile.

Kyle
la source
Pourriez-vous expliquer un peu plus clairement (plus en détail) ce que vous essayez d'accomplir? Votre code VBA me fait mal à la tête ( row = row - row?), Mais, de la description actuelle de votre prose, cela ressemble à quelque chose que vous devriez pouvoir faire avec des fonctions de feuille de calcul et / ou un formatage conditionnel. Aussi, s'il vous plaît soyez plus explicite sur "Je ne peux pas sembler le faire fonctionner."
Scott
Bien sûr, j'essaie de comparer les valeurs de la colonne A de "AR" et de la colonne A de "Coller ici" et de mettre en évidence les valeurs inexistantes de l'autre. Actuellement, lorsque je le lance, il verrouille simplement Excel et je dois terminer la tâche sur Excel. Ne connaissant pas vraiment VBA, j'essayais simplement de modifier la macro trouvée, donc je suis sûr qu'il existe une manière beaucoup plus élégante de faire ce que je veux.
Kyle

Réponses:

0

C'est dommage que vous n'ayez pas compris le sous-programme que vous cannibalisiez mieux avant de commencer à le modifier.

  • Le sous-programme «WalkThePlank» recherche des correspondances . Lorsqu'il trouve une ligne Sheet1qui correspond à une ligne Sheet2, il passe à l'action. Vous recherchez des valeurs uniques; c'est-à-dire que les lignes Sheet1qui ne correspondent à rien Sheet2, et inversement. Mais ce que vous faites est de déclencher des paires de lignes qui ne correspondent pas; c'est-à-dire que si Sheet1!Row 1cela ne correspond pas Sheet2!Row 1, vous agissez. C'est prématuré. vous devez numériser tout le chemin à travers Sheet2pour déterminer si Sheet1!Row 1correspond une ligne dans Sheet2.
  • L'auteur du sous-programme “WalkThePlank” a fait quelque chose qui n'a pas beaucoup de sens. Après avoir supprimé la ligne indexée par la rowvariable, il a défini la variable sur 0. Cela a été un gaspillage, car le sous-programme a réexaminé toutes les Sheet1lignes déjà examinées et considérées comme uniques. Mais, car il supprime la ligne qui est pas unique (c. -à- qui correspond à la ligne bRowsur Sheet2), il ne regarde que la ligne à nouveau, et il n'y a pas une boucle infinie. Pour aggraver la curiosité, aurait-il pu dire row = 0, mais, au contraire, il dit de manière cryptique row = row - row.

    Mais vous devez changer cela. (Pour être plus précis, je crois que vous devriez juste éliminer les row = …instructions à l' intérieur des Do Whileboucles, à l' exception de la row = row + 1fin.) Cette Puisque vous ne supprimez pas les lignes, ne la cause de votre macro pour réexaminer les mêmes données à plusieurs reprises encore; c'est-à-dire que c'est une boucle infinie. Vous devez simplement continuer à descendre Sheet1.

  • Vous pourrez peut-être abandonner une boucle infinie VBA sans tuer Excel ni perdre vos données en tapant Ctrl+ Break. Si votre clavier n'a pas de Breakclé, essayez de faire apparaître le clavier à l'écran en exécutant osk et en cliquant sur Ctrlpuis sur Pause. Si cela ne fonctionne pas, essayez Ctrlet puis ScrLk.

Le super utilisateur n'est pas un service d'écriture de script. Je pense avoir suffisamment expliqué ce qui ne va pas pour que vous puissiez le réparer maintenant. Si vous ne pouvez toujours pas le faire fonctionner, revenez nous dire où vous êtes resté bloqué.

Scott
la source