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

Вход

Регистрация

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

 

= Мир MS Excel/Подсчет ячеек определенного цвета с определенным словом - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Подсчет ячеек определенного цвета с определенным словом
Cliffe Дата: Понедельник, 10.08.2015, 05:17 | Сообщение № 1
Группа: Заблокированные
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 60% ±

Excel 2010
Доброй ночи. Прошу помощи.
Имеются 2 модуля в EXCEL'евском файле, которые подсчитывают количество ячеек определенного цвета. Брал со стороннего сайта полгода назад.
Раз.

[vba]
Код
Function КолЦвет(диапазон As Range, критерий As Range) As Single
Application.Volatile True
Dim i As Range
For Each i In диапазон
If i.Interior.Color = критерий.Interior.Color Then
КолЦвет = КолЦвет + 1
End If
Next
End Function
[/vba]
и два.
[vba]
Код
Function СумЦвет(диапазон As Range, критерий As Range) As Double
Application.Volatile True
Dim i As Range
For Each i In диапазон
If i.Interior.Color = критерий.Interior.Color Then
СумЦвет = СумЦвет + i.Value
End If
Next
End Function
[/vba]
Прописывая в ячейке =КолЦвет(G1:G551;G1) получаю подсчет нужного цвета в необходимом диапазоне.
А теперь нужно подсчитать количество этого же цвета, но уже с определенным словом (в этом же диапазоне).
Знаю, что можно использовать для подсчёта определенного слова в определенном диапазоне =СЧЁТЕСЛИ(G1:G551;"мираж"). А вот как объединить эти 2 условия: цвет и символ (слово)?
Рыскал по форумам, но ничего путного не нашёл.
[moder]Коды нужно оформлять тегом #.
Спойлер НЕ заменяет этот тег, поправила.[/moder]


Сообщение отредактировал Manyasha - Понедельник, 10.08.2015, 11:46
 
Ответить
СообщениеДоброй ночи. Прошу помощи.
Имеются 2 модуля в EXCEL'евском файле, которые подсчитывают количество ячеек определенного цвета. Брал со стороннего сайта полгода назад.
Раз.

[vba]
Код
Function КолЦвет(диапазон As Range, критерий As Range) As Single
Application.Volatile True
Dim i As Range
For Each i In диапазон
If i.Interior.Color = критерий.Interior.Color Then
КолЦвет = КолЦвет + 1
End If
Next
End Function
[/vba]
и два.
[vba]
Код
Function СумЦвет(диапазон As Range, критерий As Range) As Double
Application.Volatile True
Dim i As Range
For Each i In диапазон
If i.Interior.Color = критерий.Interior.Color Then
СумЦвет = СумЦвет + i.Value
End If
Next
End Function
[/vba]
Прописывая в ячейке =КолЦвет(G1:G551;G1) получаю подсчет нужного цвета в необходимом диапазоне.
А теперь нужно подсчитать количество этого же цвета, но уже с определенным словом (в этом же диапазоне).
Знаю, что можно использовать для подсчёта определенного слова в определенном диапазоне =СЧЁТЕСЛИ(G1:G551;"мираж"). А вот как объединить эти 2 условия: цвет и символ (слово)?
Рыскал по форумам, но ничего путного не нашёл.
[moder]Коды нужно оформлять тегом #.
Спойлер НЕ заменяет этот тег, поправила.[/moder]

Автор - Cliffe
Дата добавления - 10.08.2015 в 05:17
miver Дата: Понедельник, 10.08.2015, 08:40 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Если нужно проверить только одно условие, которое поместить в ту же ячейку что и цвет
[vba]
Код
Function СумЦветЕСЛИ(диапазон As Range, критерий As Range) As Double
     Application.Volatile True
     Dim i As Range
     For Each i In диапазон
         If i.Interior.Color = критерий.Interior.Color And i.Value = критерий.Value Then
             СумЦветЕСЛИ = СумЦветЕСЛИ + i.Value
         End If
     Next
End Function
[/vba]
 
Ответить
СообщениеЕсли нужно проверить только одно условие, которое поместить в ту же ячейку что и цвет
[vba]
Код
Function СумЦветЕСЛИ(диапазон As Range, критерий As Range) As Double
     Application.Volatile True
     Dim i As Range
     For Each i In диапазон
         If i.Interior.Color = критерий.Interior.Color And i.Value = критерий.Value Then
             СумЦветЕСЛИ = СумЦветЕСЛИ + i.Value
         End If
     Next
End Function
[/vba]

Автор - miver
Дата добавления - 10.08.2015 в 08:40
Cliffe Дата: Понедельник, 10.08.2015, 20:30 | Сообщение № 3
Группа: Заблокированные
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 60% ±

