|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.11.2013, 17:27 | #1 |
Регистрация: 16.08.2013
Сообщений: 8
|
Пользовательская функция с необязательными параметрами
Пожалуйста, подскажите, что не так в коде. Пытаюсь сделать два параметра необязательными, но функция работает только, если выбираю три критерия...
Function СумЦвет(диапазон As Range, критерий1 As Range, Optional критерий2 As Range = "", _ Optional критерий3 As Range = "") As Double ' Суммирует значения ячеек в "диапазоне", ' цвет которых совпадает с цветом в ячейке одного из "критериев" Application.Volatile True Dim i As Range For Each i In диапазон If i.Interior.Color = критерий1.Interior.Color Or _ i.Interior.Color = критерий2.Interior.Color Or _ i.Interior.Color = критерий3.Interior.Color Then СумЦвет = СумЦвет + i End If Next End Function |
07.11.2013, 17:29 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
если есть критерий2 то
если есть критерий3 то
webmoney: E265281470651 Z422237915069 R418926282008
|
07.11.2013, 17:48 | #3 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Универсальный вариант функции (количество параметров не ограничено):
Код:
Код:
|
07.11.2013, 17:48 | #4 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Например так (побыстрее):
Код:
webmoney: E265281470651 Z422237915069 R418926282008
|
07.11.2013, 18:07 | #5 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Ещё идея быстрого алгоритма для случая "много цветов и ячеек" (и для paramarray() тоже):
в начале кода собираем в словарь цвета критериев (именно значение цвета), затем в цикле по ячейкам каждую проверяем на наличие в словаре её цвета. Так избавимся от лишних циклов в цикле и лишних проверок.
webmoney: E265281470651 Z422237915069 R418926282008
|
07.11.2013, 18:58 | #6 |
Форумчанин
Регистрация: 25.03.2010
Сообщений: 417
|
Уважаемые знатоки, для общего развития объясните эту строчку:
Код:
|
07.11.2013, 19:49 | #7 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
опа!))
по типам операторов приоритеты такие арифметические операторы операторы сравнения логические операторы в каждом типе своя шкала приоритетов: знаете что 3+2*5 = 13 (а не 25). Код:
ra.Interior.Color = cell.Interior.Color (результат ЛОЖЬ или ИСТИНА) потом логический оператор Or потом оператор присвоения переменной res результата выполнения предыдущих операторов. если бы было Код:
cell.Interior.Color*1, а потом это уже сравнивалось бы с ra.Interior.Color и т.д.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
07.11.2013, 20:08 | #8 |
Форумчанин
Регистрация: 25.03.2010
Сообщений: 417
|
это то понятно, но если ее перевести на "русский" то получиться:
ИСТИНА(res = res) или ИСТИНА(ra.Interior.Color = cell.Interior.Color) и что она должна сделать? |
07.11.2013, 20:23 | #9 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
нет первый = это не сравнение это присвоение res = ...
встречались с таким i = i+1 у i теперь новое значение на 1 больше чем до того. в результате выполнения этой строки res = res Or ra.Interior.Color = cell.Interior.Color res получит новое значение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
07.11.2013, 20:32 | #10 |
Форумчанин
Регистрация: 25.03.2010
Сообщений: 417
|
хорошо, переведем по другому:
res= ЛОЖЬ(Dim res As Boolean) или ИСТИНА(ra.Interior.Color = cell.Interior.Color) и итог? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
пользовательская функция МАКСЕСЛИМН | Zorg | Microsoft Office Excel | 7 | 22.06.2012 11:43 |
Пользовательская функция с неопределенным количеством параметров | savraska | Microsoft Office Excel | 1 | 23.05.2010 12:00 |
Пользовательская функция с необязательными параметрами | savraska | Microsoft Office Excel | 2 | 23.05.2010 11:47 |
Пользовательская функция,возвращающая массив | savraska | Microsoft Office Excel | 2 | 20.04.2010 03:12 |
Функция с необязательными параметрами | anGeee | Общие вопросы Delphi | 6 | 07.08.2009 10:46 |