2017-02-28 2 views
0

Mein Code Umwandlung ist =SUMPRODUCT(H50:AA69*(H5:AA5=B10)*ISNUMBER(MATCH(F50:F69,K18:K24,0)))Summe mehr Spalten basierend auf Verweise auf mehrere Kriterien - VBA nicht

Wo H50: aa69 meine Datentabelle und h5: AA5 ist meine Reihe von Jahren (b10 meinen Kriterien Jahr, die ich verwenden würde um die Datentabelle zu filtern und die Auswahl auf eine einzelne Spalte zu beschränken). F50: F69 ist eine Spalte mit Bezeichnern, die meinen Kriterienbereich K18: K24 weiter Zeilen aus der einzelnen Spalte herausfiltern würde.

Meine Formel funktioniert in Excel. Ich habe versucht, es in VBA zu übersetzen und ich konnte es nicht zum Laufen bringen. Weiß jemand warum?

Sheet72.Range("C22") = Application.WorksheetFunction.SumProduct((Sheet32. _ 
Range("h50:AA69")) * (Sheet32.Range("H5:AA5") = year) * _ 
Application.WorksheetFunction.IsNumber(Application.WorksheetFunction. _ 
Match(Sheet32.Range("f50:f69"), Sheet72.Range("K18:K24"), 0))) 
+1

ist 'Sheet72.' sein soll' Sheet32.'? –

+0

Ihre Übereinstimmung() verursacht einen Laufzeitfehler, wenn sie keinen Treffer erhält. Daher funktioniert die Überprüfung des Rückgabewerts mit isnumber() nicht. –

+0

@scott craner nein, es ist korrekt wie es ist. – lostinOracle

Antwort

0

Was @ Tim Williams (glaube ich) gemeint ist, dass Sie zu stoppen brauchen die Möglichkeit, dass Application.WorksheetFunction.Match fehl, weil keine Übereinstimmung bei Sheet72.Range("K18:K24") gefunden werden, und es wird einen Fehler retrun.

Siehe die zusätzlichen If Kriterien in dem folgenden Code:

If Not IsError(Application.Match(Sheet32.Range("F50:F69"), Sheet72.Range("K18:K24"), 0)) Then 
    Sheet72.Range("C22") = Application.WorksheetFunction.SumProduct((Sheet32.Range("h50:AA69")) * _ 
    (Sheet32.Range("H5:AA5") = Year) * _ 
    Application.WorksheetFunction.IsNumber(Application.WorksheetFunction. _ 
    Match(Sheet32.Range("f50:f69"), Sheet72.Range("K18:K24"), 0))) 
Else 
    MsgBox "Match failed" 
End If 
Verwandte Themen