Я создаю формулу в Excel VBA формы
myformula(cell1, cell2, range)
где диапазон выглядит примерно как первые 7 столбцов:
V1 D2 V2 D3 V3 D4 V4 RESULT
0.5 2 0.7
В первом столбце всегда будет значение от 0 до 1 включительно. Все последующие столбцы могут быть пустыми, но если в D2 есть значение, то оно будет и в V2 и так далее.
Моя формула находится в столбце РЕЗУЛЬТАТ и включает суммирование цифр в столбцах V, но только в том случае, если предыдущий столбец D заполнен. то есть в этом случае он будет вычислять V1 + V2, но игнорировать V3 и V4.
VB, который я использовал, работает с
if IsEmpty(D2)
чтобы выбрать соответствующие значения, и в большинстве случаев это работает нормально.
Однако я также хочу иметь возможность применять эту формулу к случаям, когда значения V и D рассчитываются по формуле. Формула условная, выводит либо число, либо "" (что-то вроде IF(A2="","",3)
). Таким образом, диапазон ячеек выглядит идентично, но VB больше не считает его действительно пустым.
Я ищу способы обойти это. Я понимаю, что результат формулы никогда не будет по-настоящему пустым, но есть ли способ сделать содержимое ячейки «достаточно пустым», чтобы VB понимал его как пустое? В качестве альтернативы есть другое условие, которое я могу использовать для выбора пустых ячеек, но я должен иметь возможность различать нулевые значения и пустые ячейки.
ETA: Я изо всех сил пытаюсь реализовать решение Stepan1010. Вот что я делаю - это может быть неправильно:
Public Function YEARAV(sdate As Date, edate As Date, yearrange As Range) As Variant
Dim v1 As Variant
Dim v2 As Variant
Dim v3 As Variant
Dim v4 As Variant
Dim b As Date
Dim c As Date
Dim d As Date
v1 = yearrange.Cells(1, 1)
v2 = yearrange.Cells(1, 3)
v3 = yearrange.Cells(1, 5)
v4 = yearrange.Cells(1, 7)
b = yearrange.Cells(1, 2)
c = yearrange.Cells(1, 4)
d = yearrange.Cells(1, 6)
total_days = edate - sdate
a = sdate
e = edate
If Range(yearrange.Cells(1, 6)).Value = vbNullString Then
d = edate
If Range(yearrange.Cells(1, 4)).Value = vbNullString Then
c = edate
If Range(yearrange.Cells(1, 2)).Value = vbNullString Then
b = edate
End If
End If
End If
YEARAV = ((b - a) * v1 + (c - b) * v2 + (d - c) * v3 + (e - d) * v4) / total_days
End Function
Я также пытался просто использовать If b = vbNullString
и т.д.
Or
... например.If IsEmpty(D2) Or D2="" Then
. Добавьте столько Ors, сколько хотите, чтобы описать то, что вы считаете достаточно пустым. - person Jean-François Corbett   schedule 19.09.2013