Excel 2010
Manyasha, это тот, что "код VBA" на панельке, верно?
miver, хорошо, если изменю модуль, то в ячейке то что прописывать?
=СумЦветЕСЛИ(G1:G551;G1;G1:G551;"мираж") или =СумЦветЕСЛИ(G1:G551;G1;"мираж")? Или вообще что-то другое?
[moder]
Цитата
верно?
да.
А для формул кнопка fx.[/moder]
 
Ответить
СообщениеManyasha, это тот, что "код VBA" на панельке, верно?
miver, хорошо, если изменю модуль, то в ячейке то что прописывать?
=СумЦветЕСЛИ(G1:G551;G1;G1:G551;"мираж") или =СумЦветЕСЛИ(G1:G551;G1;"мираж")? Или вообще что-то другое?
[moder]
Цитата
верно?
да.
А для формул кнопка fx.[/moder]

Автор - Cliffe
Дата добавления - 10.08.2015 в 20:30
Hugo Дата: Понедельник, 10.08.2015, 22:56 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3854
Репутация: 814 ±
Замечаний: 0% ±

365
если изменю модуль
- не модуль, а код функции (то, что он в модуле - это вторично)
В ячейке критерия в этом варианте функции нужно прописать критерий (вот так вот :)), т.е. цвет и слово. А в той, где применяете функцию, ничего менять не нужно.
Если хотите слово писать как отдельный параметр функции - можно и так сделать.

Рыскал по форумам, но ничего путного не нашёл.
- думаю продуктивнее было бы не рыскать, а вникнуть в код и изменить его под изменившуюся задачу.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение
если изменю модуль
- не модуль, а код функции (то, что он в модуле - это вторично)
В ячейке критерия в этом варианте функции нужно прописать критерий (вот так вот :)), т.е. цвет и слово. А в той, где применяете функцию, ничего менять не нужно.
Если хотите слово писать как отдельный параметр функции - можно и так сделать.

Рыскал по форумам, но ничего путного не нашёл.
- думаю продуктивнее было бы не рыскать, а вникнуть в код и изменить его под изменившуюся задачу.

Автор - Hugo
Дата добавления - 10.08.2015 в 22:56
Cliffe Дата: Вторник, 11.08.2015, 00:51 | Сообщение № 5
Группа: Заблокированные
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 60% ±

Excel 2010
Hugo, ничего не понял, что написали. Вообще. :(
Код функции, ячейка критерия, вариант функции.. %)


вникнуть в код

Не все сильны в программировании. То, что я понимаю, постарался изложить в шапке темы, на большее не хватило.
К сообщению приложен файл: 2102946.xlsx (9.4 Kb)
 
Ответить
СообщениеHugo, ничего не понял, что написали. Вообще. :(
Код функции, ячейка критерия, вариант функции.. %)


вникнуть в код

Не все сильны в программировании. То, что я понимаю, постарался изложить в шапке темы, на большее не хватило.

Автор - Cliffe
Дата добавления - 11.08.2015 в 00:51
miver Дата: Вторник, 11.08.2015, 08:27 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Cliffe, Подправил код. И прикрепил пример
К сообщению приложен файл: 4939572.xlsm (14.4 Kb)
 
Ответить
СообщениеCliffe, Подправил код. И прикрепил пример

Автор - miver
Дата добавления - 11.08.2015 в 08:27
Cliffe Дата: Вторник, 11.08.2015, 18:39 | Сообщение № 7
Группа: Заблокированные
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 60% ±

Excel 2010
miver, огромное спасибо. То, что доктор прописал! :D
Один момент. Правильно понял, что Ваш модуль (подкорректированный) отвечает за цвет+критерий (слово) и если этот модуль удалить, то я всё равно смогу подсчитывать количество ячеек нужного цвета в диапазоне благодаря модулю с:
[vba]
Код
Function КолЦвет(диапазон As Range, критерий As Range) As Single
Application.Volatile True
Dim i As Range
For Each i In диапазон
If i.Interior.Color = критерий.Interior.Color Then
КолЦвет = КолЦвет + 1
End If
Next
End Function
[/vba]?
 
Ответить
Сообщениеmiver, огромное спасибо. То, что доктор прописал! :D
Один момент. Правильно понял, что Ваш модуль (подкорректированный) отвечает за цвет+критерий (слово) и если этот модуль удалить, то я всё равно смогу подсчитывать количество ячеек нужного цвета в диапазоне благодаря модулю с:
[vba]
Код
Function КолЦвет(диапазон As Range, критерий As Range) As Single
Application.Volatile True
Dim i As Range
For Each i In диапазон
If i.Interior.Color = критерий.Interior.Color Then
КолЦвет = КолЦвет + 1
End If
Next
End Function
[/vba]?

Автор - Cliffe
Дата добавления - 11.08.2015 в 18:39
miver Дата: Среда, 12.08.2015, 08:53 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Cliffe, У меня прописана функция СумЦветЕСЛИ. Если удалите ее код, то она работать не будет. И она никак не влияет на функцию КолЦвет
Кстати, у меня Ваш КолЦвет не работает. Я бы прописал так
[vba]
Код
Function КолЦвет(диапазон As Range, критерий As Range) As Single
     Application.Volatile True
     Dim i As Range, sum As Long
     For Each i In диапазон
         If i.Interior.Color = критерий.Interior.Color Then
             sum = sum + 1
         End If
     Next
     КолЦвет = sum
