Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Tekst naar kolommen (recepten)  (gelezen 1874 keer)

0 leden en 1 gast bekijken dit topic.

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 314
  • Geslacht: Man
  • Oplossing.be
Tekst naar kolommen (recepten)
« Gepost op: 11 december 2022, 13:42:57 »
Beste allen,

Sorry van mijn vraag,
vind het beschamend nogmaals zo´n vraag te stellen ondanks de vele hulp slaag ik er nog niet in.  :( :( :(
Een code kopiëren en toepassen op een identieke opmaak lukt me, maar eens het afwijkt sla ik tilt!

In bijlage een tekstbestand om naar een tabblad te plaatsen (is al geïmporteerd in Excel, blad1)

Graag, van tabblad blad 1 naar tabblad "recept"
regels in tabblad1
1) Regel 4 : Naam | ReceptN° | GroepN°
2) Regel 27 = koptekst --> Grondstof|Artikel   |Gewicht   |%
3) Regels vanaf regel 29 T/M lege regel (hier laatste regel 49), kan ook meer of minder zij afhankelijk van de receptuur

Graag in deze kolom volgorde:
Artikel | Grondstof | Gewicht | %

Nogmaals sorry!

Dank bij voorbaat om het eindelijk eens regel bij regel te begrijpen en het uiteindelijk zelf te kunnen

Groeten,
Georgyboy

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 314
  • Geslacht: Man
  • Oplossing.be
Re: Tekst naar kolommen (recepten)
« Reactie #1 Gepost op: 11 december 2022, 20:10:37 »
Goede avond,

In bijlage het (bewerkte TXT bestand, voor gevoelige info), wellicht is dit makkelijke om het zo te importeren in Excel?

Alvast bedankt!

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Tekst naar kolommen (recepten)
« Reactie #2 Gepost op: 12 december 2022, 05:33:23 »
Hallo Georgyboy,

In bijlage heb ik formules in het werkblad "Tekst" gebruikt om de individuele onderdelen uit de tekst te halen.

Daarna kopiëren, en Plakken speciaal als "Waarde" naar het tabblad "Recept"

Hoop dat je er aan uit kan  :-[

Groeten,

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 314
  • Geslacht: Man
  • Oplossing.be
Re: Tekst naar kolommen (recepten)
« Reactie #3 Gepost op: 12 december 2022, 07:51:00 »
Dankjewel SoftAid,

Leerrijk hoe je regel voor regel in een formule steekt om om tot het resultaat te komen  :thumbsup:
Ik vermoed dat het voor sommige "Oplossing.be" leden kan kriebelen om jouw formules in een VBA code te steken.

Ben geholpen met de voor mij begrijpbare formules en kijk uit naar een VBA code om nog een stap verder te kunnen leren,
wat voor mij een grote stap is om dit onder de knie te krijgen.

Alvast bedankt!
Groeten Georgyboy

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 314
  • Geslacht: Man
  • Oplossing.be
Re: Tekst naar kolommen (recepten)
« Reactie #4 Gepost op: 12 december 2022, 10:17:22 »
@ SoftAid,

De dubbele artikelnummer is te wijten dat in de omschrijving ook een getal staat.

CFI CrLrRBRrWa CLzRYS 19 L (97789) (  187999)      9,399 kg(  9,25%)kr92           9,9 x   19,999
Waarvan dit
Citaat
"CFI CrLrRBRrWa CLzRYS 19 L (97789)"
de omschrijving (max 35 karakters) is.

Dit
Citaat
(  187999)
het artikelnummer

Dat maakt het waarschijnlijk wat moeilijker met de formule omdat dit zelden voorvalt in de omschrijving van het artikel.
Of kan men weg met in de éérste regel 35 karakters te nemen en in de 2° regel te starten vanaf 36?

Kan hier anders mee verder, maar wellicht wel interessant een oplossing te hebben voor artikels met (0000..) in de omschrijving.

Alvast bedankt!
Groeten Georgyboy


Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: Tekst naar kolommen (recepten)
« Reactie #5 Gepost op: 12 december 2022, 10:52:10 »
@ SoftAid,

Een erg moedige interventie :thumbsup:, en nog meer omdat ze midden in de nacht werd uitgevoerd :)
Zoals Georgyboy daarnet al aangaf krijg je de oplossing op die manier moeilijk foutenvrij. Als ik zo een bestand in handen krijg is mijn eerste reflex altijd om alles in een lettertype met vaste karakterbreedte te zetten (Lucida Sans Typewriter pak ik dan 'automatisch'). Daarmee zie je meteen dat alles op een vaste positie staat en kan je zonder 'vind' verder.

@ Georgyboy,

Met bovenstaande in gedachten is het dan nog enkel een paar posities bepalen om in de vba-code te verwerken, en we zijn er.
Sub Maak_Recept()

With Sheets("Blad1")
    tekst = Application.Transpose(Range(.Cells(29, 1), .Cells(.Cells(29, 1).End(xlDown).Row, 1)))
End With
ReDim resultaat(1 To UBound(tekst), 1 To 4)
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
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

End Sub

In zou je die code in geuren en kleuren kunnen uitleggen, maar wat als je deze keer eens zelf zou proberen? Maak in je vba-editor eens "Venster Lokale variabelen" zichtbaar, dat vind je bij 'Beeld', en doorloop de code met F8, en kijk telkens naar de waarden van de variabelen (soms staat er een + bij, die kan je openklikken).
Laat maar weten als er daarna toch nog zaken onduidelijk zijn.

Mvg,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Tekst naar kolommen (recepten)
« Reactie #6 Gepost op: 12 december 2022, 11:33:46 »
Hallo Georgyboy & Molly,

@Molly,

pedomme, als ik die truuk met het Lucinda-lettertype had gekend dan was ik inderdaad sneller tot een (betere) oplossing gekomen. De info van Georgyboy dat elke kolom een bepaald vast aantal karakters heeft is info die ik nu paskreeg, dus dat heeft niet geholpen. Zo als het er nu uit ziet is het zeker poepsimpel  ;D

Je code is bijna een open boek voor mij, nu  :thumbsup:

@Georgyboy,

Dankjewel SoftAid,

Leerrijk hoe je regel voor regel in een formule steekt om om tot het resultaat te komen 
Ben geholpen met de voor mij begrijpbare formules en kijk uit naar een VBA code om nog een stap verder te kunnen leren, wat voor mij een grote stap is om dit onder de knie te krijgen.

Graag gedaan, ik zit na al die jaren ook nog in beginners-niveau. Misschien één trapje hoger dan jij, maar mijn geheugen laat deze oude man vaak in de steek. Maar, ik ben steeds blij als ik begrijpbare code kan doorgeven aan iemand die zich Excel wil aanleren. Stapje per stapje, met vallen en opstaan......  :)

Groeten, en nog veel plezier met de prima code van Molly.

Theo

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 314
  • Geslacht: Man
  • Oplossing.be
Re: Tekst naar kolommen (recepten)
« Reactie #7 Gepost op: 12 december 2022, 12:04:40 »
@ SoftAid
@ MollyVH

Wederom dank voor deze geboden leerrijke oplossingen  _/-\o_
Ben hier met mijn "G.. in de boter gevallen"

Heb inderdaad wat méér gezien via F8

Wil dit zeker verder uitzoeken want vind dit heel leerrijk.

