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

Forumthread: jede 10. Zeile markieren

jede 10. Zeile markieren
03.08.2015 15:44:06
Max
Hallo liebe Excel-Experten.
Ich habe das folgende Problem bei dem Erstellen eines Makros in Excel. Der Sinn des Makros ist es in einer ausgewählten Spalte ab einer bestimmten vorgegebenen Zelle jede 10. zu markieren. also z.B. 2, 12, 22, 32, 42, 52... .
Hierfür markiere ich zuerst einen Bereich ab der Zahl mit der die Zählung anfangen soll (hier die 2, also wird z.B. die Spalte U folgendermaßen markiert: Range("U2:U1000").Select ~f~ ). Somit wird nun in dem Bereich gearbeitet, der groß genug ist um meine Wertetabelle nach unten abzudecken.
Nun zum Problem:
Der Code funktioniert bis zu: ~f~ Range("U2:U1000").Select ~f~ einwandfrei. Ab ~f~ Range("U11:U1000") ~f~ .Select und höher klappt es nicht mehr.
Kann einer von euch einen Fehler finden? Vielen Dank für die Hilfe!
Hier der Code:
Festlegen des Bereiches. Festlegen des Anfangs (BSP.: Anfang bei U2, Ende bei U1000 -> U3:U1000)
~f~
Range("U11:U1000").Select
' Initialize ColsSelection equal to the number of columns in the
' selection.
ColsSelection = Selection.Columns.Count
' Initialize RowsSelection equal to the number of rows in your
' selection.
RowsSelection = Selection.Rows.Count
' Initialize RowsBetween equal to three.
RowsBetween = 10
' Initialize Diff equal to one row less than the first row number of
' the selection.-
Diff = Selection.Row - 1
' Resize the selection to be 1 column wide and the same number of
' rows long as the initial selection.
Selection.Resize(RowsSelection, 1).Select
' Resize the selection to be every third row and the same number of
' columns wide as the original selection.
Set FinalRange = Selection. _
Offset(RowsBetween - 11, 0).Resize(1, ColsSelection)
' Loop through each cell in the selection.
For Each xCell In Selection
' If the row number is a multiple of 10, then . . .
If xCell.Row Mod RowsBetween = Diff Then
' ...reset FinalRange to include the union of the current
' FinalRange and the same number of columns.
Set FinalRange = Application.Union _
(FinalRange, xCell.Resize(1, ColsSelection))
' End check.
End If
' Iterate loop.
Next xCell
' Select the requested cells in the range.
FinalRange.Select
Selection.copy
Gruß
Max

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: jede 10. Zeile markieren
03.08.2015 16:06:34
Daniel
Hi
warum arbeitest du nicht mit einer For-Next-Step-Schleife:
for z = 2 to 1000 Step 10
if FinalRange is Nothing then
set FinalRange = Cells(z, 1)
else
set FinalRange = Union(FinalRange, Cells(z, 1))
end If
Next
Gruß Daniel

AW: jede 10. Zeile markieren
04.08.2015 16:15:38
Mr.
Hi Daniel,
wie würdest du eine for-Schleife zum Durchsuchen von Spalten einbinden? Weiß leider nicht wie ich eine Schleife auf die Excel Bezeichnungen von Zellen beziehen soll (z.B. UZ2 usw...).
Kannst du einen Vorschlag deinerseits posten?
Vielen Dank für die Antwort!
Gruß
Max

Anzeige
AW: jede 10. Zeile markieren
04.08.2015 18:06:09
Daniel
Hi
Probiere mal das aus:
dim Zeile as Long
dim Spalte as long
for Zeile = 2 to 20 Step 3
For Spalte = 3 to 25 Step 2
Cells(Zeile, Spalte).Value = "xxx"
Next
Next
Gruß Daniel

