2016-04-25 8 views
0

Ich habe ein Blatt, das mehrere Spalten hat, was ich hinterher möchte, ist die höchste Zahl in Spalte A anzuzeigen, wenn Spalte D mit dem Namen aus dem Textfeld übereinstimmt.Worksheet Funktion Max mit Bedingung

Dies ist die Formel, die ich auf dem Blatt arbeiten musste, um die zuletzt verwendete Nummer anzuzeigen.

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

Das Problem, das ich bin, ist ich kann dies in 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 

Dies ist der Code, den ich habe zu konvertieren zu bekommen, die die maximale Anzahl Sie alle Werte anzeigt.

+0

Verstehe ich richtig. Die Formel funktioniert. Sie möchten dies jedoch in VBA neu programmieren (indem Sie die in der Formel verwendeten Funktionen vermeiden)? Darf ich fragen warum? Die Performance der resultierenden VBA-Code-Lösung kann nur unterlegen sein. – Ralph

+0

warum nicht einfach 'Evaluate (" MAX (IF ("& rngName.Address &" = L11, "& rngVal.Address &"))))? –

+0

@Ralph, Hi Ralph, ja, dass ich korrigiere, der Grund, warum ich es codieren muss, ist, dass ich mit einem größeren Stück Code für ein anderes Blatt arbeiten werde, also brauche ich es, um dem Benutzer zu sagen, was das ist die letzte Nummer war für den Namen, den sie ausgewählt haben, damit sie die nächste Nummer verwenden können. Danke – atame

Antwort

1

Als eine einfache Möglichkeit zum Kopieren von Formeln in VBA-Code können Sie die Evaluate Funktion verwenden. Für Ihr Beispiel würde es so aussehen:

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 

Hinweis: nicht Name oder Max Verwenden Sie, weil sie Eigenschaften von Objekten sind und manchmal wird VBA verwirrt, wenn der gleiche „Name“ eine Verbindung zu verschiedenen Objekt-Typen :)

+0

Danke für den Hinweis, ich werde das jetzt ändern. Es funktioniert perfekt! Vielen Dank noch mal!! – atame

+0

Gern geschehen;) –