Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
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

Doppelte Schleife

Doppelte Schleife
11.11.2020 16:36:04
Nicolas
Hallo Zusammen,
evtl. könnt ihr mir bei einem Problem helfen.
Ich habe eine Arbeitsmappe, bei der alle Blätter gleich aufgebaut sind, bei denen ich folgenden Befehl als Schleife innerhalb des Blattes ausführen will:
Sub Nicht_benutzte_GS()
Dim I As Long
For I = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(I, 1)  Range("B1") Then Rows(I).Delete
Next I
End Sub
Die o.g. Befehle funktionieren auch jeweils in den Blättern. In Spalte A steht u.a. der angesprochene Name, der durch B1 definiert wird. Alle Zeilen mit anderen Namen in A sollen gelöscht werden.
Jetzt soll o.g. Befehl jeweils in allen Blättern, bis auf das erste in der Arbeitsmappe ausgeführt werden.
Folgendes habe ich versucht:
Sub WorksheetLoop()
Dim WS_Count As Integer
Dim i As Integer
Dim r As Integer
WS_Count = ActiveWorkbook.Worksheets.Count
For r = 1 To WS_Count
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, 1)  Range("B1") Then Rows(i).Delete
Next i
Next r
End Sub
Leider führt er den Befehl zwar auf dem ersten Blatt aus, jedoch nicht auf allen Blättern. Es scheint, als würde das "Next r" nicht angesprochen werden. Habt ihr eine Idee, wie man die beiden Befehle kombinieren kann?
Ich freu mich über eure Hilfe
Nico

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Doppelte Schleife
11.11.2020 16:44:43
peterk
Hallo

Sub WorksheetLoop()
Dim WS_Count As Integer
Dim i As Integer
Dim r As Integer
WS_Count = ActiveWorkbook.Worksheets.Count
For r = 1 To WS_Count
With  ActiveWorkbook.Worksheets(i)
For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
If .Cells(i, 1)  .Range("B1") Then .Rows(i).Delete
Next i
end with
Next r
End Sub

AW: Doppelte Schleife
11.11.2020 16:52:43
Nicolas
Hallo,
danke für die schnelle Rückmeldung!
Er gibt mir für die Zeile:
With ActiveWorkbook.Worksheets(i)
die Fehlermeldung: Laufzeitfehler '9': Index außerhalb des gültigen Bereichs.
VG
AW: Doppelte Schleife
11.11.2020 16:58:47
peterk
ooooops
r statt i

With  ActiveWorkbook.Worksheets(r)
Peter
Anzeige
AW: Doppelte Schleife
11.11.2020 17:07:58
Nicolas
Jups das ist es :)
Danke Dir!!
AW: Doppelte Schleife
11.11.2020 18:05:46
Nicolas
Ich bin leider zu doof, ich wollte ganz einfach jetzt in allen Blättern noch eine Kopfzeile hinzufügen und wollte folgendes unter den o.s. Code setzen:
Sub Header()
Dim WS_Count As Integer
Dim i As Integer
Dim r As Integer
Worksheets("Testblatt").Select
WS_Count = ActiveWorkbook.Worksheets.Count
For r = 1 To WS_Count
With ActiveWorkbook.Worksheets(r)
Application.CutCopyMode = False
Rows("1:12").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").FormulaR1C1 = "LUCANET"
Range("A3").FormulaR1C1 = "Name"
Range("A4").FormulaR1C1 = "Buchungskreis"
Range("A5").FormulaR1C1 = "Datenebene"
Range("A6").FormulaR1C1 = "Bewertungsebene"
Next r
End Sub
Das sorgt dafür, dass er mir fünf mal den Befehl auf dem ersten Blatt ausführt und sonst nicht -.-
Anzeige
AW: Doppelte Schleife
11.11.2020 18:31:17
peterk
Hallo
Bei eine With Anweisung musst du eine Punkt "." setzen sonst bezieht sich der Range auf das aktive Worksheet.

Sub Header()
Dim WS_Count As Integer
Dim i As Integer
Dim r As Integer
Worksheets("Testblatt").Select
WS_Count = ActiveWorkbook.Worksheets.Count
For r = 1 To WS_Count
With ActiveWorkbook.Worksheets(r)
Application.CutCopyMode = False
.Rows("1:12").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
.Range("A1").FormulaR1C1 = "LUCANET"
.Range("A3").FormulaR1C1 = "Name"
.Range("A4").FormulaR1C1 = "Buchungskreis"
.Range("A5").FormulaR1C1 = "Datenebene"
.Range("A6").FormulaR1C1 = "Bewertungsebene"
end with
Next r
End Sub

Anzeige
AW: Doppelte Schleife
11.11.2020 16:45:46
Nepumuk
Hallo Nico,
versuch es mal so:
Option Explicit

Public Sub WorksheetLoop()
    
    Dim i As Long
    Dim r As Long
    
    For r = 2 To ActiveWorkbook.Worksheets.Count
        
        With Worksheets(r)
            
            For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
                
                If .Cells(i, 1).Value <> .Cells(1, 2).Value Then Rows(i).Delete
                
            Next i
            
        End With
    Next r
End Sub

Gruß
Nepumuk
Anzeige
.Rows(i).Delete (owt)
11.11.2020 16:50:02
peterk
AW: .Rows(i).Delete (owt)
11.11.2020 16:52:11
Nepumuk
Oooooooooooooooooooops
AW: .Rows(i).Delete (owt)
11.11.2020 16:56:16
Nicolas
Geht leider nicht :(
Für das offene Blatt löscht die Zeilen richtig raus, macht aber nicht weiter...
AW: .Rows(i).Delete (owt)
11.11.2020 16:58:24
Nepumuk
Hallo Nico,
teste mal:
Option Explicit

Public Sub WorksheetLoop()
    
    Dim i As Long
    Dim r As Long
    
    For r = 2 To ActiveWorkbook.Worksheets.Count
        
        With ActiveWorkbook.Worksheets(r)
            
            For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
                
                If .Cells(i, 1).Value <> .Cells(1, 2).Value Then .Rows(i).Delete
                
            Next i
            
        End With
    Next r
End Sub

Gruß
Nepumuk
Anzeige
AW: .Rows(i).Delete (owt)
11.11.2020 17:04:49
Nicolas
Leider immer noch nicht, mittlerweile löscht er alles...
AW: Doppelte Schleife
11.11.2020 17:25:13
Daniel
Hi
nochmal ne Variante das zu lösen.
sie nutzt die relativ unbekannte Methode der Zeilen- oder SpaltenDifferenzen und spart so die Schleife über die Zellen.
Sub test()
Dim sh As Worksheet
Dim Zelle As Range
For Each sh In ActiveWorkbook.Worksheets
Set Zelle = sh.Columns(1).Find(what:=sh.Range("B1").Value, lookat:=xlWhole)
If Not Zelle Is Nothing Then Zelle.EntireColumn.ColumnDifferences(Zelle).EntireRow.Delete
Next
End Sub
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige