2017-10-24 3 views
1

ルックアップ式をWorksheet関数に変換したいが、Type mismatchエラーが表示されます。LOOKUP VBAの最終値を求める数式

この式は正常に動作します。

=LOOKUP(2,1/(SalesDB!I6:I3005="FLOUR"),SalesDB!K6:K3005) 

これは私がVlookup式がそれに動作しないように列から最後の値を検索したいType mismatchエラー

ActiveSheet.Range("Q9").Value = Application.WorksheetFunction.Lookup(2, 1/(Sheets("SalesDB").Range("$I$6:$I$3005") = "FLOUR"), Sheets("SalesDB").Range("$K$6:$K$3005")) 

を求められます。エラーを解決するにはどうすればよいですか?

+0

数式は配列式のようです。 VBAでは配列式を使用できません。 – Variatus

+1

@Variatus - あなたは 'FormulaArray'または' Evaluate'メソッドを使うことができます。 – SJR

+0

@SJRはい、確かに。私はそれを考えなかった。 – Variatus

答えて

1

'trick' you are using with the LOOKUP functionは、VBAに簡単に変換されません。単純なFindメソッドを使用して、検索順序を逆にして(パラメータSearchDirection:=xlPrevious)最後に一致するものを見つけ、Offset関数を使用して列を渡って必要な値を取得できます。

Option Explicit 

Sub Test() 

    ActiveSheet.Range("Q9").Value = LastVlookup("FLOUR", Sheets("SalesDB").Range("$I$6:$K$3005"), 3) 

End Sub 

Function LastVlookup(varLookup As Variant, rngData As Range, lngOffset As Long) As Variant 

    LastVlookup = rngData.Find(_ 
     What:=varLookup, _ 
     LookIn:=xlValues, _ 
     LookAt:=xlWhole, _ 
     SearchDirection:=xlPrevious).Offset(0, lngOffset - 1).Value 

End Function 
+0

カラムから最後の値を検索して、vlookupの式が機能しないようにしたい。最初の式はOKですが、VBAコードに変換したいだけです。 – Adnan

関連する問題