AW: jede 10. Zeile markieren
05.08.2015 10:30:33
Mr.
Hi Daniel,
super Lösung! Ich danke dir vielmals! Langsam komme ich in die Thematik rein.
Die Logik sieht schonmal nicht schlecht aus. Die nötigen Zellen werden durchgegangen. Wie kann ich nun die Zellen (in die wir nun "xxx" reingeschrieben haben) alle markieren und in einem anderen Sheet einfügen?
Ich schreibe (oder versuche es zumindest) mir ein Makro, welches mir hilft große Datenmengen nach denen zu filtern, die ich benötige. Hierzu weiß ich in welcher Spalte meine Daten sich befinden. Die 2., 12., 22., 32., (also immer 10 drauf) Zelle aus dieser Spalte will ich raus kopieren (hier liegen meine Werte). Mit den kopierten Werten lässt sich dann arbeiten.
Soweit habe ich deinen Vorschlag angepasst:
Sub test()

Dim Zeile As Long
Dim Spalte As Long
Sheets("Sheet1").Select
For Zeile = 2 To 1000 Step 10
Spalte = 3
Cells(Zeile, Spalte).Select
Selection.Copy
Next
End Sub
Es wäre nun von Vorteil, die Zellen markieren und raus kopieren zu können.
Nochmals vielen Dank für deine Hilfe!
Gruß
Max

Anzeige
AW: jede 10. Zeile markieren
05.08.2015 11:04:38
Daniel
Hi
naja, kopiert hast du sie ja schon.
wenn du alle auf einmal kopieren und irgendwo einfügen willsst:
dim Zeile as Long
dim Spalte as long
dim rngGesamt as range
for Zeile = 2 to 20 Step 3
For Spalte = 3 to 25 Step 2
if rngGesamt is Nothing then
set rngGesamt = Cells(Zeile, Spalte)
else
set rngGesamt = Union(rngGesamt, Cells(zeile, Spalte))
end if
Next
Next
rngGesamt.copy
?.PasteSpecial xlpasteAll
den Zielbereich für das einfügen der Werte musst du bei ? noch selber einfügen.
Da du mir nicht gesagt hast, wohin die Werte eingefügt werden sollen, musst du das selber programmieren.
Gruß Daniel

Anzeige
AW: jede 10. Zeile markieren
05.08.2015 11:20:28
Mr.
Daniel, ich bin begeistert! Vielen Dank für den Code!!!
Darf ich fragen, wo und wie du gelernt hast so zu programmieren? Ich suche momentan nach Möglichkeiten es zu erlernen. Es würde mir die Arbeit sehr erleichtern :D. Ich finde es auch sau interessant. Es bieten sich so viele Möglichkeiten mit den Skills.
Ich hätte da noch eine Frage:
Gibt es eine Möglichkeit eine Zeile in Excel nach einem Namen durchzusuchen und dann die Spalte, wo der gesuchte Name steht, ausgeben zu lassen. Also z.B. Splalte D und somit Spalte = 4?
Vielen lieben Dank!
Max

Anzeige
AW: jede 10. Zeile markieren
05.08.2015 11:51:52
Daniel
Hi
wie ich das gelernt habe?
- damals abschreiben von Listings aus den Computerzeitschriften (C64er)
- Grundlagen im Studium (1 Semsester Pascal für Maschbauer)
- 3 Tage VBA-Grundlagen kurs
- Mitlesen und aktive Mitarbeite in den Foren
Gruß Daniel

AW: jede 10. Zeile markieren
05.08.2015 12:12:39
Mr.
Kennst du eine Möglichkeit eine Spalte nach einem Schlagwort durchzusuchen und schlißlich die Koordinaten der Zelle auszugeben?

Anzeige
AW: jede 10. Zeile markieren
05.08.2015 12:27:54
Daniel
zum ermitteln der Zeilennummer gibts die Excelfunktion VERGLEICH, die du unter VBA mit WORKSHEETFUNCTION.MATCH verwenden kannst.
damit kannst du in einer Zeile oder in eine Spalte die jeweile Zeilen- oder Spaltennummer des Suchbegriffs ermitteln
weil du damit nur EINE Zeile oder Spalte durchsuchen kannst, ist die zweite koordinate ja mit Vorgabe des Suchbereichs festgelegt und bekannt.
ansonsten halt:
Dim Zelle as Range
Set Zelle = Range(...).Find(What:="Schlagwort")
If Not Zelle is Nothting then Msgbox Zelle.Row & " - " & Zelle.Column
Gruß Daniel

