Vba 不将空单元格视为零

Vba 不将空单元格视为零,vba,excel,Vba,Excel,我正在研究一个函数来进行线性插值: Public Function linear_interpolation(xs As Range, ys As Range, x As Double) Dim index As Integer Dim x0 As Double, x1 As Double Dim y0 As Double, y1 As Double index = Application.WorksheetFunction.Match(x, xs) x0

我正在研究一个函数来进行线性插值:

Public Function linear_interpolation(xs As Range, ys As Range, x As Double)
    Dim index As Integer
    Dim x0 As Double, x1 As Double
    Dim y0 As Double, y1 As Double
    index = Application.WorksheetFunction.Match(x, xs)
    x0 = xs(index)
    y0 = ys(index)
    x1 = xs(index + 1)
    y1 = ys(index + 1)
    linear_interpolation = ((x1 - x) * y0 + (x - x0) * y1) / (x1 - x0)
End Function
如果xs和ys两个范围都被完全填充,它可以正常工作,但是如果有一个缺少值的空单元格,那么它将被视为零,这是令人惊讶的,我预期会出现类型错误。如果单元格包含一个非数值,那么我得到值!正如所料


处理这个问题的最好方法是什么?我是否必须手动检查xsindex、ysindex、xsindex+1和ysindex+1是否为空,然后返回错误?

如果您仍然需要单元格中的0,但wan将错误标记为NULL,或者您可以很容易地进行如下检查

IF cell.value = VBNullString Then
    'do some stuff
End If

重新发明轮子毫无意义!在我的网站上有一个插件-我为这个无耻的插件道歉-它获取了与你试图插值的值最接近的值,因此你不必担心空单元格注册为零:

底线是您希望添加一个检查,检查值是否等于空字符串


来源:

Application.WorksheetFunction.Matchx、xs是否总是返回与索引匹配的内容?如果不是,我会处理可能的错误Match@ShaiRado:xs可能没有丢失任何值,但是ys您可以捕获xs和/或ys吗?但是,对于您来说,哪一个值重要吗?你只需要关心线性插值的结果是什么,这样你就可以为它设置一个陷阱,下一步继续出错并添加一个陷阱rule@ShaiRado:我不确定陷阱是什么意思,所以我可能误解了你的回答。我的问题是,在上面的代码第7行中,y0被设置为零,但我希望发生错误。如果y0=0,则始终可以执行MsgBox error和Exit函数,或者如果y0=0,则线性插值=CVERRxlerna返回NA,然后执行Exit函数