Hallo! Also mit der 2013 Version sollte es (vermtl. - konnte nicht umfassend testen) mit folgendem Code laufen. Der Code ist jetzt nur für Spalte C. Weiß nicht genau, ob du für Spalte D ein eigenes Makro hast oder das in einer Schleifer (erst C dann D) laufen lässt). Zum Anpassen auf D bei der Berechnung der Summe, hier: "=SUMMEWENNS den ersten Parameter auf D1:D8000 setzen. Beim SVerweis wieder auf 3 setzen und die Sortierung von C auf D wechlsen (dort der 2 Sortierwert). Schau mal bitte ob das so klappt. Schönen Tag noch.
Option Explicit
Sub berechnenLP()
Dim name As String
Dim name2 As String
Dim mitwe
Dim max
Dim min
Dim i As Long
Dim bedingungen
Dim pfad As String
Dim suche As String
Dim zeile As Long
Dim summe
Dim formel1
Dim formel2
Dim anzahl As Long
bedingungen = Array("", "NEG", "POS")
pfad = "" 'hier den Pfad eingeben
If Right(pfad, 1) = "\" Then pfad = Left(pfad, Len(pfad) - 1)
Application.ScreenUpdating = False
name = ThisWorkbook.name
Workbooks(name).Worksheets(1).Cells(1, 1) = "Dateiname"
For i = 1 To 2
Workbooks(name).Worksheets(1).Cells(1, 2 + (i - 1) * 3) = "Max " & bedingungen(i) & " [€/MW]"
Workbooks(name).Worksheets(1).Cells(1, 3 + (i - 1) * 3) = "Min " & bedingungen(i) & " [€/MW]"
Workbooks(name).Worksheets(1).Cells(1, 4 + (i - 1) * 3) = "Mittwelwert " & bedingungen(i) & " [€/MW]"
Next i
zeile = 2
suche = Dir(pfad & "\*.xlsx") 'suche nimmt den Dateinamen auf
Do Until suche = ""
If Left(suche, 13) = "ERGEBNISLISTE" Then 'könnte man noch ausbauen
Workbooks.Open pfad & "\" & suche
name2 = ActiveWorkbook.name
For i = 1 To 2
Worksheets(1).Cells(1, 6).FormulaLocal = "=ZÄHLENWENNS(B1:B8000;" & Chr(34) & bedingungen(1) & "*" & Chr(34) & ";E1:E8000;" & Chr(34) & "JA" & Chr(34) & ")"
anzahl = Worksheets(1).Cells(1, 6)
Worksheets(1).Cells(1, 6).FormulaLocal = "=SUMMEWENNS(C1:C8000;B1:B8000;" & Chr(34) & bedingungen(1) & "*" & Chr(34) & ";E1:E8000;" & Chr(34) & "JA" & Chr(34) & ")"
summe = Worksheets(1).Cells(1, 6)
If anzahl = 0 Then
mitwe = 0
Else
mitwe = summe / anzahl
End If
formel1 = "=SVERWEIS(" & Chr(34) & bedingungen(i) & "*" & Chr(34) & ";B1:D8000;2;FALSCH)"
Workbooks(name2).Worksheets(1).Columns("B:E").Sort Key1:=Workbooks(name2).Worksheets(1).Range("E1"), Order1:=xlAscending, Key2:=Workbooks(name2).Worksheets(1).Range("C1"), Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Workbooks(name2).Worksheets(1).Cells(1, 6).FormulaLocal = formel1
max = Worksheets(1).Cells(1, 6).Value
Workbooks(name2).Worksheets(1).Columns("B:E").Sort Key1:=Workbooks(name2).Worksheets(1).Range("E1"), Order1:=xlAscending, Key2:=Workbooks(name2).Worksheets(1).Range("C1"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
Workbooks(name2).Worksheets(1).Cells(1, 7).FormulaLocal = formel1
min = Worksheets(1).Cells(1, 7).Value
Workbooks(name).Worksheets(1).Cells(zeile, 4 + (i - 1) * 3) = mitwe
Workbooks(name).Worksheets(1).Cells(zeile, 3 + (i - 1) * 3) = min
Workbooks(name).Worksheets(1).Cells(zeile, 2 + (i - 1) * 3) = max
Next i
Workbooks(name2).Close savechanges:=False
Workbooks(name).Worksheets(1).Cells(zeile, 1) = suche
zeile = zeile + 1
End If
suche = Dir()
Loop
Workbooks(name).Worksheets(1).Range("A:M").Columns.AutoFit
Workbooks(name).Worksheets(1).Range("A:M").HorizontalAlignment = xlCenter
Application.ScreenUpdating = True
End Sub
|