Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: For schleife Zeile Überspringen

For schleife Zeile Überspringen
28.10.2016 11:24:36
Thoomas
Hallo zusammen,
ich habe eine For-Schleife in der ich den Mittelwert aus einer Zeile mit gewisser Range bestimmen möchte. Ist diese Zeile fertig wandert die For-Schleife einen Wert weiter und soll in dieser Zeile den Mittelwert berechnen.
Jetzt hab ich zwischendrin eine Leerzeile bei welcher mein Programm eine Fehlermeldung ausspuckt.
Meine Idee war nun die Zeile zu überspringen indem ich eine If-Abfrage mache, falls die Anzahl meiner gezählten Werte in der Zeile 0 ist, soll die Schleife mit dem nächsten Laufindex weitermachen.
Bekomme ich leider nicht richtig umgesetzt. Habt ihr da bessere Ideen?
Sub Mittelwert()
For i = 0 To 17
anz = Application.WorksheetFunction.Count(Worksheets("Tabelle1").Range(Cells(3 + i, 4), Cells(3  _
+ i, 19)))
meani = Application.WorksheetFunction.Sum(Worksheets("Tabelle1").Range(Cells(3 + i, 4), Cells(3  _
+ i, 19))) / anz
Set RangeMean = Worksheets("Tabelle1").Cells(3 + i, 19)
RangeMean.Value = meani
Next i
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For schleife Zeile Überspringen
28.10.2016 11:42:07
Michael
Hallo Thomas!
Probier mal:
Sub Mittelwert()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Tabelle1")
Dim i As Long, meani As Double
Dim r As Range, RangeMean As Range
With Ws
For i = 0 To 17
Set r = .Range(.Cells(3 + i, 4), .Cells(3 + i, 19))
If WorksheetFunction.Count(r) > 0 Then
meani = WorksheetFunction.Sum(r) / WorksheetFunction.Count(r)
Set RangeMean = .Cells(3 + i, 19): RangeMean.Value = meani
End If
Next i
End With
End Sub
Du überschreibst Dir mit dem Mittelwert der Zeile jeweils den letzten Zeilenwert, der in die MW-Berechnung miteinfließt; das ist beabsichtigt?
LG
Michael
Anzeige
Noch kürzer...
28.10.2016 11:57:20
Michael
Thomas,
...wäre gleich die Worksheetfunction.Average (=Mittelwert) zu verwenden, dann sparen wir uns das Summe durch Anzahl-Gestöpsel:
Sub Mittelwert()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Tabelle1")
Dim i As Long, r As Range, RangeMean As Range
With Ws
For i = 0 To 17
Set r = .Range(.Cells(3 + i, 4), .Cells(3 + i, 19))
If WorksheetFunction.Count(r) > 0 Then
Set RangeMean = .Cells(3 + i, 19): RangeMean.Value = WorksheetFunction.Average( _
r)
End If
Next i
End With
End Sub
Den von der Forumssoftware eingefügten Zeilenumbruch (_) bitte löschen.
Meine Anmerkung mit dem Überschreiben der letzten Spalte bleibt davon natürlich unberührt.
LG
Michael
Anzeige
AW: Noch kürzer...
28.10.2016 12:08:46
Thoomas
Hi Michael,
der erste Code funktioniert einwandfrei! Dankeschön :)
Der zweite Code (der kürzere) überprüft die If-Abfrage und überspringt dann die Mittelwertsberechnung, sodass alle Zellen leer bleiben.
Ich werde mich am Montag noch weiter damit auseinandersetzen habe aber jetzt auf jeden Fall eine super Lösung. Dankeschön nochmal und ein schönes Wochenende :)
Gruß Thomas
Anzeige
Freut mich und...
28.10.2016 12:25:42
Michael
bzgl. dem zweiten Code: der läuft genauso; ich vermute nur, dass da der Zeilenumbruch der Forensoftware ein Problem beim Kopieren/Einfügen verursacht ;-).
LG und ein schönes Wochenende!
Michael
AW: For schleife Zeile Überspringen
28.10.2016 11:44:24
MatthiasG
Hallo Tho(o)mas,
vielleicht so?

