проверить, что для каждого значения ячейки в одном столбце существует только одна уникальная комбинация ячеек в строке - PullRequest
0 голосов
/ 03 мая 2018

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

В любом случае, у меня есть лист Excel, в котором отслеживаются розничные цены (столбец C) для товаров (столбец A) в определенном идентификаторе области (столбец B) и, по сути, то, что нам пришлось фильтровать по каждому идентификатору области (столбец B). ) и убедитесь, что для каждого идентификатора существует только одна уникальная комбинация идентификатора (B) и розничной цены (C).

Так, например, в данных ниже я посмотрю на столбец B, 200 и обнаружу, что в нем есть две уникальные комбинации B & C (200 / 2.19 и 200 / 2.29), которые будут помечены как ошибка, например 204 является правильным, поскольку в результате он имеет 204 / 2,19 и 204 / 2,19).

A 200 2,19

B 200 2,29

C 202 2,19

D 203 2,19

E 204 2,19

G 204 2,19

У меня вопрос, как настроить фильтр для отображения только тех идентификаторов областей, в которых есть ошибки (поэтому в этом примере отображаются только строки A и B.

1 Ответ

0 голосов
/ 04 мая 2018

Если бы вы делали это по формуле, вы могли бы добавить столбец, содержащий

=COUNTIFS(B$2:B$10,B2,C$2:C$10,"<>"&C2)

и проверить, что это ненулевое значение.

В VBA вы можете сделать то же самое и поместить идентификаторы области в массив, в котором имеется более одного значения цены

Sub Filter()
Dim arr As Variant
Dim LastRow As Long
With Sheet1
    Cells.AutoFilter
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    ReDim arr(LastRow)
    For i = 1 To LastRow
        If Application.WorksheetFunction.CountIfs(Range("b1:b" & LastRow), Cells(i, 2), Range("c1:c" & LastRow), "<>" & Cells(i, 3)) Then
            arr(i) = CStr(Cells(i, 2))
        End If
    Next i
    Range("A1").AutoFilter _
        Field:=2, _
        Criteria1:=arr, _
        Operator:=xlFilterValues
End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...