Excel 2007 で複数のシートにわたって一意の値を強調表示しようとする

Excel 2007 で複数のシートにわたって一意の値を強調表示しようとする

私は、の列 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オンスクリーン キーボードを表示してみてください。それでもうまくいかない場合は、と を試してください。oskCtrlPauseCtrlScrLk

Super User はスクリプト作成サービスではありません。何が問題なのかは十分に説明したので、これで解決できるはずです。それでも問題が解決しない場合は、戻ってきて、どこでつまずいたのか教えてください。

関連情報