Поиск по 3 столбцам в диапазоне строк во вложенном цикле

#excel #vba #excel-formula

#excel #vba #excel-формула

Вопрос:

Привет, у меня есть несколько листов, и я должен выполнить поиск и выделить каждую строку на каждом листе, используя эти критерии

 In my sheet I grouped data in 2 sections (same sheet)
**Prod data**                                                   **TEST Data**
col A   B  C  D  E  F                                     col G H I J K L         MATCH RESULT COL
ROWS 1 - 100                                              ROWS 1 - 170
  

Мне нужно выполнить поиск выходных данных для каждой строки на наличие столбцов A C F в тестовых данных для столбцов G I L во всех 170 строках, если все совпадают (A = G, B = I, F = L), то либо выделить зеленым, если не красным. Или в последней пустой ячейке выведите что-нибудь «совпадающее» с зеленой подсветкой.

Решениями могут быть макрос или формула. Мне приходится использовать его на многих листах с разными выборками столбцов.

Комментарии:

1. Итак, в чем именно заключается ваш вопрос? Пока вы только представили свою задачу. Я надеюсь, вы не ожидаете, что кто-то здесь выполнит вашу работу.

Ответ №1:

Я сделал это и получил свой ответ здесь

По моему требованию, левая сторона — это производственные записи, а правая сторона — записи тестового сервера. Нам нужно сравнить визуально, поэтому я извлек обе таблицы с обоих серверов и вставил в лист Excel, и этот макрос сделал все это. Вам просто нужно изменить правильные номера столбцов для листа. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь и присылайте свои вопросы.

введите описание изображения здесь

 Sub FND1()
Dim t As Integer
Dim p As Integer
Dim icolor As Integer
Dim tval1 As Variant
Dim tval2 As Variant
Dim tval3 As Variant
Dim bFoundinProd As Boolean

NumRowsProd = 8  'Range("A1", Range("A1").End(xlDown)).Rows.Count
NumRowsTest = 10 'Range("F1", Range("F1").End(xlDown)).Rows.Count

      Application.ScreenUpdating = False
      ' Set numrows = number of rows of data.
      
      ' Establish "For" loop to loop "numrows" number of times.
    With Worksheets(1)
      For t = 1 To NumRowsTest
        tval1 = .Cells(t, 6).Value
        tval2 = .Cells(t, 7).Value
        tval3 = .Cells(t, 8).Value
        
       For p = 1 To NumRowsProd
          bFoundinProd = False
          If tval1 = .Cells(p, 1).Value And _
                tval2 = .Cells(p, 2).Value And _
                tval3 = .Cells(p, 3).Value Then
                bFoundinProd = True
                .Cells(p, 1).Interior.ColorIndex = 4  '3 red 4 green  5 blue
                .Cells(p, 2).Interior.ColorIndex = 4
                .Cells(p, 3).Interior.ColorIndex = 4
                Exit For
          End If
        Next p

         If bFoundinProd Then
            .Cells(t, 10).Value = "Found in Production. row = " amp; CStr(p)
            icolor = 4  ' green
         Else
            icolor = 3 ' red
            .Cells(t, 10).Value = "Not Found in Production"
         End If
         
        .Cells(t, 6).Interior.ColorIndex = icolor  '3 red 4 green  5 blue
        .Cells(t, 7).Interior.ColorIndex = icolor
        .Cells(t, 8).Interior.ColorIndex = icolor
        .Cells(t, 9).Interior.ColorIndex = icolor
        .Cells(t, 10).Interior.ColorIndex = icolor
         
      Next t
    End With
    Worksheets("Sheet1").Range("J1").Columns.AutoFit
        
      Application.ScreenUpdating = True
End Sub