Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1532to1536
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Loop trägt nur Werte der letzten Zeile ein

Loop trägt nur Werte der letzten Zeile ein
14.01.2017 14:21:36
Lisa
Hallo zusammen,
ich verzweifle mal wieder seit Stunden vor einem einzigen Befehl und weiß mittlerweile nicht mal mehr, was ich noch googeln soll.
Also ich habe ein Makro, was eigentlich einwandfrei funktioniert. Nun soll es abgeändert werden, weil sich unser Versuchsaufbau auch ändert. Statt nur einer Person auf einem Tabellenblatt habe ich nun zwei pro Tabellenblatt (beide haben unterschiedliche Zahlen) und das auf 30+ Tabellenblättern. Als Info vorneweg: ich habe ein großes Berechnungs-Tabellenblatt, auf dem hinterher alle Ergebnisse stehen sollen.
Ich habe mir gedacht, ich schreibe einfach einen Loop drumherum, der mir die Mittelwerte und Anzahlen der Zahlen der ersten Personen (11, 12, 14) immer in die geraden Zeilen schreibt. An sich funktioniert da auch schon gut, er lässt immer eine Zeile dazwischen frei. Allerdings werden in jede Zeile nur die Werte vom letzten Tabellenblatt geschrieben.
Vielleicht kann mir ja jemand helfen, den Knoten in meinem Kopf zu lösen.
Mein Code bisher:

Sub Mittelwerte_Hits()
Dim d As Integer, WS_Count As Integer
Dim e As Integer, f as Integer
WS_Count = ActiveWorkbook.Worksheets.Count
f = WS_Count * 2
For d = 2 To WS_Count
For e = 2 To f Step 2
    With Worksheets(d)
        If WorksheetFunction.CountIfs(Worksheets(d).Range("C6:C770"), "*posmein", Worksheets(d). _
Range("D6:D770"), "11") > 0 Then
        Worksheets("Berechnung").Range("A" & e).Value = WorksheetFunction.AverageIfs(Worksheets( _
d).Range("F6:F770"), Worksheets(d).Range("C6:C770"), "*posmein", Worksheets(d).Range("D6:D770"), "11")
        Worksheets("Berechnung").Range("B" & e).Value = WorksheetFunction.CountIfs(Worksheets(d) _
.Range("C6:C770"), "*posmein", Worksheets(d).Range("D6:D770"), "11")
        End If
        If WorksheetFunction.CountIfs(Worksheets(d).Range("C6:C770"), "*posmein", Worksheets(d). _
Range("D6:D770"), "13") > 0 Then
        Worksheets("Berechnung").Range("C" & e).Value = WorksheetFunction.AverageIfs(Worksheets( _
d).Range("F6:F770"), Worksheets(d).Range("C6:C770"), "*posmein", Worksheets(d).Range("D6:D770"), "13")
        Worksheets("Berechnung").Range("D" & e).Value = WorksheetFunction.CountIfs(Worksheets(d) _
.Range("C6:C770"), "*posmein", Worksheets(d).Range("D6:D770"), "13")
        End If
        If WorksheetFunction.CountIfs(Worksheets(d).Range("C6:C770"), "*posmein", Worksheets(d). _
Range("D6:D770"), "14") > 0 Then
        Worksheets("Berechnung").Range("E" & e).Value = WorksheetFunction.AverageIfs(Worksheets( _
d).Range("F6:F770"), Worksheets(d).Range("C6:C770"), "*posmein", Worksheets(d).Range("D6:D770"), "14")
        Worksheets("Berechnung").Range("F" & e).Value = WorksheetFunction.CountIfs(Worksheets(d) _
.Range("C6:C770"), "*posmein", Worksheets(d).Range("D6:D770"), "14")
        End If
     End With
Next e
Next d
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Loop trägt nur Werte der letzten Zeile ein
14.01.2017 16:13:03
Gerd
Auch hallo!
Sub Mittelwerte_Hits()
Dim Q As Worksheet, Z As Worksheet
Dim QC As Range, QD As Range, QF As Range
Dim d As Long
Dim e As Long
Const p As String = "*posmein"
Set Z = ActiveWorkbook.Worksheets(1) '("Berechnung")
For d = 2 To ActiveWorkbook.Worksheets.Count
e = e + 2
Set Q = Worksheets(d)
Set QC = Q.Range("C6:C770")
Set QD = Q.Range("D6:D770")
Set QF = Q.Range("F6:F770")
With WorksheetFunction
If .CountIfs(QC, p, QD, "11") > 0 Then
Z.Range("A" & e).Value = .AverageIfs(QF, QC, p, QD, "11")
Z.Range("B" & e).Value = .CountIfs(QC, p, QD, "11")
End If
If .CountIfs(QC, p, QD, "13") > 0 Then
Z.Range("C" & e).Value = .AverageIfs(QF, QC, p, QD, "13")
Z.Range("D" & e).Value = .CountIfs(QC, p, QD, "13")
End If
If .CountIfs(QC, p, QD, "14") > 0 Then
Z.Range("E" & e).Value = .AverageIfs(QF, QC, p, QD, "14")
Z.Range("F" & e).Value = .CountIfs(QC, p, QD, "14")
End If
End With
Next d
Set QC = Nothing: Set QD = Nothing: Set QF = Nothing: Set Q = Nothing
End Sub
Gruß Gerd
Anzeige
AW: Loop trägt nur Werte der letzten Zeile ein
14.01.2017 17:33:54
Lisa
Vielen, vielen Dank Gerd! Es funktioniert einwandfrei und es sieht gleich noch viel übersichtlicher aus, das ist einfach toll!
Darf ich aus Interesse fragen, warum es mit e = e + 2 funktioniert und nicht, wie von mir gedacht, über den Loop?
Viele Grüße
AW: Loop trägt nur Werte der letzten Zeile ein
14.01.2017 16:20:52
guenni
Du überschreibst ja auch mit jedem Tabellenblatt die alten werte!
vielleicht solltest Du statt
Range("B" & e).Value
Range("B" & e).offset(0, d).Value

schreiben und sinngemäß an allen anderen Stellen, an denen e für die Positionierung verwendet wird.
Stell Dir mal folgende Fragen:
Wenn Du
with worksheets(d)
schreibst, warum schreibst Du für den Rest vom Code doch wieder dauernd worksheets(d) hin?
Gruß,
Günther
Anzeige
AW: Loop trägt nur Werte der letzten Zeile ein
14.01.2017 17:58:44
Gerd
Hallo Lisa,
dies war das Prinzip deines Codes.
Sub Doppelschleife()
Dim d As Integer
Dim e As Integer
For d = 2 To 3
For e = 2 To 6 Step 2
MsgBox d & " in aeußerer Schleife"
MsgBox e & " in innerer Schleife"
MsgBox "ZelleA" & e & "erhält Blatt " & d
Cells(e, 1) = "Blatt " & d
Next e
Next d
End Sub
Gruß Gerd

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige