Как сравнить две ячейки в двух разных столбцах в одной строке при циклическом столбе?

Прямо сейчас у меня код, идущий от L2 и цикл до последней строки в столбце. Если значение ячейки меньше, чем значение ячейки из листа «Предыдущая», то эта ячейка подсвечивается с помощью ColorIndex 40. Отлично работает.

То, что я действительно хочу сделать, – это иметь возможность циклически проходить через второй столбец одновременно (они оба будут в одной строке всегда очевидно). Логически это должно выглядеть так:

Если значение ячейки (начиная с L2) меньше значения ячейки из листа «Previous» И если значение ячейки в AE2 равно «# N / A» (обратите внимание: в этот момент все формулы были удалены поэтому «# N / A» является строкой). Затем выделите ячейку L2 с помощью ColorIndex 40. Любую помощь оценивают.

Sub Comparing() Sheets("Output").Select Dim UsedRng As Range, LastRow As Long Dim x As Long Set UsedRng = ActiveSheet.UsedRange LastRow = UsedRng(UsedRng.Cells.Count).Row Range("L2").Select Do Until ActiveCell.Row = LastRow + 1 If ActiveCell.Value < Range("Previous!L2") Then ActiveCell.Interior.ColorIndex = 40 End If ActiveCell.Offset(1, 0).Select Loop End Sub 

EDIT: Спасибо за ответы. После настройки все получило код для работы следующим образом:

 Sub Comparing() Dim wsOut As Worksheet Dim wsPrev As Worksheet Dim r As Long Dim LastRow As Long Set wsOut = Worksheets("Output") Set wsPrev = Worksheets("Previous") LastRow = wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row For r = 2 To LastRow If wsOut.Cells(r, "L").Value < wsPrev.Cells(2, "L").Value And _ Application.WorksheetFunction.IsNA(wsOut.Cells(r, "AE").Value) Then wsOut.Cells(r, "L").EntireRow.Delete End If Next End Sub 

После рефакторинга вашего кода изменение становится легким (просто небольшое изменение в инструкции If ):

 Sub Comparing() Dim wsOut As Worksheet Dim wsPrev As Worksheet Dim r As Long Dim LastRow As Long Set wsOut = Worksheets("Output") Set wsPrev = Worksheets("Previous") LastRow = wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row For r = 2 To LastRow If wsOut.Cells(r, "L").Value < wsPrev.Cells(r, "L").Value And _ wsOut.Cells(r, "AE").Value = "#N/A" Then wsOut.Cells(r, "L").Interior.ColorIndex = 40 End If Next End Sub 

Если Previous!L2 предназначен для ссылки конкретно на строку 2, а не на обрабатываемую строку, ссылка на r должна быть изменена на 2 в этом месте.

Кроме того, если ячейка в столбце AE содержит значение ошибки #N/A а не строку "#N/A" (вы можете сказать, что пытаетесь сделать =LEN(AE2) в Excel – если она возвращает #N/A тогда AE2 содержит значение ошибки, но если он возвращает 4 то AE2 содержит строковое значение), вы можете проверить это с помощью IsError .

 Sub Comparing() Dim wsOut As Worksheet Dim wsPrev As Worksheet Dim r As Long Dim LastRow As Long Set wsOut = Worksheets("Output") Set wsPrev = Worksheets("Previous") LastRow = wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row For r = 2 To LastRow If wsOut.Cells(r, "L").Value < wsPrev.Cells(2, "L").Value And _ IsError(wsOut.Cells(r, "AE")) Then wsOut.Cells(r, "L").Interior.ColorIndex = 40 End If Next End Sub 

если я правильно понимаю вашу цель, вы можете попробовать это:

 Option Explicit Sub Comparing() Dim cell As Range Dim prevVal As Double prevVal = Worksheets("Previous").Range("L2") With Worksheets("Output1") For Each cell In .Range("AE2:AE" & .Cells(.Rows.count, "L").End(xlUp).row).SpecialCells(xlCellTypeConstants, xlErrors).Offset(, -19) If cell.Value < prevVal Then cell.Interior.ColorIndex = 40 Next cell End With End Sub 
  • Ошибка обхода VBA
  • Как читать данные из нескольких файлов Excel с помощью Informatica
  • Логическое значение неправильно присваивается на основе условий для цикла
  • Проникновение через все листы
  • Проблема с циклом While в Excel VBA
  • Добавьте цикл и перейдите в Excel Macro
  • VBA Как получить следующий адрес ячейки
  • Как перебрать несколько листов excel и добавить имя листа в новый столбец?
  • Условный цикл с текущей суммой пропускает значения
  • Как петля Range.Find в VBA?
  • Еще один способ вместо цикла do-until сделать код более быстрым
  • Interesting Posts

    Возможно ли передавать данные между электронными таблицами в R / Rstudio

    Если файл не открыт, перейдите к следующему

    Получите данные из таблицы Microsoft Access и поместите в книгу Microsoft Excel, поскольку QueryTable – сценарий powershell не удалось выполнить

    Попытка найти ошибку, которую я сделал без доступного документа

    Экспорт php в excel, текстовое редактирование не работает

    Как нажать кнопку «Отправить» с помощью VBA

    excel: использование значений из ячейки для точки в другой ячейке

    Выполнение Sumproduct без использования встроенной функции в Excel VBA

    Добавить имя столбца на несколько листов в EXCEL, используя VBA или любые другие средства

    Бесплатная библиотека рабочей макрокоманды Excel

    разделять текст на столбцы в excel

    Как найти результат с помощью vlookup с переменной в качестве значения поиска в VBA?

    Excel ExcelDNA C # / Попробуйте скопировать поведение Bloomberg BDH () (запись массива после веб-запроса)

    Поиск в конкретных листах

    Предложить формулу, имеющую проблему изменения индекса столбца

    Давайте будем гением компьютера.