jede 10. Zeile markieren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: jede 10. Zeile markieren
von: Max
Geschrieben am: 03.08.2015 15:44:06

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

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Daniel
Geschrieben am: 03.08.2015 16:06:34
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

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Mr. Banana
Geschrieben am: 04.08.2015 16:15:38
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

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Daniel
Geschrieben am: 04.08.2015 18:06:09
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

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Mr. Banana
Geschrieben am: 05.08.2015 10:30:33
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

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Daniel
Geschrieben am: 05.08.2015 11:04:38
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

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Mr. Banana
Geschrieben am: 05.08.2015 11:20:28
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

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Daniel
Geschrieben am: 05.08.2015 11:51:52
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

Bild

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

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Daniel
Geschrieben am: 05.08.2015 12:27:54
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

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Mr. Banana
Geschrieben am: 05.08.2015 15:06:40
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!

Bild

Betrifft: AW: jede 10. Zeile markieren
von: Daniel
Geschrieben am: 05.08.2015 15:13:09
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

Bild

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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "jede 10. Zeile markieren"