2017-02-01 9 views
0

下記のサブエラーで私のエラーを見つけることができません。 「Runtime error 424 Object Required」というメッセージが表示されます。実行時エラー424必要なオブジェクト

私の意図は、私のエクセル式をVBAコードに変換することです。あなたは1次元配列にインデックスを作成しているとき、それはIndexための2つのパラメータを持ってしても意味がありません

Private Sub Workbook_INDEXMATCH() 

    Dim wb As Workbook, wb1 As Workbook 
    Dim LastRow As Long 
    Set wb = Workbooks("WORKBOOK.xlsm") 

    With Application.WorksheetFunction 
     SHEET1NAME.Range("E13") = _ 
     .Index(SHEET2NAME.Range("D:D"), .Match(lookup_value, SHEET1NAME.Range("B13"), 0), .Match(lookup_value, SHEET2NAME.Range("A:A"), 0)) 

    End With 
End Sub 
+0

コードに実際には「SHEET1NAME」があるのですか、それともプレースホルダですか?プレースホルダの場合は、文字通りそのシート名を使用していますか? (Sheet1Name)Range( "E13")など – BruceWayne

答えて

2

.Index(SHEET2NAME.Range("D:D"), .Match(lookup_value, SHEET2NAME.Range("A:A"), 0)) 

また、

.Match(lookup_value, SHEET1NAME.Range("B13"), 0)

あなたがここに単一のセルに検索しているので意味がありません。 13行目で検索するつもりはありますか?

.Match(lookup_value, SHEET1NAME.Range("13:13"), 0) 

しかし、あなたは2次元の範囲にインデックスを作成している場合にのみIndexのための2つのパラメータを使用します。 2番目と3番目のパラメータをIndexに変換する必要があります.2番目のパラメータは列インデックスで、3番目は行でフェッチされるためです。例えば

、あなたはlookup_valueが(同じ行の)列Aに表示され、(同じ列の)行13の範囲A1:D20で、セルを見つけたいとしますによって

myVariable = .Index(SHEET2NAME.Range("D:D"), _ 
    .Match(lookup_value, SHEET2NAME.Range("A:A"), 0), _ 
    .Match(lookup_value, SHEET1NAME.Range("13:13"), 0)) 

を方法は、SHEET1NAMESHEET2NAMEは何ですか?名前やワークシートオブジェクトだけ?上記のすべてがWorksheetオブジェクトだと思われますが、ランタイムエラーはこれらが単にオブジェクトではないという不平を言っていると思います!この場合は、どこでもWorksheets(SHEET1NAME)Worksheets(SHEET2NAME)に置き換えてください。

+0

私のExcelの式は... = INDEX(SHEET2NAME!D:D、MATCH($ B $ 13、SHEET2NAME!$ A: $ A、0)) –

+0

B13はSHEET1NAME –

+0

にあります。シートの名前部分を変更することができます。つまり、SHEET1NAME.Range( "13:13") 'となります。しかし、使用するパラメータを決める必要があります.1つの列に2つのパラメータを設定することはできません。ちなみに –

関連する問題