Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
924to928
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
924to928
924to928
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Jede Reihe nur einmal in "application.selection"

Jede Reihe nur einmal in "application.selection"
15.11.2007 11:26:00
Oliver
Hallo zusammen,
ich stehe gerade vor dem Problem, dass ich von einem Bereich "Application.Selection" nur jede Zeile einmal abrufen möchte.
Hintergrund ist der, dass der Anwender per Knopfdruck ein Modul startet, bei dem dann in jeder Zeile in einer Spalte ein Eintrag gesetzt wird.
Markiert: "A3:A5", "B4:B5"
Wenn ich dies so löse, dann gibt es jede Zelle, also insgesamt 5 Stück:

Sub Knopf()
dim Rng as range
set Rng = Intersect(Application.Selection,Activesheet.Cells)
Dim Zelle as range
For each Zelle in Rng
' machewas mit Zelle.row
next Zelle
End Sub


>>
Ich möchte aber nur die Zeilen 3,4,5 verwenden und diese nicht doppelt!
Eine Möglichkeit habe ich, dass ich die Selection-Bereich in ein Array einlesen - erscheint mir aber recht zeitintensiv!
Gibt es hierzu vielleicht eine elegante Lösung?
Gruß,
Oliver

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Jede Reihe nur einmal in "application.selection"
15.11.2007 11:49:09
Wolli
Hallo Oliver, ich glaube, das ist vertrackt.
Einfache Lösung: Mehrfachmarkierungen nicht erlauben
(if Selection.Areas.Count > 1 then Abbruch)
Komplizierte Lösung:
Vorkommende Zeilen in allen Areas (for each rng in selection.areas) ermitteln und irgendwie sicherstellen, dass bereits bearbeitete Zeilen übersprungen werden. Wenn sonst keine Ideen mehr kommen und Du Dich selbst nicht in der Lage siehst, mache ich mir dazu mal Gedanken.
Oder reicht die einfache Version?
Vielleicht bis später Gruß, Wolli

Habe jetzt auch gebastelt
15.11.2007 12:03:00
Wolli

Sub Knopf()
Dim Zeile() As Long, _
AnzZeilen As Long, _
Rng As Range, _
i As Long, _
j As Long, _
springen As Boolean
'In jedem Bereich Anzahl Zeilen ermitteln
For Each Rng In Selection.Areas
AnzZeilen = AnzZeilen + Rng.Rows.Count
Next Rng
'Maximale Anzahl zeilen in Feldvar. bereitstellen
ReDim Zeile(AnzZeilen)
'nächsten freien Zeilenspeicher vorgeben
j = 1
'Alle Zeilen durchgehen (auch doppelt markierte!)
For Each Rng In Selection.Rows
'ermitteln, ob die aktuelle Zeile schon bearbeitet wurde
springen = False
For i = 1 To AnzZeilen
If Rng.Row = Zeile(i) Then springen = True
Next i
'wenn nicht, jetzt bearbeiten ...
If Not springen Then
Debug.Print "Bearbeite Zeile " & Rng.Row
'... und den nächsten freien Zeilenspeicher vorgeben
Zeile(j) = Rng.Row
j = j + 1
End If
Next Rng
End Sub


Anzeige
AW: Jede Reihe nur einmal in "application.selection"
15.11.2007 11:50:23
Renee
Hi Oliver,
Als Ansatz:

Sub til()
Dim lMinRow As Long
Dim lMaxRow As Long
Dim rSingle As Range
lMinRow = ActiveSheet.Rows.Count
For Each rSingle In Selection.Areas
If rSingle.Row  lMaxRow Then lMaxRow = rSingle.Row + rSingle. _
Rows.Count - 1
Next
MsgBox "Do something for Rows " & lMinRow & " to " & lMaxRow
End Sub


Greetz Renee

damit leere Zeilen...
15.11.2007 12:00:00
Renee
sicher ausgelassen werden, so:

Sub til()
Dim lMinRow As Long
Dim lMaxRow As Long
Dim rSingle As Range
lMinRow = ActiveSheet.Rows.Count
For Each rSingle In Selection.Areas
If rSingle.Row  lMaxRow Then _
lMaxRow = rSingle.Row + rSingle.Rows.Count - 1
Next
For Each rSingle In ActiveSheet.Rows(lMinRow & ":" & lMaxRow)
If Not (Intersect(Selection, rSingle) Is Nothing) Then
MsgBox "We now do something for row " & rSingle.Row
End If
Next
End Sub


GreetZ Renee

Anzeige
AW: damit leere Zeilen...
15.11.2007 12:08:00
Wolli
Jau. Renees Lösung ist erheblich eleganter und auch korrekt - Chapeau! Gruß, Wolli

AW: Jede Reihe nur einmal in "application.selection"
15.11.2007 13:33:58
Oliver
Hallo Wolli und Renee,
danke für die Lösungen. Jetzt bin ich im Endeffekt genauso schlau wie vorher - nur noch mehr Ideen zum realisieren.
Der Vollständigkeithalber hier noch meine Lösung:

Sub Bereich_auslesen(r_akt_arr() As Long, Target As Range)
'*******Variablen-Deklaration*******
Dim i1 As Integer, i2 As Integer '***
Dim r_akt As Long '***
'*******Zeilen auslesen*******
ReDim Preserve r_akt_arr(0) '***
r_akt_arr(0) = Target.Areas(1).Cells(1).row '***
For i1 = 1 To Target.Areas.Count
For i2 = 1 To Target.Areas(i1).Cells.Count
If IsError(Application.Match(Target.Areas(i1).Cells(i2).row, r_akt_arr, 0)) = True Then
ReDim Preserve r_akt_arr(UBound(r_akt_arr) + 1) '***
r_akt_arr(UBound(r_akt_arr)) = Target.Areas(i1).Cells(i2).row '***
End If
Next i2
Next i1
End Sub


Gruß,
Oliver.

Anzeige
AW: Jede Reihe nur einmal in "application.selection"
15.11.2007 14:03:17
Renee
Hi Oliver,
Jetzt versteh ich nur noch Bahnhof.
Was wolltest Du vorher und was willst Du jetzt machen ?
GreetZ Renee

AW: Jede Reihe nur einmal in "application.selection"
15.11.2007 14:37:51
Oliver
Hallo Renee,
das mit dem Bahnhof ist Dank GDL zur Zeit keine so gute Idee! :-) :-)
Ich dachte, dass es vielleicht eine schnellere und einfachere Lösung über Schnittmengen (Intersect) oder ähnliches gibt. Das ich dann einfach die Selection mit den Reihen der Tabelle vergleiche und daraufhin dann die Reihen als Lösung erhalte. Aber das funktioniert leider nicht.
Gruß,
Oliver.

AW: Jede Reihe nur einmal in "application.selection"
15.11.2007 14:40:58
Renee
Hi Oliver,
kannst Du mir mal verraten, was an meiner Lösung langsam und was kompliziert ist ?
GreetZ Renee

Anzeige
AW: Jede Reihe nur einmal in "application.selection"
15.11.2007 16:19:00
Oliver
Hallo Renee,
das bezog sich nicht auf deine Lösung.
Ich denke, dass meine Variante sicherlich genauso schnell ist wie deine. Ich dachte mir halt, dass das etwas langsam sein könnte!
Gruß,
Oliver.

Da würde ich aber nicht wetten ;-) (oT)
15.11.2007 16:56:36
Renee

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige