Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Selection: Markierte Zeilen ermitteln

Forumthread: Selection: Markierte Zeilen ermitteln

Selection: Markierte Zeilen ermitteln
21.04.2014 18:03:18
Martin
Hallo liebe Excelfreunde,
was ist der einfachste VBA-Lösungsweg um bei einer Zellenselection (teilweise mit mehreren Areas) jede Zeile einmal zu ermitteln? Hier mal ein Beispielmakro mit zwei Areas, die beide Zellen aus Zeile 8 und 9 beinhalten. Bei meinem Code werden die beiden Zeilen daher leider doppelt ermittelt:
Sub SelectedRows()
Dim rngArea As Range
Dim iRow As Integer
'Zellbereich auswählen (Überschneidung Zeile 8 und 9)
Range("B5:B9,C8:C17").Select
'Zeilen ermitteln
For Each rngArea In Selection.Areas
For iRow = 0 To rngArea.Rows.Count - 1
Debug.Print rngArea.Rows.Row + iRow
Next
Next
End Sub

Für Vorschläge bin ich wie immer sehr dankbar!
Viele Grüße
Martin

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Selection: Markierte Zeilen ermitteln
21.04.2014 19:06:46
Tino
Hallo,
einiges was mir einfällt, entweder die Zeilen in einem Array ablegen und abfragen ob schon vorhanden.
Oder wie hier, die Bereiche zu einem zusammenhängenden Bereich machen.
Sub SelectedRows()
Dim rngArea As Range, rngTmp As Range
Dim iRow As Integer
'Zellbereich auswählen (Überschneidung Zeile 8 und 9)
Range("B5:B9,C8:C17").Select
'Zeilen ermitteln
For Each rngArea In Selection.Areas
If rngTmp Is Nothing Then
Set rngTmp = rngArea.EntireRow
Else
Set rngTmp = Union(rngTmp, rngArea.EntireRow)
End If
Next
For Each rngArea In rngTmp.Areas
For iRow = 1 To rngArea.Rows.Count
Debug.Print rngArea.Rows(iRow).Row
Next iRow
Next
End Sub
Gruß Tino

Anzeige
Danke, das ist perfekt!
21.04.2014 19:31:23
Martin
Hallo Tino,
vielen Dank für deine Hilfe, so läuft das Makro perfekt. Ich hatte auch schon an ein Dictionary Object oder Array gedacht und war gespannt, ob es auch einfacher geht. Die Möglichkeit Areas mit Union zu verbinden war mir unbekannt, scheint aber der beste Lösungsweg zu sein.
Nochmals vielen Dank!
Viele Grüße
Martin

Anzeige
Scripting.Dictionary ...
21.04.2014 19:11:32
Matthias
Hallo
Schau mal in der Recherche nach Scripting.Dictionary
Gruß Matthias
;
Anzeige
Anzeige

Infobox / Tutorial

Markierte Zeilen in Excel mit VBA ermitteln


Schritt-für-Schritt-Anleitung

Um markierte Zeilen in Excel zu ermitteln, kannst du ein einfaches VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie du dies umsetzen kannst:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden Code in das Modul ein:

    Sub SelectedRows()
       Dim rngArea As Range, rngTmp As Range
       Dim iRow As Integer
    
       ' Zellbereich auswählen (Überschneidung Zeile 8 und 9)
       Range("B5:B9,C8:C17").Select
    
       ' Zeilen ermitteln
       For Each rngArea In Selection.Areas
           If rngTmp Is Nothing Then
               Set rngTmp = rngArea.EntireRow
           Else
               Set rngTmp = Union(rngTmp, rngArea.EntireRow)
           End If
       Next
    
       For Each rngArea In rngTmp.Areas
           For iRow = 1 To rngArea.Rows.Count
               Debug.Print rngArea.Rows(iRow).Row
           Next iRow
       Next
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Wähle den gewünschten Zellbereich aus und führe das Makro aus, um die markierten Zeilen im Direktfenster anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: Doppelte Zeilen werden angezeigt.

    • Lösung: Verwende die Union-Funktion, um die Bereiche zusammenzuführen, wie im obigen Beispiel.
  • Fehler: Das Makro funktioniert nicht.

    • Lösung: Stelle sicher, dass der Zellbereich korrekt ausgewählt ist und dass das Makro in einem Modul gespeichert ist.

Alternative Methoden

Eine alternative Methode zur Ermittlung der markierten Zeilen ist die Verwendung eines Arrays. Hier ist ein Beispiel:

Sub SelectedRowsWithArray()
    Dim rngArea As Range
    Dim rowsArray() As Long
    Dim i As Long, count As Long

    ' Zellbereich auswählen
    Range("B5:B9,C8:C17").Select

    ' Array initialisieren
    ReDim rowsArray(1 To Selection.Rows.Count)

    ' Zeilen ermitteln
    count = 0
    For Each rngArea In Selection.Areas
        For i = 1 To rngArea.Rows.Count
            count = count + 1
            rowsArray(count) = rngArea.Rows(i).Row
        Next i
    Next

    ' Ausgabe der Zeilen
    For i = 1 To count
        Debug.Print rowsArray(i)
    Next i
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, das zeigt, wie du das Makro ausführen kannst:

  1. Wähle den Zellbereich B5:B9 und C8:C17 aus.
  2. Führe das Makro SelectedRows aus.
  3. Schau im Direktfenster (Strg + G) nach, welche Zeilen ermittelt wurden.

Tipps für Profis

  • Nutze das Scripting.Dictionary, um die Zeilen effizient zu speichern und Duplikate zu vermeiden.
  • Experimentiere mit der Union-Funktion, um deine VBA-Skripte flexibler zu gestalten.
  • Halte deinen Code gut strukturiert und dokumentiere wichtige Schritte für die spätere Verwendung.

FAQ: Häufige Fragen

1. Wie kann ich das Makro schneller ausführen? Du kannst das Makro einer Schaltfläche zuweisen, um es mit einem Klick auszuführen.

2. Welche Excel-Version benötige ich? Das Beispiel sollte in Excel 2010 und späteren Versionen funktionieren, solange VBA unterstützt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige