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

Forumthread: (ActiveSheet.UsedRange.Rows.Count) zählt falsch

(ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 11:10:38
Marc
Hallo zusammen,
ich habe ein Problem mit dem ich einfach nicht weiterkomme....
Ich kopiere mittels Makro Daten wild hin und her und entferne Duplikate. Da sich nach der Entfernung der Duplikate die Anzahl der Zeilen doch massiv reduziert möchte ich mit dem Befehl
msg2 = (ActiveSheet.UsedRange.Rows.Count)
die Anzahl der Zeilen neu berechnen.
Nun das Problem:
Er zählt nach wie vor die Originalanzahl der Zeilen, die so auch in einem Tabellenblatt so stehen. Selbst wenn ich das Datenblatt erneut selectiere und den Wert auf Null setze, schmeisst er mir die Originalanzahl raus (nämlich knappe 900 anstatt 25...)
msg2 = 0
MsgBox msg2 'hier schmeisst er noch 0 aus
Sheets("Rechnung").Select ' hier stehen definitiv nur noch 25 Zeilen drin es waren mal knappe 900
msg2 = (ActiveSheet.UsedRange.Rows.Count)
MsgBox msg2 ' nun hat er wieder die knappen 900...
Was kann ich noch probieren?
Lieben Gruß
Marc

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 11:12:06
Hajo_Zi
Hallo Marc,
mal sichern.

AW: ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 11:28:54
Marc
Hallo Hajo,
habe Excel komplett geschlossen und neu gestartet, aber nix...
Gruß
Marc

AW: ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 11:37:27
Hajo_Zi
Hallo Marc,
prüfe mal Strg+Ende
Lösche alles vom Ende Deiner Tabelle bis +1 Zeile von Strg+Ende.
Gruß Hajo

Anzeige
AW: ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 11:45:06
Marc
Hallo Hajo,
das scheint der richtige Pfad zu sein. Obwohl ich Duplikate entfernt habe, springt er bei STRG+Ende auf die Zeile 894 (also knapp 900).
Wie mache ich das denn, dass er tatsächlich alles löscht? Habe das nun so gelöst:
Columns("C:G").Select
ActiveSheet.Range("$C$1:$G$" & msg2).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5), _
Header:=xlYes
Danke und Gruß
Marc

Anzeige
AW: ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 11:54:36
Hajo_Zi
Hallo Marc,
lösche das was ich geschrieben habe.
Lösche alles vom Ende Deiner Tabelle bis +1 Zeile von Strg+Ende.

Falls Du das nicht möchtest, ein anderer Weg ist mir nicht bekannt.
Gruß Hajo

Anzeige
AW: ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 11:59:39
Marc
Hallo Hajo,
wie finde ich denn das Ende meiner Tabelle raus also mittels Makro?
Bzw. wie lösche ich das Ganze schnell?
Lieben Gruß
Marc

AW: ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 12:17:18
Hajo_Zi
das Ende Deiner Tabelle hast Du doch schon per VBA rausgefunden, oder stimmt der erste Beitrag nicht?
Gruß Hajo

Anzeige
AW: ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 12:35:01
Marc
Ich habe es nun anders gelöst:
Sheets("Rechnung").Select
Application.ScreenUpdating = False
Range("c:c").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Application.ScreenUpdating = True
damit sucht er mir alle einträge, die in der spalte c leer sind und löscht diese.
das klappt!
Danke!

Anzeige
AW: ActiveSheet.UsedRange.Rows.Count) zählt falsch
31.05.2013 12:36:34
Tino
Hallo,
teste mal diesen Code um den Usedrange neu festzulegen.
Sub Test()
    UsedRange_Neu Sheets("Tabelle1") 'Tabelle anpassen 
End Sub



Sub UsedRange_Neu(mySH As Worksheet)
Dim LRow As Long, LCol As Long
Dim A As Long
 
With mySH.UsedRange
  On Error Resume Next
       'Finde Zeile 
       LRow = .Find("*", , xlValues, xlWhole, xlByRows, xlPrevious, False, False).Row
       LRow = Application.Max(LRow, .Find("*", , xlFormulas, xlWhole, xlByRows, xlPrevious).Row)
       LRow = LRow + 1
       With .Parent
           If LRow < .Rows.Count Then .Range(.Rows(LRow), .Rows(.Rows.Count)).Delete
       End With
End With
With mySH.UsedRange
       'Finde Spalte 
       For A = .Columns(.Columns.Count).Column To .Columns(1).Column Step -1
             LCol = mySH.Columns(A).Find("*", , xlValues, xlWhole, xlByRows, xlPrevious).Column
             LCol = Application.Max(LCol, mySH.Columns(A).Find("*", , xlFormulas, xlWhole, xlByRows, xlPrevious).Column)
             If LCol > 1 Then Exit For
       Next A
       LCol = LCol + 1
       With .Parent
           If LCol < .Columns.Count Then .Range(.Columns(LCol), .Columns(.Columns.Count)).Delete
       End With
