Спроба виділити унікальні значення на декількох аркушах в Excel 2007


0

Я намагаюся порівняти значення з стовпця А 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

Будь-яка допомога, яку ви можете надати, буде корисною.


Не могли б ви пояснити трохи більш чітко (більш детально), що ви намагаєтеся досягти? Ваш код VBA плаває в моїй голові ( row = row - row?), але, з вашого поточного опису прози, це звучить як те, що ви повинні бути в змозі зробити з робочим листом функції та / або умовного форматування. Також, будь ласка, будьте більш чіткі про "Я не можу змусити його працювати".
Scott

Звичайно, я намагаюся порівняти значення з стовпця А "АР" і стовпця А "Вставити тут" і виділити будь-які значення, які не існують на іншій. В даний час, коли я запускаю його, він просто блокує Excel і я повинен закінчити завдання на Excel. Не дуже знаючи VBA, я просто намагався змінити знайдений макрос, так що я впевнений, що є набагато більш елегантний спосіб робити те, що я хочу.
Kyle

Відповіді:


0

Дуже погано, що ви не розуміли підпрограми що ви краще канібалізували, перш ніж ви почали змінювати його.

  • Підпрограма “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.

  • Ви можете зупинити безконечний цикл VBA не вбиваючи Excel і втрачаючи дані набравши Ctrl + Перерву . Якщо на клавіатурі немає Перерву ключ, спробуйте підняти екранну клавіатуру, запустивши її osk і натисканням Ctrl і потім Пауза . Якщо це не спрацює, спробуйте Ctrl і потім ScrLk .

Супер користувач не є службою написання сценаріїв. Я думаю, що я досить добре пояснив, що відбувається неправильно те, що ви повинні бути в змозі виправити це зараз. Якщо ви все одно не можете змусити його працювати, поверніться і повідомте нам, де ви застрягли.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.