For i = 0 To 17
anz = Application.WorksheetFunction.Count(Worksheets("Tabelle1").Range(Cells(3 + i, 4),  _
Cells(3 + i, 19)))
If anz  0 Then
meani = Application.WorksheetFunction.Sum(Worksheets("Tabelle1").Range(Cells(3 + i, 4),  _
Cells(3 + i, 19))) / anz
Set RangeMean = Worksheets("Tabelle1").Cells(3 + i, 19)
RangeMean.Value = meani
End If
Next i
End Sub

Gruß Matthias
Anzeige
AW: For schleife Zeile Überspringen
28.10.2016 12:09:37
Thoomas
Hi Matthias,
der Michael hatte das schon super gelöst, aber dir auch ein dickes Danke für deine Unterstützung :).
Schönes Wochenende

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

For-Schleife in Excel: Leerzeilen überspringen


Schritt-für-Schritt-Anleitung

Um in einer For-Schleife in Excel VBA Leerzeilen zu überspringen und den Mittelwert einer Zeile zu berechnen, kannst Du folgenden Code verwenden:

Sub Mittelwert()
    Dim Wb As Workbook: Set Wb = ThisWorkbook
    Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Tabelle1")
    Dim i As Long, meani As Double
    Dim r As Range, RangeMean As Range
    With Ws
        For i = 0 To 17
            Set r = .Range(.Cells(3 + i, 4), .Cells(3 + i, 19))
            If WorksheetFunction.Count(r) > 0 Then
                meani = WorksheetFunction.Sum(r) / WorksheetFunction.Count(r)
                Set RangeMean = .Cells(3 + i, 19)
                RangeMean.Value = meani
            End If
        Next i
    End With
End Sub

In diesem Code wird zunächst die Anzahl der Werte in der Zeile gezählt. Falls diese größer als Null ist, wird der Mittelwert berechnet und in die entsprechende Zelle geschrieben.


Häufige Fehler und Lösungen

  1. Fehler: Fehlermeldung bei leerer Zeile

    • Lösung: Stelle sicher, dass Du die If-Abfrage korrekt implementierst, um die Berechnung bei leerer Zeile zu überspringen.
  2. Fehler: Überschreiben der letzten Zelle

    • Lösung: Achte darauf, dass die Berechnung des Mittelwerts nicht die letzte Zelle überschreibt, die ebenfalls in die Berechnung einfließt.

Alternative Methoden

Eine kürzere Methode zur Berechnung des Mittelwerts ist die Verwendung der WorksheetFunction.Average. Diese Methode spart Dir die Berechnung von Summe und Anzahl:

Sub Mittelwert()
    Dim Wb As Workbook: Set Wb = ThisWorkbook
    Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Tabelle1")
    Dim i As Long, r As Range, RangeMean As Range
    With Ws
        For i = 0 To 17
            Set r = .Range(.Cells(3 + i, 4), .Cells(3 + i, 19))
            If WorksheetFunction.Count(r) > 0 Then
                Set RangeMean = .Cells(3 + i, 19)
                RangeMean.Value = WorksheetFunction.Average(r)
            End If
        Next i
    End With
End Sub

Diese Methode ist effizienter und übersichtlicher.


Praktische Beispiele

Angenommen, in den Zellen D3 bis S20 befinden sich Deine Daten. Der Mittelwert soll in der Spalte T (19. Spalte) berechnet werden. Achte darauf, dass Du den Bereich und die Zielzelle anpasst, falls sich die Struktur Deiner Daten ändert.


Tipps für Profis

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Probleme zu erkennen, z.B. durch die Verwendung von On Error Resume Next.
  • Dynamische Bereichsauswahl: Wenn die Anzahl der Zeilen variieren kann, nutze die UsedRange-Eigenschaft, um den Bereich dynamisch anzupassen.

FAQ: Häufige Fragen

1. Wie kann ich die Schleife anpassen, um mehr oder weniger Zeilen zu überwachen? Du kannst den Wert in For i = 0 To 17 ändern, um die Anzahl der überwachten Zeilen anzupassen.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der Code sollte in den meisten Versionen von Excel VBA funktionieren, die die grundlegenden Funktionen unterstützen. Achte jedoch darauf, dass Du in einer Version arbeitest, die VBA unterstützt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige