
私は、の列 A Sheet1
(「AR」に名前を変更しました) と の列 A Sheet2
(「ここに貼り付け」に名前を変更しました) の値を比較し、他のシートに存在しない値を含む行を強調表示しようとしています。 (両方の列は空のセルで終わります。) ここで、私が望んでいたことと似たようなことをすると思われるマクロを見つけました。複数の Excel シートにわたる重複レコードの効率的な削除、ニーズに合わせて変更しようとしていますが、うまくいきません。現在、実行すると Excel がロックされ、Excel でタスクの終了を実行する必要があります。
これまでのところ、次のものがあります:
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
あなたが提供できるどんな助けでも助かります。
答え1
変更を開始する前に、共有していたサブルーチンをよりよく理解していなかったのは残念です。
- 「WalkThePlank」サブルーチンは、マッチ
Sheet1
の行と一致する の行が見つかった場合Sheet2
、アクションが実行されます。 の行は の行と一致しないもの、つまり の行は の行とSheet1
一致しないものSheet2
、または逆のものが の行です。しかし、やっている一致しない行のペアをトリガーしています。つまり、Sheet1!Row 1
一致しない場合はSheet2!Row 1
アクションを実行します。これは時期尚早です。スキャンする必要があります。はるばる一致するかSheet2
どうかを判断するSheet1!Row 1
どれでもに並びますSheet2
。 「WalkThePlank」サブルーチンの作者は、あまり意味のないことをしました。変数でインデックスされた行を削除した後
row
、変数を0に設定しました。これは無駄でした。サブルーチンがすでに調べて一意であると判断されたすべての行を再調査することになったからですSheet1
。しかし、一意でない行(つまり、行bRow
に一致する行Sheet2
)を削除するので、それもう一度行けば、無限ループは発生しません。さらに興味深いことに、彼は と言うこともできましたrow = 0
が、代わりに謎めいた と言いましたrow = row - row
。しかし、それを変更する必要があります。(より正確に言うと、ループ
row = …
内のステートメントを削除するだけでよいと思います。ただし、最後のDo While
ステートメントは除きます。)行を削除していないので、row = row + 1
するマクロを再検査する同じデータ何度も何度も繰り返します。つまり、これは無限ループです。とにかく進み続ける必要がありますSheet1
。- Ctrl+と入力すると、Excel を終了したりデータを失ったりすることなく、VBA の無限ループを中止できる場合がありますBreak。キーボードに キーがない場合は、 を実行して をクリックし、次に をクリックして、Breakオンスクリーン キーボードを表示してみてください。それでもうまくいかない場合は、と を試してください。
osk
CtrlPauseCtrlScrLk
Super User はスクリプト作成サービスではありません。何が問題なのかは十分に説明したので、これで解決できるはずです。それでも問題が解決しない場合は、戻ってきて、どこでつまずいたのか教えてください。