2017-12-21 14 views
2

私はVBAで、次の機能があります。#VALUE!名前付き範囲でVBA機能上の誤り、VLOOKUP

Function weightedAverage(x0, y0, x1, y1, x) 
    weightedAverage = y0 + (x - x0) * (y1 - y0)/(x1 - x0) 
End Function 

Function interpolateLookup(lookupVal As Range, lookupRange As Range, colID As Integer) As Double 
    step = 0.01 

    x0 = Application.Round(lookupVal.Value, 3) 
    y0 = Application.VLookup(x0, lookupRange, colID, True) 

    x1 = Application.Round(lookupVal.Value, 3) + step 
    y1 = Application.VLookup(x1, lookupRange, colID, False) 

    x = lookupVal.Value 

    interpolateLookup = weightedAverage(x0, y0, x1, y1, x) 
End Function 

ここでの問題は、私のinterpolateLookup関数が#VALUEを返すということです!次の入力を渡すとエラーが発生します。

=interpolateLookup(E5,K3:O803,5) 

なぜですか?

+0

コードをステップしましたか?私の最初の考えは 'y0'か' y1'のどちらかがエラー値を返すことです。 – Rory

+0

yep ... y1が値のエラーを返しています... –

+0

あなたはそれについて**正確な**試合を探すことを意味しましたか? – Rory

答えて

0

本当の問題は私の頭の中でした。

Function interpolateLookup(lookupVal As Range, lookupRange As Range, colID As Integer) As Double 
    step = 0.01 

    x0 = Application.Round(lookupVal.Value, 2) 
    y0 = Application.VLookup(x0, lookupRange, colID, False) 

    x1 = Application.Round(lookupVal.Value, 2) + step 
    y1 = Application.VLookup(x1, lookupRange, colID, False) 

    x = lookupVal.Value 

    interpolateLookup = Application.Round(weightedAverage(x0, y0, x1, y1, x), 1) 
End Function 

マイlookupValは3桁の精度を持っており、私の検索キーは、このように私が知っている、2桁に私のlookupValを丸め、2桁の精度である:私の検索のためのキーの精度を利用することにより、解決策を見つけた 私はテーブル内で完全に一致し、それが補間のために私のより低いバンドになることを知っているでしょう。

コメントありがとうございます!

関連する問題