Wenn Spalte Y leer sein kann und du es dann nicht mit übernehmen willst, musst du halt deinen gewünschten Bereich neu referenzieren und dann erst kopieren... oder halt in diesem Fall gar nicht kopieren.
Option Explicit
Sub test()
Dim wks As Excel.Worksheet
Dim rng As Excel.Range
Dim i As Long
Dim k As Long
With Worksheets("Tabelle1")
For i = 1 To .Cells(.Rows.Count, "V").End(xlUp).Row
k = 0
Do
'zu betrachtenden Bereich referenzieren
' * Unterbereich wird um k verschoben
' * Unterbereich umfasst im ersten Durchgang 3 Zellen, sonst 2
Set rng = Union(.Range("V" & i), _
.Range("W" & i).Offset(, k).Resize(, IIf(k > 0, 2, 3)), _
.Range("AO" & i)).Cells
'der Bereich
Debug.Print rng.Address(False, False) & " - {i:" & i & ", k:" & k & "}"
'Inhalt der erste Zelle im Bereich
With AreaCellByIdx(rng, 1)
Debug.Print Spc(2); .Address(False, False) & " = '" & .Text & "'"
End With
'Inhalt der zweiten Zelle im Bereich
With AreaCellByIdx(rng, 2)
Debug.Print Spc(2); .Address(False, False) & " = '" & .Text & "'"
End With
'usw...
'im nächsten Durchgang wird den Unterbereich
'um den neuen Wert k nach rechts verschoben
k = k + 3 - Abs(k > 0)
Loop While k < 17 'wenn k = 17 ist, dann enthält der
'Bereich die Zelle AO (theoretisch) doppelt
Next
End With
End Sub
Private Function AreaCellByIdx(Range As Excel.Range, ByVal Index As Long) As Excel.Range
Dim i As Long
For i = 1 To Range.Areas.Count
With Range.Areas(i)
If Index > .Cells.Count Then
Index = Index - .Cells.Count
Else
Set AreaCellByIdx = .Cells(Index)
Exit Function
End If
End With
Next
Err.Raise 9 'index out of range
End Function
|