Я не следующий набор макетах данных в 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. Может ли кто-нибудь помочь исправить эту ошибку ИЛИ предложить альтернативное решение? Спасибо заранее.
Я думаю, вы можете сделать это с помощью формулы и условного форматирования. – Kyle
Условное форматирование будет работать - это намного проще. Но знаете ли вы, почему функция рабочего стола countif работает, а countIFS - нет? –
Я не могу воспроизвести проблему. Вы пробовали полностью квалификационную «Application.WorksheetFunction .......»? – Kyle