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

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

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

Anzeige
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?

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!

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige