Была задача облегчить пользователю нахождение повторяющихся позиций на диапазоне(не все юзеры могли пользоваться =СЧЁТЕСЛИ). Сообразил следующий макрос:
Sub SerchDuplicates()
'Делает заливку повторяющихся значений
Dim i As Range
On Error Resume Next
'вызываем InputBox для явного указания диапазона
Set Userrange = Application.InputBox(Prompt:="Target range", Title:="Duplicates search", Default:=DefaultRange, Type:=8)
'преобразуем выбранный диапазов в выбранный+используемый
Set Userrange = Intersect(Userrange, ActiveSheet.UsedRange)
'снимаем расцветку с целевого диапазона
Userrange.Interior.Pattern = xlNone
For Each i In Userrange
If Application.WorksheetFunction.CountIf(Userrange, i) > 1 Then
i.Interior.Color = 65535
End If
Next i
End Sub
Но потом пришло в голову, что если повторяющихся занчений много, было бы полезно ввести заливку одинаковым цветом только для одинаковых позиций, и тут возникли трудности. Ни при создании коллекции, ни при создании ренджа не работало в цикле следующее:
tcells.add(i) 'для Collection
set trange = union(trange,i) 'для Range
В чём причина?
Sub SerchDuplicates()
'Делает заливку повторяющихся значений
Dim i As Range
On Error Resume Next
'вызываем InputBox для явного указания диапазона
Set Userrange = Application.InputBox(Prompt:="Target range", Title:="Duplicates search", Default:=DefaultRange, Type:=8)
'преобразуем выбранный диапазов в выбранный+используемый
Set Userrange = Intersect(Userrange, ActiveSheet.UsedRange)
'снимаем расцветку с целевого диапазона
Userrange.Interior.Pattern = xlNone
For Each i In Userrange
If Application.WorksheetFunction.CountIf(Userrange, i) > 1 Then
i.Interior.Color = 65535
End If
Next i
End Sub
Но потом пришло в голову, что если повторяющихся занчений много, было бы полезно ввести заливку одинаковым цветом только для одинаковых позиций, и тут возникли трудности. Ни при создании коллекции, ни при создании ренджа не работало в цикле следующее:
tcells.add(i) 'для Collection
set trange = union(trange,i) 'для Range
В чём причина?