2016-04-25 14 views
0

複数の列を持つシートを持っています。列Dがテキストボックスの名前と一致する場合は、列Aに最も高い数値を表示します。ワークシート機能最大条件付き

これは、シート上で最後に使用した番号を表示するための数式です。

=MAX(INDEX((D2:D41=L11)*B2:B41,0)) 

私が午前問題は、このすべての値を最大数をオフに表示している私が持っているコードは、私は、これはVBA

'Cells with dates also return a value, and get covered for determining largest value. Percentages will convert and return numerics. 

Dim rngVal As Range 
Dim rngName as range 
Dim Max As Double 
Dim Name As String 

'Set range from which to determine largest value 
Set rngVal = sheets("Payment History").Range("B2:B41") 
Set rngName = sheets("Payment History").Range("D2:D41") 
Name = Me.TextBox1.value 

'Worksheet function MAX returns the largest value in a range 
Max = Application.WorksheetFunction.Max(rngVal) 

'Displays largest value 
MsgBox Max 
End Sub 

に変換するために得るカントです。

+0

私は正しく理解していますか?数式は機能しています。しかし、あなたはVBAで式を再プログラムしたいのです(式で使われる関数を避ける)?どういうことなんですか?結果として得られるVBAコードソリューションのパフォーマンスは劣る可能性があります。 – Ralph

+0

なぜ 'Evaluate(" MAX(IF& "rngName.Address&" = L11、 "&rngVal.Address&")) ')'を使うのはなぜですか? –

+0

@Ralph、こんにちはRalph、はい、私はそれがコード化される必要がある理由は、私は別のシートのためのコードの大きな部分で動作することですので、私はそれをユーザーに伝えることができる必要があります最後の番号は選択した名前のため、次の番号を使用することができます。ありがとう – atame

答えて

1

vba-codeに式を「コピー」する簡単な方法として、Evaluate関数を使用できます。あなたの例では、それは次のようになります。

Public Sub Test() 
    Dim rngVal As String 
    Dim rngName As String 
    Dim xMax As Double 
    Dim xName As String 

    'Set range from which to determine largest value 
    rngVal = Sheets("Payment History").Range("B2:B41").Address 
    rngName = Sheets("Payment History").Range("D2:D41").Address 
    xName = Me.TextBox1.Value 

    'Worksheet function MAX returns the largest value in a range 
    xMax = Evaluate("MAX(IF(" & rngName & "=" & xName & "," & rngVal & "))") 

    'Displays largest value 
    MsgBox xMax 
End Sub 

ヒント:彼らは、オブジェクトのプロパティがあり、同じ「名前」は、別のオブジェクト・タイプに接続する場合、時にはVBAが混乱してしまうのでNameまたはMaxを使用しないでください:)

+0

アドバイスありがとう、私は今それを変更します。その完璧に動作します!もう一度ありがとう! – atame

+0

歓迎です;) –