Toch nog enkele vragen omtrent deze code, zoek dit via googelen even uit.
Vb. waarom 2 x (.Cells(29, 1),
de opbouw in tekst uitgelegd

Wil het ooit eens zelf kunnen.........

Nogmaals dank

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: Tekst naar kolommen (recepten)
« Reactie #8 Gepost op: 12 december 2022, 12:44:57 »
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
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 314
  • Geslacht: Man
  • Oplossing.be
Re: Tekst naar kolommen (recepten)
« Reactie #9 Gepost op: 12 december 2022, 13:26:18 »
Hartelijk dank Molly,  _/-\o_

Deze uitleg zal me zeker een grote stap verder helpen.
Daar deze info op een reeël word toegepast.
Bij deze hoop ik ook dat deze info voor vele leden bruikbaar is.

Groetjes,
Georgyboy

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 314
  • Geslacht: Man
  • Oplossing.be
Re: Tekst naar kolommen (recepten)
« Reactie #10 Gepost op: 13 december 2022, 16:53:55 »
@ MollyVH

Dank voor de goed werkende code zowel op de dummy (gewijzigd van gevoelige info), als van het originele tekstbestand.

Om af te sluiten had ik nog 1 vraag indien mogelijk?

Hoe kunnen we in deze code van uit Excel het tekstbestand zoeken in een bestand met text bestanden, deze importeren naar vb "Blad1"
en zo dan de code laten lopen.

Huidige code (Jouw code)

Sub Maak_Recept()

With Sheets("Blad1")
    tekst = Application.Transpose(Range(.Cells(29, 1), .Cells(.Cells(29, 1).End(xlDown).Row, 1)))
End With
ReDim resultaat(1 To UBound(tekst), 1 To 4)
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
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

End Sub

Alvast bedankt

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: Tekst naar kolommen (recepten)
« Reactie #11 Gepost op: 14 december 2022, 12:02:57 »
Hallo Georgyboy,

Daar moet niet veel moeite voor gedaan worden, maar hoe, dat hangt bv. af van:
- wil je door de mappen navigeren (vergelijkbaar met verkenner) om het tekstbestand te kiezen?
- indien niet (want dan moeten we vba op een andere manier de weg wijzen):
- staan alle tekstbestanden in één enkele map, en is dat altijd dezelfde?
- staat daar ook het Excelbestand met de code?
Afhankelijk daarvan kunnen we dan de meest efficiënte methode kiezen.

Mvg,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 314
  • Geslacht: Man
  • Oplossing.be
Re: Tekst naar kolommen (recepten)
« Reactie #12 Gepost op: 15 december 2022, 08:00:27 »
Goedemorgen Molly,

Dank voor de uitleg over de verschillende mogelijkheden!

Zelf iets willen proberen met een extra code maar niet ok :)
Knoeien / leren / fouten maken / niet begrijpen hoe het komt /  :( :(

de éérste maakt importeert wel maar wel in een totaal nieuw Excel file.
De 2° loopt hier vast
Set iBook = Workbooks("C:\Users\Georges\Documents\Tekst naar kolommen Oplossing (recepten).xlsm")
Denk dat ik best een map maak waar de tekstbestanden staan alsook het Excelbestand met de code.

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 314
  • Geslacht: Man
  • Oplossing.be
Re: Tekst naar kolommen (recepten)
« Reactie #13 Gepost op: 15 december 2022, 08:32:32 »
Hallo,

Deze doet het wel :) wel op de locatie van het tekstbestand in de code, beter zoeken in een bestand waar de tekstbestanden staan.
Maar het is een éérste stap hé!

Sub ConvertToActiveWorkbook2()
   
    Dim iBook As Workbook
    Dim iTexts As Workbook
    Dim iSheet As Worksheet
   
    Set iBook = ThisWorkbook
    Set iSheet = iBook.Sheets(1)
    Set iTexts = Workbooks.Open("C:\Users\Georges\Documents\Tekstbestand Naar Excel (Recept)Oplossing.TXT")
 
    iTexts.Sheets(1).Cells.Copy iSheet.Cells
 
    iTexts.Close SaveChanges:=True
 
End Sub


Dan de vlot werkende code laten lopen, ik vermoed dat alles in 1 code kan?

Sub Maak_Recept()

With Sheets("Blad1")
    tekst = Application.Transpose(Range(.Cells(29, 1), .Cells(.Cells(29, 1).End(xlDown).Row, 1)))
End With
ReDim resultaat(1 To UBound(tekst), 1 To 4)
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
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

End Sub

Groetjes,
Georgyboy

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: Tekst naar kolommen (recepten)
« Reactie #14 Gepost op: 15 december 2022, 13:06:13 »
Hallo Georgyboy,

Altijd leuk te zien dat je ook een en ander hebt geprobeerd.
Met je werkende code open je nu een tekstbestand met Excel. Daar is op zich niet veel mis mee, maar ik ben daar toch geen fan van.
Bij gebrek aan antwoord op mijn eerste vraag in vorig bericht heb ik zelf maar een methode gekozen, en aangezien je er geen bezwaar tegen hebt om het Excel-bestand in dezelfde map te zetten als de tekstbestanden zal dit vlot genoeg werken.
Succes ermee!

Mvg,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

 


www.combell.com