Поиск и выделение ячеек которых нет в базе

Автор Noob2, 04 октября 2022, 08:06

Noob2

Добрый день. Помогите пожалуйста. Потихоньку осваиваю VBA.

Условие: Есть база Сварщиков на листе2, вставляю данные в лист 1 и допускаю ошибку.
Задача: Кнопку что бы код сверил с базой и выделил красным значение которого нет в базе.(пустые не трогал)
Даже не знаю с какой стороны подойти что бы написать.


Noob2

репа чешится, но даже из чего собрать код не представляю

Noob2

https://forumvba.ru/index.php?topic=2124.msg12773#msg12773 относится к этой теме, поиск по значению

Noob2

Sub poisk()
With Worksheets(1).Range("J2:J500")
  Set c = .Find("ЧТО ПОСТАВИТЬ ЧТО БЫ ИСКАЛ ЗНАЧЕНИЯ ПО БАЗЕ ИЗ ЛИСТА2 A2;A500, LookIn:=xlValues, LookAt:=xlWhole)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      c.Font.Color = RGB(255, 0, 0)
      Set c = .FindNext(c)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With

End Sub

Администратор

Вы решили свою задачу? Вам помощь больше не нужна?

Noob2


Администратор

А что вы хотели показать кодом из ответа 3?
Вы просто выложили код без каких-либо пояснений.

Noob2

ф предполагал что после .Find можно вставить не точное значение а диапозон. Информации что эта функция может перебирать значение я не нашел(если только в ручную не внести весь столбец).
Перебрав все, я понял что нужно искать массив в массие  и различия подкрасить в листе 1.  пробовал еще пару но без успешно( 

Администратор

Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.

Для Find указывайте все параметры, т.к. Find связан с диалоговым окном "Найти и заменить" и если вы какой-то параметр не укажите, то макрос возьмёт этот параметр из диалогового окна "Найти и заменить". Единственное, не нужно указывать параметр "After".

Макрос
Sub Poisk()

    Dim Лист1 As Worksheet, ЛистСварщики As Worksheet
    Dim i As Long
   
   
    ' Присваиваем имена листам, чтобы через эти имена обращаться к листам.
    Set Лист1 = Worksheets(1)
    Set ЛистСварщики = Worksheets(2)
   
    ' Движение по Листу 1, со строки 2 до 500.
    For i = 2 To 500
        If ЛистСварщики.Range("A2:A500").Find(What:=Лист1.Cells(i, "J").Value, _
                LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
                SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) Is Nothing Then
            Лист1.Cells(i, "J").Interior.Color = RGB(255, 0, 0)
        End If
    Next i

End Sub
[свернуть]

Noob2

Спасибо.  Надо было представить диапазон как цикл.