Нужно пройтись по столбцу в Excel и выделить заполнить каждую ячейку, если содержимое соответствует содержимому другого столбца - PullRequest
0 голосов
/ 18 июня 2019

Моя проблема сейчас связана с моими правилами условного форматирования - они работают, как и ожидалось, до определенной точки в столбце W, где ячейки должны быть либо выделены, либо пропущены.Я включил набор данных из столбца W и столбца Z (справочные данные), где есть совпадения, которые не выделяются.В данных столбца W я выделил цифры, которые должны быть выделены.

Столбец Z - Z506-Z550

  • 233892
  • 233899
  • 959460
  • 156311
  • 515114
  • 549794
  • 562793
  • 372953
  • 230659
  • 230717
  • 2051205586
  • 364834
  • 790760
  • 334588
  • 538149
  • 288261
  • 19326
  • 267428
  • Нетто 90
  • 473853
  • 3211221994
  • 264556
  • 260798
  • 156271
  • 509597
  • 2211211506
  • 800990
  • 597593
  • 431759
  • 377289
  • 224118
  • 178966
  • 276840
  • 430269
  • 431923
  • 431986
  • 547439
  • 512399
  • 234975
  • 512203
  • 602547
  • 443537
  • 376759
  • 284287
  • 608745

Столбец W - W1144-W1155

  • 233892
  • 367164
  • 368384
  • 344813
  • 233899
  • 233899
  • 233895
  • -
  • 233917
  • 284287
  • 376759
  • 443537

Формула условного форматирования у меня есть = VLOOKUP ($W4, $ Z4: $ Z922,1, FALSE) «Применяется к» = $ W $ 4: $ W $ 3600

Я не уверен, что вызывает сбой этого условного форматирования.

Проигнорируйте ниже - теперь работаю с условным форматированием вместо vba

Я пытаюсь автоматизировать ручной процесс перекрестных ссылок на данные и выделения ячейки, если содержимое найдено где-либо в другом столбце данных.Однако объем данных в обоих этих столбцах не одинаков.И, к сожалению, столбец, который мне нужно перебрать и проверить, что в каждой ячейке часто есть либо пустые ячейки, либо пунктирные ячейки («---»).

Я начал с условного форматирования, но он не работал должным образом, поэтомуЯ сейчас на VBA.

Private Sub Workbook_Open()

Dim LastRow As Long
Range("W4").Select
LastRow = Range("W4").End(xlDown).Row
Do Until ActiveCell.Row = LastRow
   If Not IsEmpty(Application.Match(ActiveCell.Value, Range("Z:Z"), 0)) 
Then
   ActiveCell.Interior.Color = vbGreen
   ActiveCell.Offset(1, 0).Select
   End If
Loop


End Sub

Сейчас у кода есть пара проблем.Он не находит последнюю строку правильно - при отладке он показывает как 65, но должен быть 3535 в тестовом примере, который я использую.Кроме того, мой оператор сопоставления не работает, поскольку он подсвечивает каждую ячейку, а не только те, чье содержимое находится в столбце Z. И он подсвечивает до строки 410, что означает, что мой цикл «До» также должен быть неправильным.

После определения одного столбца мне нужно разрешить проверку столбцов AA и AB на совпадения содержимого.

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Как уже упоминалось в комментарии, условное форматирование - это путь.Я просто попробовал следующее в качестве условного формата:

=VLOOKUP($A2,$C$2:$C$7,1,FALSE)

Столбец чисел в A как числа для перекрестных ссылок и список в столбце C, которые являются числами, которые нужно проверить.Работает отлично.

0 голосов
/ 18 июня 2019

Рекомендую использовать условное форматирование.Ниже просто объясняется, что не так с вашим кодом:

  1. Всегда определяйте, какой лист вы имеете в виду, и избегайте использования Select в Excel VBA .
  2. Использование End(xlDown) найдет следующую свободную ячейку (не последнюю использованную).Вместо этого используйте End(xlUp) из самой последней ячейки рабочего листа.
  3. Application.Match возвращает не ячейку, а номер строки.Следовательно, IsEmpty не работает.

В конце концов, что-то вроде этого должно работать:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("SheetName")

Dim LastRow As Long
LastRow = ws.Cells(ws.Rows.Count, "W").End(xlUp).Row

Dim MatchRow As Variant

Dim iRow As Long
For iRow = 4 To LastRow
    MatchRow = 0 'initialize
    MatchRow = Application.Match(ws.Cells(iRow, "W").Value, ws.Range("Z:Z"), 0)
    If MatchRow > 0 Then
        ws.Cells(iRow, "W").Interior.Color = vbGreen
    End If
Next iRow

Обратите внимание, что условное форматирование было бы гораздо лучшим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...