Zur Veranschaulichung - ohne Schleife.
Dim wks As Excel.Worksheet
Dim Menu As Excel.Range
Dim Cat As Excel.Range
Dim Ids As Excel.Range
Set wks = Worksheets("Tabelle1")
Set Menu = wks.Range("A:A").Find("Menu 1:", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=XlSearchOrder.xlByColumns, MatchCase:=False)
If Menu Is Nothing Then Exit Sub
Set Cat = wks.Range("A:A").Find(1, After:=Menu, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=XlSearchOrder.xlByColumns, MatchCase:=False)
If Cat Is Nothing Then Exit Sub
Set Ids = wks.Cells(Cat.Row, "C") 'Zelle C4
Set Ids = wks.Range(Ids, Ids.End(xlDown)) 'Bereich C4:C11
' 'bzw.
' Set Ids = Ids.Resize(Ids.End(xlDown).Row - Ids.Row + 1) 'Bereich C4:C11
Debug.Print Menu.Address, "= "; "'"; CStr(Menu.Value); "'"
Debug.Print Cat.Address, "= "; "'"; CStr(Cat.Value); "'"
Debug.Print Ids.Address ', "{"; WorksheetFunction.TextJoin(",", False, Id); "}" 'ab Office2019
With Ids.Cells(2).Offset(0, -1) 'Ids.Cells(2) -> Range("C5").Offset(0, -1) -> B5
Debug.Print "[Ids:2]="; .Address, "= "; "'"; CStr(.Value); "'"
End With
Muss man eigentlich nach diesen Ids (1-8) suchen? Da sie zusammen (d.h. lückenlos) und sortiert untereinander stehen, ginge das auch einfacher mit der Range.End-Methode.
Das Verhalten von Range.End in Excel per Hand nachstellen:
Wähle C4 aus und drück dann STRG+[Pfeil_nach_unten]. (Bemerkung: Das geht natürlich mit allen vier Pfeiltasten)
|