Страницы: 1
RSS
Очень простой вопрос по синтаксису
 
Доброго времени суток! Очень актуальный вопрос.  
У меня есть работающая функция (спасибо старожилам планеты!), необходимо ее изменить.  
Нужно, чтобы проверялось, находятся ли в ячейках диапазона буквы "А", "Б", "В", "Г", "Д".  
Если выполняются условия по заливке (заливка в самой ячейке отсутствует, а соседняя через 1 - имеет заливку по образцу) и в ячейке - одна из перечисленных букв, то функция выдает значение True (иначе False).  
 
Function Color1(rRange As Range, rColor As Range)  
Dim rCell As Range  
Dim lCol As Long  
Dim vResult  
 
lCol = rColor.Interior.ColorIndex  
For Each rCell In rRange  
If rCell.Interior.Pattern = xlNone Then  
If rCell.Offset(, 2).Interior.ColorIndex = lCol Then  
vResult = WorksheetFunction.Sum(rCell) + vResult  
End If  
End If  
Next rCell  
Color1 = vResult  
End Function
 
Это не подойдёт?  
http://excelvba.ru/code/LikeAnItemOfArray
 
{quote}{login=EducatedFool}{date=27.02.2011 10:20}{thema=}{post}Это не подойдёт?  
http://excelvba.ru/code/LikeAnItemOfArray{/post}{/quote}  
 
Не совсем.  
Из примера уяснила, что моя функция должна иметь тип Boolen.  
Нужно добавить кусок в программу:  
 
"Для диапазона:  
если ячейка = "А"  
или    
если ячейка = "Г"  
или и т. д. (всего 5 значений),  
то функция выдает True, иначе False"
 
Вопрос очень актуален
 
{quote}{login=Kartazi}{date=27.02.2011 10:17}{thema=Очень простой вопрос по синтаксису}{post}Function Color1(rRange As Range, rColor As Range){/post}{/quote}  
а почему тип аргумента rColor (цвет видимо?) объявлен как Range???
 
не понятно условие "заливка по образцу".
 
{quote}{login=k61}{date=01.03.2011 09:24}{thema=заработало.}{post}не понятно условие "заливка по образцу".{/post}{/quote}  
 
Видимо, не корректно поставила задачу. Вот файл с примером.
 
'теперь нужно проверить условия с буквами. Как это записать?  
проверить If rCell.Value <> "" Then....  
у вас в примере нет процедуры из которой вызывается функция Color1.
 
If rCell Like "[А,Г,Д]" Then vResult = True
 
Function Color1(rRange As Range, rColor As Range) As Boolean  
'я бы хотела, чтобы функция была логической (выдавала True или False)  
   Dim lCol As Long  
   Application.Volatile  
   lCol = rColor.Interior.ColorIndex  
   If rRange.Offset(, 2).Interior.ColorIndex <> lCol Then  
       Color1 = False  
       Exit Function  
   End If  
   If Len(rRange) = 1 Then  
       Color1 = (InStr(1, "АБГД", rRange.Value) <> 0)  
       Exit Function  
   End If  
End Function
Я сам - дурнее всякого примера! ...
 
Чуть исправил.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=02.03.2011 09:16}{thema=}{post}Чуть исправил.{/post}{/quote}  
 
Формула не работает для диапазона.  
нужно,чтобы она в выделенном диапазоне проверяла то, что она проверяет для отдельной ячейки!!!!  
Пояснения в файле
 
{quote}{login=dl}{date=02.03.2011 07:59}{thema=регулярные выражения}{post}If rCell Like "[А,Г,Д]" Then vResult = True{/post}{/quote}
 
Спасибо за "регулярные выражения"! Функция работает, как надо.  
Не поняла только, зачем в коде процедура Sub tt?!!  
Sub tt()  
Dim chek As Boolean  
chek = "Б" Like "[А,Г,Д]"
chek = "Г" Like "[А,Г,Д]"
End Sub
 
{quote}{login=Kartazi}{date=03.03.2011 12:06}{thema=Re: }{post}{quote}{login=KukLP}{date=02.03.2011 09:16}{thema=}{post}Чуть исправил.{/post}{/quote}  
Формула не работает для диапазона.  
нужно,чтобы она в выделенном диапазоне проверяла то, что она проверяет для отдельной ячейки!!!!  
Пояснения в файле{/post}{/quote} Как объяснили. В Вашем втором примере выполняются условия для ячеек D5 и G5(в первом примере только для G5), однако результат false. Дальше в ячейках D3,E3:L3(первый пример) и B3, E3:L3(второй пример) условие не выполняется, а результат true. Так что такая функция для диапазона - не пойми что(это эвфемизм).
Я сам - дурнее всякого примера! ...
 
ну я не  
EducatedFool (мною глубоко уважаемый и вельми ценимый за посты)  
 
Просто вспоминал, правильно ли я помню "регулярные выражения";  
можно удалить...
Страницы: 1
Читают тему
Наверх
Loading...