Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Пользовательская функция подсчета ячеек по цвету и merge - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Пользовательская функция подсчета ячеек по цвету и merge (Функции Function)
Пользовательская функция подсчета ячеек по цвету и merge
SkyPro Дата: Воскресенье, 23.06.2013, 11:47 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Добрый день.
Есть функция [vba]
Код
Function КЦ(диапазон As Range, цвет As Range) As Single
     Dim c As Range
     For Each c In диапазон
     If c.Interior.ColorIndex = цвет.Interior.ColorIndex Then
     КЦ = КЦ + 1
     End If
     Next
     End Function
     
[/vba]
Которая подсчитывает количество ячеек закрашенных определнным цветом.
Но проблема в том, что 10 обьедененных ячеек закрашенных определенным цветом она считает как 10.
Как её заставить считать обьедененные ячейки как одну?

Заранее спасибо.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Воскресенье, 23.06.2013, 12:21
 
Ответить
СообщениеДобрый день.
Есть функция [vba]
Код
Function КЦ(диапазон As Range, цвет As Range) As Single
     Dim c As Range
     For Each c In диапазон
     If c.Interior.ColorIndex = цвет.Interior.ColorIndex Then
     КЦ = КЦ + 1
     End If
     Next
     End Function
     
[/vba]
Которая подсчитывает количество ячеек закрашенных определнным цветом.
Но проблема в том, что 10 обьедененных ячеек закрашенных определенным цветом она считает как 10.
Как её заставить считать обьедененные ячейки как одну?

Заранее спасибо.

Автор - SkyPro
Дата добавления - 23.06.2013 в 11:47
Скрипт Дата: Воскресенье, 23.06.2013, 17:28 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 61
Репутация: 25 ±
Замечаний: 0% ±

Excel 2013


Сообщение отредактировал Скрипт - Воскресенье, 23.06.2013, 17:33
 
Ответить
Сообщение

Автор - Скрипт
Дата добавления - 23.06.2013 в 17:28
SkyPro Дата: Воскресенье, 23.06.2013, 18:08 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Как-то он не правильно считает..

ПРи первом подсчете правильно - при пересчете не корректно.
К сообщению приложен файл: primer.xlsm (15.0 Kb)


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Воскресенье, 23.06.2013, 18:38
 
Ответить
СообщениеКак-то он не правильно считает..

ПРи первом подсчете правильно - при пересчете не корректно.

Автор - SkyPro
Дата добавления - 23.06.2013 в 18:08
Скрипт Дата: Воскресенье, 23.06.2013, 19:21 | Сообщение № 4
Группа: Проверенные
Ранг: Участник
Сообщений: 61
Репутация: 25 ±
Замечаний: 0% ±

Excel 2013
SkyPro, да, макрос неправильно работал. Новый макрос:



Сообщение отредактировал Скрипт - Воскресенье, 23.06.2013, 19:52
 
Ответить
СообщениеSkyPro, да, макрос неправильно работал. Новый макрос:


Автор - Скрипт
Дата добавления - 23.06.2013 в 19:21
SkyPro Дата: Воскресенье, 23.06.2013, 20:50 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Допилил используя временный словарь:
[vba]
Код


Function КЦВ(диапазон As Range, цвет As Range)   
Application.Volatile True
Dim ячейки As Range
With CreateObject("Scripting.Dictionary")   
For Each ячейки In диапазон
If ячейки.MergeCells And ячейки.Interior.ColorIndex = цвет.Interior.ColorIndex Or ячейки.Interior.ColorIndex = цвет.Interior.ColorIndex Then
.Item(ячейки.MergeArea.Address) = ""   
End If
Next
КЦВ = .Count
End With
End Function
[/vba]

Взял код Alex ST

Теперь считает обьедененные области + ячейки окрашенные определенным цветом.

ЗЫ:
Увидел ваше решение уже после того, как запостил свое smile
Спасибо за помощь.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Воскресенье, 23.06.2013, 20:51
 
Ответить
СообщениеДопилил используя временный словарь:
[vba]
Код


Function КЦВ(диапазон As Range, цвет As Range)   
Application.Volatile True
Dim ячейки As Range
With CreateObject("Scripting.Dictionary")   
For Each ячейки In диапазон
If ячейки.MergeCells And ячейки.Interior.ColorIndex = цвет.Interior.ColorIndex Or ячейки.Interior.ColorIndex = цвет.Interior.ColorIndex Then
.Item(ячейки.MergeArea.Address) = ""   
End If
Next
КЦВ = .Count
End With
End Function
[/vba]

Взял код Alex ST

Теперь считает обьедененные области + ячейки окрашенные определенным цветом.

ЗЫ:
Увидел ваше решение уже после того, как запостил свое smile
Спасибо за помощь.

Автор - SkyPro
Дата добавления - 23.06.2013 в 20:50
Peschanov Дата: Пятница, 10.01.2014, 11:30 | Сообщение № 6
Группа: Гости
Простите, а что еще нужно дописать в макрос чтобы формула не считала цветные ячейки в скрытых ячейках при фильтрации? Заранее спасибо
 
Ответить
СообщениеПростите, а что еще нужно дописать в макрос чтобы формула не считала цветные ячейки в скрытых ячейках при фильтрации? Заранее спасибо

Автор - Peschanov
Дата добавления - 10.01.2014 в 11:30
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Пользовательская функция подсчета ячеек по цвету и merge (Функции Function)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!