Hallo Georgyboy,
Het is niet uitgesloten dat google wat antwoorden kent, maar nadat je zelf al wat hebt uitgezocht kan ik net zo goed voor een extra woordje uitleg zorgen.
With Sheets("Blad1")
tekst = Application.Transpose(Range(.Cells(29, 1), .Cells(.Cells(29, 1).End(xlDown).Row, 1)))
End With
De tweede Cells(29,1) is de positie vanaf waar ik naar beneden kijk om de laatste niet-lege cel te vinden (dat is het equivalent van op die cel gaan staan en Ctrl + pijltje naar beneden). Vervolgens wil ik alle cellen verzamelen om te verwerken. Die beginnen bij die eerste Cells(29,1) en eindigen bij die gevonden onderste.
Die steek ik gegroepeerd in 'tekst', en weet daarmee hoeveel rijen en kolommen in mijn resultaat zullen komen, dus maak ik daarvoor een array (noem het een tabel in het interne geheugen):
ReDim resultaat(1 To UBound(tekst), 1 To 4)
Dan kan aan het vullen worden begonnen:
For i = 1 To UBound(tekst)
resultaat(i, 1) = Trim(Left(tekst(i), 35))
resultaat(i, 2) = Mid(tekst(i), 37, 8 )
resultaat(i, 3) = Mid(tekst(i), 46, 14)
resultaat(i, 4) = Mid(tekst(i), 61, 7)
Next i
Eén voor één (met teller 'i') worden de elementen uit 'tekst' ontleed en op de juiste plaats in de array 'resultaat' gezet (ook mooi te volgen in Lokale variabelen, 2 maal openklikken dus).
Nog enkel wegschrijven:
With Sheets("recept")
.Cells.ClearContents
.Cells(1, 1).Resize(, 4) = Array("Grondstof", "Artikel", "Gewicht", "%")
.Cells(2, 1).Resize(UBound(tekst), 4) = resultaat
.Columns("A:D").EntireColumn.AutoFit
End With
De 'Cells(2,1)' is misschien de enige die minder duidelijk is? Vanaf die cel wordt met 'resize' eerst een gebied gedefinieerd (aantal rijen x 4 kolommen) en daarin komt dan de array 'resultaat'.
Nog veel studieplezier!
Mvg,
Molly