2016-06-13 26 views
0

"ClaimAnalysis"シートに名前のリストがあり、 "Analysis"シートにこれらの名前値のサブセットがあります。 "Analysis1"で値を持つ名前を選択するには、 "ClaimAnalysis"の列の各値に対してIndex-Match関数を使用しました(frowは "ClaimAnalysis"の合計行数です)。私が適用している式は、手動で数式バーをうまく動作させますが、VBAではランタイムエラーが発生します。VBA:WorkSheetFunctionクラスのMatchプロパティを取得できません

数式バー "= INDEX(Analysis1 $ B $ 2:!$ B $ 717と、MATCH(ClaimAnalysis A2、解析2 $ A $ 2:!!$ A $ 727,0))"

とはい変数frowは私を作ります一見数式バー

For x = 2 To frow - 1   
ThisWorkbook.Sheets("ClaimAnalysis").Cells(x, 2).Value = Application.WorksheetFunction.Index(Sheets("Analysis1").Range("B2").End(xlDown), Application.WorksheetFunction.Match(ThisWorkbook.Sheets("ClaimAnalysis").Cells(x, 1), Sheets("Analysis1").Range("A2").End(xlDown), 0)) 
Next x 

答えて

0

に希望どおりにあなたがMATCHに間違った引数を提供しているような範囲は、それが見えます。配列が必要な場所に単一のセルアドレスを指定しています。これはエラーの原因となる可能性があります。 MATCH関数の内部

、この変更:これに

Sheets("Analysis1").Range("A2").End(xlDown)

Sheets("Analysis1").Range(Range("A2"), Range("A2").End(xlUp))

別の可能性はMATCHが実際にそれがエラーを返した意味、何も見つからないということです。

さらに、End(xlDown)を使用すると、最後のセルではなく、最も下のセルになります。あなたが後者を探しているなら、End(xlUp)はもっと良い選択でしょう。

Dim ws As Worksheet 
Dim matched As Variant 
Set ws = ThisWorkbook.Worksheets("ClaimAnalysis") 

For x = 2 To frow - 1 
    matched = Application.Match(ws.Cells(x, 1), ws.Range(Range("A2"), Range("A2").End(xlUp)), 0) 
    If Not IsError(matched) Then ws.Cells(x, 2).Value = Application.Index(ws.Range("B2").End(xlUp), matched, 0) 
Next x 

たぶん、あなたはこのコードを試すことができます

関連する問題