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.
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."Réponses:
C'est dommage que vous n'ayez pas compris le sous-programme que vous cannibalisiez mieux avant de commencer à le modifier.
Sheet1
qui correspond à une ligneSheet2
, il passe à l'action. Vous recherchez des valeurs uniques; c'est-à-dire que les lignesSheet1
qui ne correspondent à rienSheet2
, et inversement. Mais ce que vous faites est de déclencher des paires de lignes qui ne correspondent pas; c'est-à-dire que siSheet1!Row 1
cela ne correspond pasSheet2!Row 1
, vous agissez. C'est prématuré. vous devez numériser tout le chemin à traversSheet2
pour déterminer siSheet1!Row 1
correspond une ligne dansSheet2
.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
row
variable, il a défini la variable sur 0. Cela a été un gaspillage, car le sous-programme a réexaminé toutes lesSheet1
lignes déjà examinées et considérées comme uniques. Mais, car il supprime la ligne qui est pas unique (c. -à- qui correspond à la lignebRow
surSheet2
), il ne regarde que la ligne à nouveau, et il n'y a pas une boucle infinie. Pour aggraver la curiosité, aurait-il pu direrow = 0
, mais, au contraire, il dit de manière cryptiquerow = 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 desDo While
boucles, à l' exception de larow = row + 1
fin.) 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 à descendreSheet1
.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é.
la source