2016-10-12 2 views
-1

Я не следующий набор макетах данных в A4: B27, с строка 4 держа заголовки ..VBA с использованием COUNTIFS ошибки и динамические диапазоны

4. Entity Country 
5. 12 countryb 
6. 13 dave 
7. 14 dan 
8. 15 john 
9. 16 james 
10. 17 josh 
11. 18 george 
12. 19 geni 
13. 20 gina 
14. 10 countrya 
15. 10 countrya 
16. 11 country 
17. 12 countryb 
18. 12 countryb 
19. 13 brian 
20. 14 ryan 
21. 15 louis 
22. 16 tom 
23. 17 chris 
24. 18 mad 
25. 19 barb 
26. 20 james 
27. 10 countrya 

В VBA Я хочу, чтобы обеспечить наличие не дублировать объект -компонентные комбинации. Это легко увидеть на листе с формулой «= COUNTIFS ($ A $ 5: $ A $ 27, A5, $ B $ 5: $ B $ 27, B5)". Если возвращаемое значение больше единицы, я хотел бы выделить ячейки сущности-страны, чтобы показать дубликат. В приведенном выше примере строки 5, 14, 15, 17, 18 и 27 будут выделены.

Однако после попытки создать VBA я застрял ..

Sub test() 

Dim cSheet As Worksheet 
Set cSheet = Sheets("CL.AL1") 

Dim trolSheet As Worksheet 
Set trolSheet = Sheets("Control Sheet") 

Dim currentRow As Integer, lastRow As Integer, currentColumn As Long 
Dim listA As range, listB As range, cellA As String, cellB As String 

cSheet.Select 

currentColumn = 1 
currentRow = 5 
lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row 
Set listA = range(Col_Letter(currentColumn) & currentRow & ":" & Col_Letter(currentColumn + 1) & lastRow) 
Set listB = range(Col_Letter(currentColumn + 1) & currentRow & ":" & Col_Letter(currentColumn + 1) & lastRow) 


Do While range("A" & currentRow) <> "" 

cellA = (cSheet.range(Col_Letter(currentColumn) & currentRow).Value) 
cellB = (cSheet.range(Col_Letter(currentColumn + 1) & currentRow).Value) 

If WorksheetFunction.CountIfs(listA, cellA, listB, cellB) > 1 Then 
     Union(range(Col_Letter(currentColumn) & currentRow), _ 
      range(Col_Letter(currentColumn + 1) & currentRow)).Select 
       With Selection.Interior 
        .Pattern = xlSolid 
        .PatternColorIndex = xlAutomatic 
        .Color = 49407 
        .TintAndShade = 0 
        .PatternTintAndShade = 0 
       End With 
End If 

If currentRow = lastRow Then 
    currentRow = 5 
    currentColumn = currentColumn + 1 
    If currentColumn = 3 Then 
    Exit Do 
    End If 
Else 
currentRow = currentRow + 1 
End If 

Loop 

Debug.Print (range(Col_Letter(currentColumn) & currentRow).Value) 
Debug.Print (range(Col_Letter(currentColumn + 1) & currentRow).Value) 

End Sub 

Function Col_Letter(lngCol As Long) As String 
Dim vArr 
vArr = Split(Cells(1, lngCol).Address(True, False), "$") 
Col_Letter = vArr(0) 
End Function 

После выполнения текущего VBA я получаю выполнение 1004 ошибки «не удалось получить COUNTIFS свойство класса функции рабочего листа».

So. Может ли кто-нибудь помочь исправить эту ошибку ИЛИ предложить альтернативное решение? Спасибо заранее.

+0

Я думаю, вы можете сделать это с помощью формулы и условного форматирования. – Kyle

+0

Условное форматирование будет работать - это намного проще. Но знаете ли вы, почему функция рабочего стола countif работает, а countIFS - нет? –

+0

Я не могу воспроизвести проблему. Вы пробовали полностью квалификационную «Application.WorksheetFunction .......»? – Kyle

ответ

0

Поместите это как формулу условного форматирования на ячейку A4, а затем скопируйте форматирование в остальную часть столбца.

=COUNTIFS($A$4:$B$27,A4)>1