我正在表格的 Excel VBA 中创建一个公式
myformula(cell1, cell2, range)
范围看起来像这个的前 7 列:
V1 D2 V2 D3 V3 D4 V4 RESULT
0.5 2 0.7
第一列中总会有一个值,该值介于 0 和 1 之间。所有后续列可能为空,但如果 D2 中有值,V2 中也会有值,依此类推。
我的公式在 RESULT 列中,涉及对 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
等。