Страницы: 1
RSS
Функция COUNT работает по разному в зависимости от обращения к ячейке или переменной
 
Добрый день! Кто знает, подскажите пожалуйста, есть функция COUNT, которую использую в макросе, если аргументы задавать обращениями к ячейкам, то функция выдает один результат, а если перед этим значения ячеек записать в массив и давать значения массива функции COUNT, то она выдает другой результат. Как такое может быть? Пример прилагаю.
Код
q = Application.WorksheetFunction.Count(arrPrice(0), arrPrice(1), arrPrice(2), arrPrice(3), arrPrice(4))
q = Application.WorksheetFunction.Count(Cells(2, 6), Cells(2, 9), Cells(2, 10), Cells(2, 12), Cells(2, 14))
 
Значение и ссылка - не одно и то же.
Код
q = Application.WorksheetFunction.Count(Cells(2, 6).Value, Cells(2, 9).Value, Cells(2, 10).Value, Cells(2, 12).Value, Cells(2, 14).Value)
 
vikttur, любопытно, а как тогда эту функцию использовать с переменными, что бы она не считала те переменные у которых в значение NULL?
 
DopplerEffect,
Цитата
vikttur написал:
Значение и ссылка - не одно и то же.
и вопрос в том, что вы хотите получить. Пустая ячейка в массив перейдет не как незаполненная, а как Empty а его следует считать.
По вопросам из тем форума, личку не читаю.
 
БМВ, Мне нужно, что бы считалось также как по ссылкам, но вместо ссылок будут значения из массива. То есть я так понимаю, нужно каким то образом в массив передавать незаполненную ячейку, что бы функцией это воспринималось, как не заполненное.
 
 
Зачем функция листа?
Код
Sub test1()
    Dim arrPrice(4)
    Dim j As Long, q As Long
    
    arrPrice(0) = Cells(2, 6).Value
    arrPrice(1) = Cells(2, 9).Value
    arrPrice(2) = Cells(2, 10).Value
    arrPrice(3) = Cells(2, 12).Value
    arrPrice(4) = Cells(2, 14).Value
    
    For j = 0 To UBound(arrPrice)
        If arrPrice(j) <> Empty Then q = q + 1
    Next j
    
    MsgBox q
End Sub
 
Код
If Cells(2, 6) = Empty Then arrPrice(0) = Null Else arrPrice(0) = Cells(2, 6)
Соблюдение правил форума не освобождает от модераторского произвола
 
vikttur, спасибо, циклом это я понимаю, что так можно. Просто думал, что если есть отдельно функция под это, то можно было бы ей обойтись.  
 
buchlotnik предложил. Но так обращение к ячейке по 2 раза (если есть значение). Да и вызов функции листа - не всегда быстрее, не родное оно для VBA :)
 
Цитата
vikttur написал:
не родное оно для VBA
полностью поддерживаю
Соблюдение правил форума не освобождает от модераторского произвола
 
Код
 q = Application.WorksheetFunction.Count(IIf(IsEmpty(arrPrice(0)), "", 1), IIf(IsEmpty(arrPrice(1)), "", 1), IIf(IsEmpty(arrPrice(2)), "", 1), IIf(IsEmpty(arrPrice(3)), "", 1), IIf(IsEmpty(arrPrice(4)), "", 1))

:D
По вопросам из тем форума, личку не читаю.
 
Спасибо за решения
 
Цитата
БМВ написал:
IIf(IsEmpty(arrPrice
Разве If пишется не с одной I?
 
Лунтик,
открываете редактор VB, пишете Iif, жмете F1 и читаете, читаете, читаете
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
OFF для Лунтик,
Цитата
Ігор Гончаренко написал:
открываете редактор VB
и не только VBA. Например синтаксис MS SQL также имеет в запасе такую ФУНКЦИЮ.
По вопросам из тем форума, личку не читаю.
 
del
Изменено: sokol92 - 14.08.2019 14:59:56
Владимир
Страницы: 1
Наверх