End With
End Sub
Gruß Tino
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Probleme mit ActiveSheet.UsedRange.Rows.Count in VBA lösen


Schritt-für-Schritt-Anleitung

  1. Verwende Ctrl + Ende: Überprüfe, ob die letzte verwendete Zeile korrekt ist. Manchmal zeigt Excel mehr Zeilen an, als tatsächlich Daten enthalten.
  2. Leere Zeilen löschen: Lösche leere Zeilen, die nach der Datenbearbeitung zurückbleiben. Du kannst dies tun, indem du die leeren Zellen in der gewünschten Spalte auswählst und sie dann löschst.
    Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  3. Aktualisiere das UsedRange: Wenn du die UsedRange-Eigenschaft verwendest, stelle sicher, dass du die gesamte Tabelle oder das spezifische Arbeitsblatt angibst, um die korrekten Zeilen zu erhalten.
    msg2 = ActiveSheet.UsedRange.Rows.Count
  4. Neues Makro zur Aktualisierung des UsedRange: Du kannst ein Makro erstellen, das das UsedRange neu definiert.
    Sub UpdateUsedRange(mySH As Worksheet)
       Dim LRow As Long
       With mySH.UsedRange
           LRow = .Find("*", , xlValues, xlWhole, xlByRows, xlPrevious).Row
           If LRow < .Rows.Count Then .Range(.Rows(LRow + 1), .Rows(.Rows.Count)).Delete
       End With
    End Sub

Häufige Fehler und Lösungen

  • Fehler: ActiveSheet.UsedRange.Rows.Count gibt die falsche Anzahl zurück.

    • Lösung: Überprüfe, ob du wirklich das korrekte Arbeitsblatt verwendest und alle leeren Zeilen entfernt wurden.
  • Fehler: Excel zählt mehr Zeilen als erwartet.

    • Lösung: Verwende Ctrl + Ende, um zum letzten verwendeten Feld zu navigieren und unnötige Daten zu entfernen.

Alternative Methoden

  • Direktes Löschen: Anstatt die Zeilen manuell zu löschen, kannst du ein Makro verwenden, um alle leeren Zeilen und Spalten zu entfernen. Dies sorgt dafür, dass UsedRange korrekt aktualisiert wird.
  • Verwendung von .UsedRange in Kombination mit spezifischen Bereichen: Du kannst die .UsedRange-Eigenschaft anpassen, um nur bestimmte Bereiche deiner Tabelle zu berücksichtigen.

Praktische Beispiele

Hier sind einige nützliche VBA-Snippets, um das UsedRange zu verwalten:

  1. Duplikate entfernen und Zeilen zählen:

    Sub RemoveDuplicatesAndCount()
       Dim msg2 As Long
       Sheets("Rechnung").Select
       ActiveSheet.Range("$C$1:$G$" & msg2).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5), Header:=xlYes
       msg2 = ActiveSheet.UsedRange.Rows.Count
       MsgBox msg2
    End Sub
  2. Ermitteln der letzten verwendeten Zeile:

    Sub LastUsedRow()
       Dim lastRow As Long
       lastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
       MsgBox "Letzte verwendete Zeile: " & lastRow
    End Sub

Tipps für Profis

  • Optimierung der Performance: Deaktiviere die Bildschirmaktualisierung während des Löschens von Zeilen, um die Ausführung zu beschleunigen:
    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True
  • Verwende UsedRange für spezifische Bereiche: Wenn du nur einen Teil des Arbeitsblattes analysieren möchtest, definiere den Bereich klar.

FAQ: Häufige Fragen

1. Warum zählt ActiveSheet.UsedRange.Rows.Count nicht korrekt? Die UsedRange-Eigenschaft kann alte, nicht sichtbare Daten enthalten. Stelle sicher, dass du alle leeren Zeilen und nicht benötigten Daten entfernt hast.

2. Wie kann ich alle leeren Zeilen in einer Spalte löschen? Du kannst das folgende VBA-Skript verwenden:

Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

3. Gibt es eine Möglichkeit, das UsedRange manuell zurückzusetzen? Ja, du kannst ein Makro schreiben, das das UsedRange neu definiert, indem es leere Zeilen und Spalten entfernt.

4. Wie kann ich die Anzahl der verwendeten Zeilen in einer bestimmten Spalte ermitteln? Verwende den folgenden Code, um die letzte verwendete Zeile in einer bestimmten Spalte zu finden:

lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige