2012-05-24 1 views
0

У меня вопрос о макросе в Excel VBA. Я хочу, чтобы получить количество цветных ячеек в Excel, так что я написал ниже код:VBA - нужно сообщить формат ячейки только видимых ячеек после фильтрации

Application.ScreenUpdating = False 
x = Range("D2:Y46").Select 

For Each d In Selection 
    d.Select 
    If Selection.Interior.Color = 15773696 Then 
     Count = Count + 1 
    End If 
Next 

Application.ScreenUpdating = True 
Range("C53").Select 
Selection = Count 

Он работает нормально, но есть некоторые строки скрыты из-за заголовок фильтра.

Когда я использую код выше, он также отображает вывод скрытых ячеек, но я не хочу, чтобы результат включал скрытые ячейки. Мне нужны только результаты для видимых ячеек после фильтра в заголовке.

Есть ли способ сделать это?

+4

См. Эту ссылку http://support.microsoft.com/kb/150363. В качестве альтернативы вы также можете использовать «Range (« D2: Y46 »). SpecialCells (xlCellTypeVisible)';) –

ответ

1

Я изменил ваш код, чтобы сделать то, что вы просили, но также и повысить эффективность; вам обычно не нужна Select ячейка, прежде чем что-то делать с ней.

Option Explicit 

Sub CountCellsByColor() 

Dim d As Range, x As Range 
Dim Count As Integer 
Application.ScreenUpdating = False 

Set x = Range("D2:Y46") 

For Each d In x 
    If d.Interior.Color = 15773696 And Not d.Rows.Hidden And Not d.Columns.Hidden Then 
     Count = Count + 1 
    End If 
Next 

Application.ScreenUpdating = True 
Range("C53").Value = Count 


End Sub 

Not d.Rows.Hidden проверка будет возвращать True, если строка не отфильтровываются (скрытый).

+1

+1 может также проверять наличие скрытых столбцов, на всякий случай ... Если d.Interior.Color = 15773696 И не d.Columns.Hidden И не d.Rows.Hidden – datatoo

+0

@ datatoo Действительная точка ... исправление моего ответа. – Gaffi

+1

Я мог бы упомянуть, что я протестировал то, что предоставил @Gaffi, и сначала установил интервал .color для диапазона до 15773696 программно, но на самом деле это визуализируется как 16763904. Так что, если вы проверите для interior.color на другой машине, код может не обнаруживать жесткий код правильно. – datatoo