Hallo BYörn
das ist eine wichtige Info. Wenn du die Sheets immer per VBA löschst und neu erstellst, warum berechnest du das dann nicht gleich im gleichen Atemzug und schreibst die Werte per VBA hart in die Zielzellen?
Nun denn, alle guten Dinge sind drei. Da ich deinen Code nicht kenne gebe ich die Formellösung noch nicht auf. Probiers mal wie folgt.
Code in Modul1:
Function SummewennIndirekt(Bereich As String, Suchkriterien, Summe_Bereich As String, AbSheet As Long, Optional BisSheet As Long)
Dim l As Long, u As Long, i As Long, s As Double, Mappe As Workbook
Application.Volatile
If IsRange(Bereich) And IsRange(Summe_Bereich) Then
Set Mappe = Application.Caller.Parent.Parent
l = AbSheet
If u = 0 Then u = Mappe.Sheets.Count Else u = BisSheet
If l > Mappe.Sheets.Count Then Exit Function
For i = l To u
s = s + Application.WorksheetFunction.SumIf(Mappe.Sheets(i).Range(Bereich), _
Suchkriterien, Mappe.Sheets(i).Range(Summe_Bereich))
Next i
SummewennIndirekt = s
Else
SummewennIndirekt = "#Bereich!"
End If
End Function
Function IsRange(r As String) As Boolean
On Error Resume Next
IsRange = Range(r).Address <> ""
End Function
Formel in Bestellliste: =SummewennIndirekt("B12:B1000";A3;"E12:E1000";5)
Auch hier ist der Aufbau ähnlich der Summewennformel. Nur dass im ersten und dritten Parameter der Bereich als Text angegeben werden muss. Der vierte Parameter ist die Blattposition wo die Suche beginnt (also Kunde A), wenn du den fünften Parameter weglässt wird die Suche bis zum letzten Blatt durchgeführt. Gib einen fünften Parameter an, und die Suche endet auf dieser Blattposition. Blattnamen sind unerheblich.
Gruß Mr. K.
|