AW: schon über ne Stunde ...
04.03.2013 13:24:29
Klaus
Hi,
Ich fasse mal zusammen: du willst die Formel
=SUMMEWENNS('Feb PM'!$T:$T;'Feb PM'!$O:$O;Zuatztabellen!$A$10;'Feb PM'!$R:$R; $F$7)
(Beispiel aus deiner Musterdatei, 'Auswertung Februar'!F8)
per Knopfdruck so ändern, dass da stattdessen
=SUMMEWENNS('Mar PM'!$T:$T;'Mar PM'!$O:$O;Zuatztabellen!$A$10;'Mar PM'!$R:$R; $F$7)
steht, ja? Und der Verweis "Mar PM" kommt aus 'Vorbereitung'!A4? Das ganze soll dann in den Bereich F8:I14
Am einfachsten währ das ja mit INDIREKT. Zunächst mal mache ich die Formel kopierbar:
=SUMIFS('Feb PM'!$T:$T;'Feb PM'!$O:$O;Zuatztabellen!$A10;'Feb PM'!$R:$R;F$7)
Achte mal genau drauf, welche $ ich rausgenommen habe. Jetzt kann die Formel einfach in F8 eingetragen werden und dann erst bis I8 gezogen werden, dann können F8:I8 bis F14:I14 gezogen werden.
Jetzt ersetze ich 'FEB PM' durch INDIREKT.
=SUMMEWENNS(INDIREKT("'" & Vorbereitung!$A$4 & "'!$T:$T");INDIREKT("'" & Vorbereitung!$A$4 & "'!$O:$O");Zuatztabellen!$A10;INDIREKT("'" & Vorbereitung!$A$4 & "'!$R:$R");F$7)
wieder für F8, dann weiter ziehen bis F14 und I14.
Änderst du jetzt in Vorbereitung!$A$4 den Zelleninhalt von "Feb PM" auf "Mar PM", dann ändert sich auch der Formelbezug dahin. Die anderen Formeln kannst du nach diesem Muster anpassen.
Vorteil: VBA-frei, funktioniert ohne Knopfdruck sobald in Vorbereitung!$A$4 ein gültiger Blattname eingetragen wird.
Nachteil: Schnarchlangsam, da INDIREKT eine volatile Funktion ist.
Alternative VBA:
Ich hab ehrlich gesagt grad keinen Nerv, mich durch deine Makros durchzuarbeiten. Aber ich schreibe dir gern eben ein VBA, dass die gewünschten Formeln in die Auswertungs-Tabelle einsetzt. Wo du das in deinem Makroablauf ergänzt, findest du bitte selber heraus. An die Stelle an der du die Formeln wünscht, einfac "FormelnEinsetzen" eintragen.
Hier das Makro:
Option Explicit
Sub FormelnEinsetzen()
Dim sBlatt As String
Dim rNeuanlage As Range
Dim rWechsel As Range
Dim rAusbau As Range
Dim rSonst As Range
Dim rTerl As Range
With Sheets("Auswertung Februar") 'NAME NICHT EINDEUTIG!!
Set rNeuanlage = .Range("F8:I14")
Set rWechsel = .Range("F16:I22")
Set rAusbau = .Range("F24:I30")
Set rSonst = .Range("F31:I31")
Set rTerl = .Range("F32:I32")
End With
sBlatt = Sheets("Vorbereitung").Range("A4").Value
If WksExists(sBlatt) Then
rNeuanlage.FormulaR1C1 = _
"=SUMIFS('" & sBlatt & "'!C20,'" & sBlatt & "'!C15,Zuatztabellen!R[2]C1,'" & sBlatt & "' _
!C18,R7C)"
rWechsel.FormulaR1C1 = _
"=SUMIFS('" & sBlatt & "'!C20,'" & sBlatt & "'!C15,Zuatztabellen!R[-6]C2,'" & sBlatt & " _
'!C18,R7C)"
rAusbau.FormulaR1C1 = _
"=SUMIFS('" & sBlatt & "'!C20,'" & sBlatt & "'!C15,Zuatztabellen!R[-14]C3,'" & sBlatt & _
"'!C18,R7C)"
rSonst.FormulaR1C1 = _
"=SUMIFS('" & sBlatt & "'!C20,'" & sBlatt & "'!C15,Zuatztabellen!R10C4,'" & sBlatt & "'! _
C18,R7C)"
rTerl.FormulaR1C1 = _
"=SUMIFS('" & sBlatt & "'!C20,'" & sBlatt & "'!C15,Zuatztabellen!R9C5,'" & sBlatt & "'! _
C18,R7C)"
Else
MsgBox ("Blatt " & sBlatt & " existiert nicht, Formeln NICHT geändert!")
End If
End Sub
Private Function WksExists(wssheet As String) As Boolean
Dim wkscheck As Worksheet
On Error Resume Next
Set wkscheck = Sheets(wssheet)
On Error GoTo 0
If Not wkscheck Is Nothing Then
WksExists = True
Else
WksExists = False
End If
End Function
Ich gebe zu bedenken, dass das Sheet "Auswertung Februar" für die Funktionalität des Makros immer GENAUS SO heissen muss! Auch noch im November. Vielleicht gibts du dem Sheet mal einen besseren Namen, zB "Auswertung aktuell" ... dann natürlich auch im Makro oben ändern.
(Wie kann ich das bloß wieder gut machen, dass du mir hilfst!)
Darauf gehe ich nur ein, weil du explizit gefragt hast! Ich freue mich über eine Rückmeldung in der steht "du hast mir geholfen, vielen Dank" oder so. Für dein Gewissen, überleg dir bitte wieviel Geld du mir für meine Dienste zukommen lassen würdest und spende dann exakt diese Summe an http://www.plan-deutschland.de/helfen-mit-plan/spenden/
oder eine ähnliche Organisation deiner Wahl.
Grüße,
Klaus M.vdT.