Zeilenbereiche ermitteln und verarbeiten
07.11.2012 00:39:17
Erich
Hi Peter,
du willst Teilbereiche einer Spalte ermitteln und - mit den ganzen Zeilen - etwas tun.
Hier 4 Codes:
Option Explicit
Sub stitut1a()
Dim rng As Range, rngListenCode As Range
For Each rng In Range("Liste")
If rngListenCode Is Nothing Then
Set rngListenCode = rng
Else
Set rngListenCode = Union(rngListenCode, rng)
End If
Next
End Sub
Sub stitut1b()
Dim rngListenCode As Range
Set rngListenCode = Range("Liste")
End Sub
Sub stitut2()
Dim varW As Variant, zz As Long, lngV As Long
With Range("Liste")
lngV = 1
varW = .Cells(1)
For zz = 2 To .Rows.Count + 1
If .Cells(zz).Value varW Or zz = .Rows.Count + 1 Then
' Teil-Range verarbeiten
MsgBox .Cells(lngV).Resize(zz - lngV).Address ' oder etwas anderes
' .Cells(lngV).Resize(zz - lngV).EntireRow.Copy ' oder etwas anderes
varW = .Cells(zz)
lngV = zz
End If
Next zz
End With
End Sub
Sub stitut3()
Dim varW As Variant, zz As Long, lngV As Long, arRng() As Range, lngA As Long
ReDim arRng(1 To 5)
With Range("Liste")
lngV = 1 ' Teil-Ranges in Array sammeln
varW = .Cells(1)
For zz = 2 To .Rows.Count + 1
If .Cells(zz).Value varW Or zz = .Rows.Count + 1 Then
lngA = lngA + 1
If lngA > UBound(arRng) Then ReDim Preserve arRng(1 To 2 * UBound(arRng))
Set arRng(lngA) = .Cells(lngV).Resize(zz - lngV)
varW = .Cells(zz)
lngV = zz
End If
Next zz
If lngA > 0 Then ' Teil-Ranges verarbeiten
ReDim Preserve arRng(1 To lngA)
For zz = 1 To lngA
MsgBox arRng(zz).EntireRow.Address
' arRng(zz).EntireRow.Copy
Next zz
End If
End With
End Sub
stitut1a ist im Prinzip dein Code,
stitut1b tut IMHO dasselbe wie dein Code.
stitut2 ermittelt eine Zellengruppe und verarbeitet (kopiert u.a.) sie sofort.
stitut3 sammelt die Zellengruppen in ein Array und verarbeitet sie in einer späteren Schleife.
Was du am ehesten gebrauchen kannst, hängt von deiner Anwendung ab.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich