Страницы: 1
RSS
Функция VBA "не видит" нулевые ячейки и значения, полученные формулами масивов
 
Здравствуйте, товарищи!   подскажите плиз...   Я пытаюсь создать небольшую формулку, которая бы находила определенное значение по условию...  Я её проверял - она работает. Однако, работает она лишь тогда, когда вводные данные, т.е. ячейки,  которые я ввожу когда активирую формулу, являются числами, отличными от нуля, а вот нули просто не  видит и вообще не хочет проверять условия >0, <>0......   И еще возникают проблемы, когда формула используется на других листах....   Подскажите, what is happend?   Возможно ли, что вся беда в том, что в ячейках, которые обрабатываются, находятся формулы, которые  используют массивы, которые обозначаются {...}?

Спасибо.

Код
Public Function ERASYL(Min_Prices As Variant, Power As Variant, Power_Max As Variant, _ 
Surplus As Variant, Price_Cap As Variant) 
Dim k As Long 
Dim M As Variant 
Dim C As Variant 
Dim Z As Variant 
Dim OTVET As Variant 
Dim D As Variant 
For k = Min_Prices.Rows.Count To 1 Step -1 
If Power.Cells(k, 1) > 0 Then 
M = M + Power.Cells(k, 1) 
C = 0.9 * Min_Prices.Cells(k, 1) 
If Surplus > Power_Max Then 
D = Power_Max 
Else 
D = Surplus 
End If 
If M < D Then 
Z = M 
Else 
Z = D 
End If 
If (((Power_Max - D) * T) / (Z + (Power_Max - D))) < C And Z = D Then 
OTVET = 0.95 * C 
NumberFormat = "0.0000000000000000000" 
Exit For 
End If 
If k = 2 Then 
OTVET = T 
NumberFormat = "0.0000000000000000000" 
Exit For 
End If 
End If 
Next 
ERASYL = OTVET 
End Function
 
Ануар, тут, наверно, без файла-примера Вам не обойтись...
Для решения проблем с "невидимыми" нулями, попробуйте проверять не значение, а его длину Len()... эта функция только пустые ячейки будет пропускать... Правда не знаю как она будет работать с массивами...
Изменено: Ренат - 01.06.2016 16:46:54
Успехов. И мне того же. Благодарю. :)
 
Попробуйте сделать явное преобразование типов:
Код
If Val(Power.Cells(k, 1)) > 0 Then ...
или
Код
If CDbl(Power.Cells(k, 1)) > 0 Then
Так же рекомендую избавиться от Variant - определить правильно типы:
Код
Public Function ERASYL(Min_Prices As Worksheet, Power As Worksheet, Power_Max As Double, Surplus As Double, Price_Cap As Double) As Double
   Dim k As Long
   Dim M As Double
   Dim C As Double
   Dim Z As Double
   Dim OTVET As Double
   Dim D As Double
Ну, и хотелось бы увидеть файл-виновник
 
Товарищи, спасибо за быстрый отклик!
Попробовал ВАши приемы, вроде начал видеть ячейки...

ОДнако осталась проблема.
При обходе цикла и проверки ячеек, Те ячейки, в которых находится формула, созданная средствами VBA function,
отображаются как "0", хотя в них сидят отличные от нуля результаты

Каким образом преодолеть это?  
Страницы: 1
Наверх