End Function
[/vba]


Сообщение отредактировал miver - Среда, 12.08.2015, 08:59
 
Ответить
СообщениеCliffe, У меня прописана функция СумЦветЕСЛИ. Если удалите ее код, то она работать не будет. И она никак не влияет на функцию КолЦвет
Кстати, у меня Ваш КолЦвет не работает. Я бы прописал так
[vba]
Код
Function КолЦвет(диапазон As Range, критерий As Range) As Single
     Application.Volatile True
     Dim i As Range, sum As Long
     For Each i In диапазон
         If i.Interior.Color = критерий.Interior.Color Then
             sum = sum + 1
         End If
     Next
     КолЦвет = sum
End Function
[/vba]

Автор - miver
Дата добавления - 12.08.2015 в 08:53
Cliffe Дата: Среда, 12.08.2015, 19:54 | Сообщение № 9
Группа: Заблокированные
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 60% ±

Excel 2010
Кстати, у меня Ваш КолЦвет не работает. Я бы прописал так

У меня до сих пор работает, но перенести в новую ячейку
Код
=КолЦвет(G1:G551;G1)
не удается. Excel видит как простой текст. Странно. Думал, что это баг 10-го офиса, хотя мб это и из-за модуля..
Но понял главное, что каждый модуль отвечает за свою функцию (=КолЦвет, =СумЦветЕСЛИ и т.д., и т.п.).
Огромное спасибо ещё раз!
 
Ответить
Сообщение
Кстати, у меня Ваш КолЦвет не работает. Я бы прописал так

У меня до сих пор работает, но перенести в новую ячейку
Код
=КолЦвет(G1:G551;G1)
не удается. Excel видит как простой текст. Странно. Думал, что это баг 10-го офиса, хотя мб это и из-за модуля..
Но понял главное, что каждый модуль отвечает за свою функцию (=КолЦвет, =СумЦветЕСЛИ и т.д., и т.п.).
Огромное спасибо ещё раз!

Автор - Cliffe
Дата добавления - 12.08.2015 в 19:54
AndreTM Дата: Среда, 12.08.2015, 21:30 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Но понял главное, что каждый модуль отвечает за свою функцию

Это не так. Функций/процедур в каждом модуле может быть (и бывает обычно) несколько. В терминах ООП, они становятся частью интерфейса/реализации модуля. И вы можете вызывать процедуры из любых модулей, использовав в качестве префикса ИмяМодуля.
Другое дело, что есть различные типы модулей-контейнеров (модули каждого листа, всей книги, общие модули кода, модули классов и пользовательских форм), имеющие каждый свои возможности и ограничения.
Как правило, пользовательские функции, которые должны быть доступны во всей книге - располагаются в обычных общих модулях. И необязательно разбивать их по отдельным модулям, если это не обусловлено именно вашими требованиями к структуре проекта.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
Но понял главное, что каждый модуль отвечает за свою функцию

Это не так. Функций/процедур в каждом модуле может быть (и бывает обычно) несколько. В терминах ООП, они становятся частью интерфейса/реализации модуля. И вы можете вызывать процедуры из любых модулей, использовав в качестве префикса ИмяМодуля.
Другое дело, что есть различные типы модулей-контейнеров (модули каждого листа, всей книги, общие модули кода, модули классов и пользовательских форм), имеющие каждый свои возможности и ограничения.
Как правило, пользовательские функции, которые должны быть доступны во всей книге - располагаются в обычных общих модулях. И необязательно разбивать их по отдельным модулям, если это не обусловлено именно вашими требованиями к структуре проекта.

Автор - AndreTM
Дата добавления - 12.08.2015 в 21:30
Serge_007 Дата: Среда, 12.08.2015, 21:39 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Как правило, пользовательские функции, которые должны быть доступны во всей книге - располагаются в обычных общих модулях
А что - есть исключения?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Как правило, пользовательские функции, которые должны быть доступны во всей книге - располагаются в обычных общих модулях
А что - есть исключения?

Автор - Serge_007
Дата добавления - 12.08.2015 в 21:39
Cliffe Дата: Четверг, 13.08.2015, 00:16 | Сообщение № 12
Группа: Заблокированные
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 60% ±

Excel 2010
Это не так.

Я про свой пример говорил. :)
Так то ясно, что весь код можно и в один модуль запихнуть.
 
Ответить
Сообщение
Это не так.

Я про свой пример говорил. :)
Так то ясно, что весь код можно и в один модуль запихнуть.

Автор - Cliffe
Дата добавления - 13.08.2015 в 00:16
  • Страница 1 из 1
  • 1
Поиск:

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