2017-08-02 28 views
0

入力値に基づいて、テーブル内のセルを検索し、その行番号を変数に格納します。この変数は、次の列の対応する値に入力番号を掛けるために使用されます。これまでの私のコード:一致する値の行番号を見つけ、変数に格納する

Option Explicit 

Sub Calculate() 

Dim var As Variant 
Dim rownumber As Integer 
Dim Mx As Variant 
Dim Nx As Variant 
Dim Ox As Variant 
Dim Px As Variant 
Dim Qx As Variant 
Dim Rx As Variant 
Dim low As Variant 
Dim cat As Variant 

rownumber = WorksheetFunction.Match(Sheets("User Interface").Range("K27").Value, Sheets("C-type").Range("L5:L345"), 0) 


Mx = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("M" & rownumber).Value 
Nx = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("N" & rownumber).Value 
Ox = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("O" & rownumber).Value 
Px = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("P" & rownumber).Value 
Qx = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("Q" & rownumber).Value 
Rx = Sheets("User Interface").Range("K27").Value * Sheets("C-type").Range("R" & rownumber).Value 

cat = Array(Mx, Nx, Ox, Px, Qx, Rx) 

low = Application.WorksheetFunction.Min(cat) 

Sheets("User Interface").Range("C45").Value = low 

Sheets("User Interface").Range("c45").Activate 
Application.Goto ActiveCell.EntireRow, True 

End Sub 

問題は、私は、このように私は、これはそれについて移動するための正しい方法であることを疑うし始めている、私のマッチ機能の範囲エラーのうち添字得るということです。私はどうにかテーブル内の一致する番号の行番号を参照できるようにする必要があります、任意の提案は高く評価されるだろう。

+1

う '.Find()'関数の作業を試してみてください? Range( "K27")。値、LookIn:= xlValues、LookAt( "User Interface")のようなものです。 := xlWhole).Row'おそらく? – Tyeler

+1

また、何らかのエラーキャッチを試みることもできます。一致がないか、一致が#N/Aであるため、エラー9が発生している可能性があります。 'Application.Match'を使って試してみましょう。If IsError(rownumber)= FalseならばあなたのコードElse MsgBox("値が見つかりません ")End If'。 'WorksheetFunction.MATCH'が値を見つけることができないと、それはランタイムエラー9を投げます。' Application.MATCH'もエラーをスローしますが、あなたがトラップできる 'rownumber'にエラーが割り当てられます。 – Tyeler

答えて

1

はこの

strToFind = ThisWorkbook.Sheets("User Interface").Range("K27").Value 
    Set Rng = ThisWorkbook.Sheets("C-type").Range("L5:L345") 
    If Application.WorksheetFunction.CountIf(Rng, strToFind) > 0 Then 
     Set Rng1 = Rng.Find(strToFind, LookIn:=xlValues, LookAt:=xlWhole) 
       rownumber = Rng1.Row 
     Else 
      MsgBox strToFind & " does not exist in range " & Rng.Address 
    End If 
+0

こんにちはマディとあなたの提案に感謝します。私はこれを実装しようとしました:dim'ed strToFindはvariantで、RngはRng1を範囲として返します。どちらの場合も、私はfind-rangeで "subscript out of range"エラーを受けています。つまり、Set Rng = ThisWorkbook.Sheets( "C-type")。Range( "L5:L345") 'という行です。トラブルシューティングの方法を教えてください。 –

+1

はワークシート名** "C-type" **は正しいですか? – Maddy

+0

Maddyありがとう!問題は実際には「C型」という名前のハイフンでした。これをCtypeに変更しました。 –

関連する問題