2017-09-23 8 views
0

私はそれにvlookupを持つ関数を持っています。 ルックアップ値がターゲット配列内にある場合、vlookupが機能します。 ルックアップ値がターゲット配列にない場合は、0を返す必要があります。 現在、配列にないルックアップ値を使って関数を実行すると、関数は誤って終了します。メッセージはありません。 ここに私のコードです。Excel VBA Application.iferror()がエラーを処理していません

Function myPrice(myPart As String, myVol As Integer) 

    Application.Volatile 

    Dim myCol As Integer 
    Dim myCavity As Integer 
    Dim myCycleTime As Integer 
    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim myVal As Double 

    Set wb = Workbooks("AdvancedQuote.xlsm") 
    Set ws = wb.Worksheets("Sheet1") 

    With ws 

    myVal = Application.IfError(Application.WorksheetFunction.VLookup("Four", .Range("TestTable"), 2, 0), 678) 

    myCol = Application.WorksheetFunction.Match(myPart, .Range("Item_Name"), 0) 
    myCavity = Application.WorksheetFunction.Index(.Range("Molding_Data"), Application.WorksheetFunction.Match("Cavities", .Range("pRows"), 0), myCol) 
    myCycleTime = Application.WorksheetFunction.Index(.Range("Molding_Data"), Application.WorksheetFunction.Match("Cycle Time", .Range("pRows"), 0), myCol) 

    End With 

    myPrice = myCavity * myCycleTime/myVol 

End Function 

失敗した行はmyVal =行です。 IfErrorがエラーを処理できるようにするには、 'on error'を設定する必要がありますか?

または、このタスクをどのように達成できますか。 リッチ

答えて

3

WorksheetFunctionプロパティは、エラーが発生したときにプログラムを中断させます。 Application.VLookup.Range("TestTable")"Four"が見つからない場合はそのため、代わりにApplicationオブジェクトのVLOOKUPメソッドを使用して...

myVal = Application.IfError(Application.VLookup("Four", .Range("TestTable"), 2, 0), 678) 
+0

これはトリックでした。今はうまくいく。 – rtemen

0

は、エラーをトラップするために、次のコードを試してみてください。

If IsError(Application.VLookup("Four", .Range("TestTable"), 2, 0)) Then ' Vlookup raised an error 
    myVal = 678 
Else ' Vlookup was successful 
    myVal = Application.VLookup("Four", .Range("TestTable"), 2, 0) 
End If 
+0

これで、iferror()がdiv/0エラーを処理していないことがわかりました。このエラーをキャッチするのに特別なことはありますか? – rtemen

+0

[こちら](https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/on-error-statement)を確認してください。 – UGP

+0

@UGP何を確認しますか? 'On Error Resume Next'?私はそれを "聞いた";)私はそうでなければ、エラーをトラップするために他の方法を使用します。 –

関連する問題