Найти одинаковые значения в диапазоне отфильтрованных Excel - PullRequest
0 голосов
/ 11 октября 2019

У меня проблема с VBA, так как я пытаюсь создать код, который сначала будет фильтровать на основе данных на другой вкладке, а затем в этом отфильтрованном диапазоне он будет просматривать в одном столбце все значения, которые появляются дважды (мне нужновсе эти суммы помечены цветом, а не только дубликатом).

Итак, в общем, давайте скажем, что в Листе 2 у меня есть в столбце Список кодов, которые мне нужно отфильтровать по одному на Листе1 - Столбец,Затем, основываясь на этой фильтрации, мне нужно проверить в столбце B значения, которые появляются дважды, и закрасить эти значения, скажем, зеленым цветом (только на видимых ячейках).

Sub filter()

    Dim wb As Workbook
    Dim ws As Worksheet, ws2 As Worksheet
    Dim xrow As Long, firstrow As Long, lastrow As Long
    Dim SearchValue As Variant

    Set wb = ThisWorkbook
    Set ws = wb.Sheets(1)
    Set ws2 = wb.Sheets(2)

    xrow = 2

    Do
        SearchValue = ws2.Cells(xrow, 1)

            ws.Range("$A$1:$B$14").AutoFilter Field:=1, Criteria1:=SearchValue
                   With ws.AutoFilter.Range
                        firstrow = ws.Range("A" & .Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row).Row
                        lastrow = ws.Range("A" & Rows.Count).End(xlUp).Row

                        'This is where the problem is
                        'how to match and make a color for each amount that appears twice in column B in this filtered range

                   End With

    xrow = xrow + 1
    Loop Until ws2.Cells(xrow, 1) = ""
End Sub

Редактировать: я закончил безфильтрация, это работает для меня в случае, если кто-то задается вопросом:

xrow = 2
Do
    SearchValue = ws2.Cells(xrow, 1)
    lastrow = ws.UsedRange.Rows.Count

        For x = 2 To lastrow
            For y = x + 1 To lastrow
                    If ws.Cells(x, 1) = SearchValue And ws.Cells(y, 1) = SearchValue And ws.Cells(x, 2) = ws.Cells(y, 2) Then
                        ws.Cells(x, 2).Interior.Color = vbGreen
                        ws.Cells(y, 2).Interior.Color = vbGreen
                   Else
                    End If
            Next y
         Next x

    xrow = xrow + 1
Loop Until ws2.Cells(xrow, 1) = ""

В результате макрос будет проверять все коды на одинаковые значения, и я буду иметь те, которые отмечены зеленым цветом. Поэтому, если в столбце Лист1 в столбце А у меня есть 2 точно таких же кода, например, 1111, и они имеют одинаковое значение - 30, тогда эти 30 будут отмечены зеленым цветом в обеих строках, но если код 1111 также имеет значение 25, это не будетотмечено цветом.

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