Anzeige
AW: jede 10. Zeile markieren
05.08.2015 15:06:40
Mr.
Ein kleines Problem habe ich noch. Wie kann ich den rngGesamt resetten, damit ich nach dem Einfügen der ausgewählten Zellen in einer Spalte, die nächste Spalte durchsuchen kann und wieder einfügen kann.
Diesen Vorgang muss ich nämlich an die 10 Mal ausführen. Wobei ich dann seperat die Spalten durchsuchen möchte.
Momentan bleiben die Zellen aus der zuerst durchgesuchten Spalte erhalten und die Zellen aus der nächsten Spalte kommen hinzu.
Hier der Code für zwei Spalten:

Sub test()
Dim Zeile As Long
Dim Spalte As Long
Dim rngGesamt As Range
'erste Spalte durchsuchen
Sheets("Sheet1").Select
For Zeile = 2 To 1000 Step 10
Spalte = 3
If rngGesamt Is Nothing Then
Set rngGesamt = Cells(Zeile, Spalte)
Else
Set rngGesamt = Union(rngGesamt, Cells(Zeile, Spalte))
End If
Next
rngGesamt.Copy
'Einfügen in eine Tabelle
Sheets("Sheet2").Select
Range("E14").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'Zweite Spalte durchsuchen
Sheets("Sheet1").Select
For Zeile = 2 To 1000 Step 10
Spalte = 5
If rngGesamt Is Nothing Then
Set rngGesamt = Cells(Zeile, Spalte)
Else
Set rngGesamt = Union(rngGesamt, Cells(Zeile, Spalte))
End If
Next
rngGesamt.Copy
'Einfügen in eine Tabelle
Sheets("Sheet2").Select
Range("F14").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub

Vielen Dank für Deine Hilfe!

Anzeige
AW: jede 10. Zeile markieren
05.08.2015 15:13:09
Daniel
Hi
du kannst das auch so machen:
statt

For Zeile = 2 To 1000 Step 10
Spalte = 3
If rngGesamt Is Nothing Then
Set rngGesamt = Cells(Zeile, Spalte)
Else
Set rngGesamt = Union(rngGesamt, Cells(Zeile, Spalte))
End If
Next
besser:
Spalte = 3
set rngGesamt = Cells(2, Spalte)
For Zeile = 12 to 1000 Step 10
set rngGesamt = Union(rngGesamt, Cells(Zeile, Spalte))
Next
dh du weist das erste Element vor der schleife direkt zu und lässt die Schleife erst beim zweiten Element beginnen.
Dann hat du deinen Reset automatisch mit dabei und die innere IF-Abfrage zur Fehlervermeidung kann entfallen.
Kleiner Tip noch:
Variablenzuweisungen (Spalte = 3), die sich innerhalb der Schleife nicht ändern, sollte man ausserhalb der Schleife durchführen, sonstn werden sie unnötigerweise bei jedem Schleifendurchlauf wiederholt.
Gruß Daniel

Anzeige
AW: jede 10. Zeile markieren
05.08.2015 16:28:59
Mr.
Du bist ein Gott!!! Vielen Dank. Jetzt habe ich erstmal genug zu tun. Das Programm nimmt mit Deiner Hilfe nun gestalt an!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Jede 10. Zeile in Excel markieren


Schritt-für-Schritt-Anleitung

