2016-07-29 6 views
0

COMNAMEとCOMCOMPANY(コンボボックス)の値がカラムCとD.カラムからのデータの受け渡し

Dim var1 As Integer 
Dim var2 As Integer 

With Application.WorksheetFunction 

var1 = .Match(Me.COMCOMPANY.Value, sheet.range("C7:C10"), 0) 
var2 = .Match(Me.COMNAME.Value, sheet.range("D7:D10"), 0) 

TXTVALUE.Value = .Index(sheet.range("F7:F10"), var1, var2) 

End With 

表は、私はこのマクロを実行すると、選択PA(COMCOMPANY)とCT(COMNAME)がある場合txtvalueでの結果は良好です。この

column C |column D |Column F 
PA  | CT | 750 
RS  | HA | 550 
PA  | CS | 358 

のように見える - tXTVALUEは750ですが、とき私はPA(COMCOMPany)とCS(COMNAME)を選択しました - マクロが返すエラー "インデックスpを取得できませんWorksheetFunctionクラスのroperty "を参照してください。

このコードやコードをどのように動作させるか。ありがとうございました

答えて

0

インデックス関数(および可能であればマッチ関数)がどのように機能するかは、混乱しているようです。

match関数は次のように動作します。

MATCH(x, rng, intExact)

は範囲rngの最初の値xを見つけることを意味し、intExactパラメータは、あなたがに正確に等しい、より最初の値以下かどうかを定義して、または値xを超えています。あなたのケースではintExact = 0で、正確に等しい値を探しています。この関数は、範囲の先頭から最初に一致した行番号を返します。

セルにD6:F9が表示されているとすると、var1はPAに対して1を返します。 Var2は、CTの場合は1、CSの場合は3を返します。 2つの変数の間には関係がありません。 Var1は入力のためにD列を検索し、Var2は2番目の入力のためにF列を検索しています。

INDEX関数は次のように動作:

INDEX(rng, lngRow, lngCol)

範囲の左上から開始rngに移動し、指定された行を取得し、lngrow及びカラムlngcolすることを意味します。最初のケースでは、行1と列1をF7:F10の範囲で選択します。その場合は750になります。 E列の一致が最初の行にあるため、これがうまくいくのは偶然です。

2番目のケースでは、1行目と3列目の値を選択しようとしますが、範囲内に1列しかないため、エラーが発生します。

これをルックアップ列と組み合わせる必要があります。

column C |column D |Column F | Column Z 
PA  | CT | 750  | PACT 
RS  | HA | 550  | RSHA 
PA  | CS | 358  | PACS 

と機能を使用します。

Var1 = .Match(Me.COMCOMPANY.Value & Me.COMNAME.Value, _ 
        sheet.range("Z7:Z10"), 0) 

TXTVALUE.Value = .Index(sheet.range("F7:F10"), var1) 

あなたは指数関数の列パラメータを省略することができます。

何が起こっているのかわからない場合は、変数が何であるかに注目してコードをステップ実行することをお勧めします。WorksheetFunction関数の場合、関数をセルに実際に配置し、変数が問題を解決するための値を指定できます。

0

使用Application.Match機能スローされる可能性のあるエラーを回避しVariantタイプ

Dim var1 As Variant 
Dim var2 As Variant 

With Application 
    var1 = .Match(Me.COMCOMPANY.Value, sheet.range("C7:C10"), 0) 
    If Not IsError(var1) Then 
     var2 = .Match(Me.COMNAME.Value, sheet.range("D7:D10"), 0) 
     If Not IsError(var2) And var1 = var2 Then Me.TXTVALUE.Value = sheet.range("F7:F10").Rows(var1) 
    End If 
End With 
の返される変数でそれらを処理するために、
関連する問題