Um in Excel jede 10. Zeile auszuwählen, kannst Du die folgende VBA-Programmierung verwenden. Diese Methode ist besonders nützlich, wenn Du große Datenmengen verwalten möchtest.

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

  2. Klicke auf „Einfügen“ und wähle „Modul“.

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

    Sub MarkEveryTenthRow()
       Dim Zeile As Long
       Dim rngGesamt As Range
    
       ' Starte bei Zeile 2 und gehe bis 1000, jede 10. Zeile
       For Zeile = 2 To 1000 Step 10
           If rngGesamt Is Nothing Then
               Set rngGesamt = Cells(Zeile, 1) ' Spalte 1 (A)
           Else
               Set rngGesamt = Union(rngGesamt, Cells(Zeile, 1))
           End If
       Next Zeile
    
       ' Markiere die ausgewählten Zellen
       rngGesamt.Select
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Drücke ALT + F8, wähle „MarkEveryTenthRow“ und klicke auf „Ausführen“.

Dieser Code markiert jede 10. Zeile ab der zweiten Zeile in der ersten Spalte. Du kannst die Spalte anpassen, indem Du die 1 in Cells(Zeile, 1) änderst.


Häufige Fehler und Lösungen

  • Problem: Der Code funktioniert nicht ab einer bestimmten Zeile.

    • Lösung: Stelle sicher, dass Du den richtigen Startwert in der Schleife verwendest. Wenn Du z.B. alle 10. Zeilen ab U11 markieren möchtest, ändere die Zeile in der Schleife auf For Zeile = 11 To 1000 Step 10.
  • Problem: Die Zellen werden nicht markiert.

    • Lösung: Achte darauf, dass rngGesamt vor der Schleife auf Nothing gesetzt ist.

Alternative Methoden

Eine weitere Möglichkeit zur Auswahl jeder 10. Zeile ist die Verwendung von Excel-Formeln oder bedingter Formatierung. Hierbei kannst Du eine Hilfsspalte nutzen:

  1. Füge eine neue Spalte ein.

  2. In Zelle A2 schreibe die Formel:

    =WENN(REST(ZEILE();10)=0; "Markieren"; "")
  3. Ziehe die Formel nach unten, um sie auf die anderen Zellen anzuwenden.

  4. Filtere nach „Markieren“, um nur die gewünschten Zeilen anzuzeigen.

Mit dieser Methode kannst Du auch jede x-te Zeile markieren, indem Du die 10 in der Formel anpasst.


Praktische Beispiele

Wenn Du mit großen Datenmengen arbeitest, kannst Du die Methode „excel nur jede 10. zeile verwenden“ nutzen, um gezielt Werte zu extrahieren. Zum Beispiel:

Sub CopyEveryTenthValue()
    Dim Zeile As Long
    Dim rngGesamt As Range
    Dim Ziel As Range

    Set Ziel = Sheets("Sheet2").Range("A1") ' Zielarbeitsblatt und Zelle

    For Zeile = 2 To 1000 Step 10
        If rngGesamt Is Nothing Then
            Set rngGesamt = Cells(Zeile, 1)
        Else
            Set rngGesamt = Union(rngGesamt, Cells(Zeile, 1))
        End If
    Next Zeile

    rngGesamt.Copy Destination:=Ziel
End Sub

Dieser Code kopiert jede 10. Zeile in eine andere Tabelle.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False, bevor Du mit großen Datenmengen arbeitest, um die Ausführung zu beschleunigen.
  • Nutze die Funktion VERGLEICH, um gezielt nach bestimmten Werten zu suchen, bevor Du die Zeilen markierst.
  • Wenn Du nur jede dritte oder x-te Zeile markieren möchtest, passe den Step-Wert in der Schleife entsprechend an.

FAQ: Häufige Fragen

1. Wie kann ich jede dritte Zeile markieren?
Ändere den Step-Wert in der Schleife auf 3:

For Zeile = 2 To 1000 Step 3

2. Kann ich den Code anpassen, um nur bestimmte Spalten zu berücksichtigen?
Ja, indem Du die Spaltennummer in Cells(Zeile, Spalte) änderst.

3. Wie kann ich den markierten Bereich in ein anderes Arbeitsblatt kopieren?
Verwende die Copy Destination:=-Methode, um den markierten Bereich in eine andere Tabelle zu kopieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige