• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Gegevens in kolom opsplitsen naar 2 verschillende kolommen

Status
Niet open voor verdere reacties.

tlouwsma

Gebruiker
Lid geworden
20 jan 2014
Berichten
7
Hallo,

Ik hoop dat iemand mij hier kan helpen met het volgende.
Voor een kennis ben ik met een macro bezig. Deze macro zet een export bestand om naar een import bestand voor een andere applicatie. Dit ging voorheen goed want het was een kwestie van kolommen kopieren en op een andere plek neerzetten. Nu zijn ze net overgestapt naar een ander urenregistratie systeem en kom ik er niet meer uit. Het te verwerken bestand is anders ingedeeld.

Het gaat om het volgende:
Kolom D bevat een omschrijving al dan niet gevolgd door een Opdrachtbonnummer en een Werknummer. Het Opdrachtbonnummer heeft een vast aantal tekens van 10 karakter dan volgt er een spatie, streepje, spatie en dan komt het Werknummer met 9 karakters.
Het Opdrachtbonnummer moet in kolom F komen te staan en het Werknummer in kolom H.

Ik zat zelf te denken om de laatste 22 karakters van kolom D in een array te zetten. En deze waarde vervolgens te bewerken. 10 karakters knippen van de linkerkant levert het opdrachtbonnummer en 9 karakters knippen van rechts levert het Werknummer.
Met Excel functies kom ik er wel uit, maar met VBA code krijg ik het niet voor elkaar.

De kolommen zonder Opdrachtbonnummer en Werknummer resulteren uiteraard in een lege kolom F en H.

Daarbij komt ook nog dat het om te zetten bestand de ene week uit 15 regels bestaat en de week erop bijvoorbeeld uit 23 regels.

Kan iemand mij hierbij helpen?Bekijk bijlage uren-rapport TEST.xlsm
 
Waarom staat er geen macro in het bestand en wat is de verwachte uitkomst? Al eens naar Split of TextToColumns gekeken.
 
Hoi,
Ikzelf ben nog niet zo gedreven in het schrijven van macro's. Vooralsnog eigenlijk alleen gebruik gemaakt van de macrorecorder en daar zelf kleine dingen aan aanpassen.

Zoals aangegeven heb ik geen idee hoe ik deze case aan moet vliegen. Vandaar dat er nog geen macro in het bestand staat.

De verwachte uitkomst is:
Kolom D Kolom F Kolom H
SC Elite (Storing MK Ventilator) - OB17.00178 / W16.00009 OB17.00178 W16.00009
Bediening Zandtrechter - OB17.00182 / W16.00023 OB17.00182 W16.00023
 
Zet de verwachte uitkomst even in het bestand.
 
Tineke,

je schrijft in je openingespost o.a:
Met Excel functies kom ik er wel uit, maar met VBA code krijg ik het niet voor elkaar.

Als je de functies in het bestand zet,
daarna de macrorecorder start
op F2 drukt
en de recorder stopt

kun je in de BVA editor zien hoe de formule er in VBA uitziet.
 
Dat klopt Haije, maar dan zit ik nog met het aantal regels dat per bestand anders is.
De formule voor 1 enkele cel kan ik wel zichtbaar krijgen. Maar hoe zet ik dat in VBA dat automatisch het aantal regels wordt gedetecteerd?

Het mooiste leek mij een functie/macro die kolom D in een array zet. Dan de bewerking "filteren van ob_nr en werknr" doet. En het resultaat in de afzonderlijke kolommen zet.
 
Tineke,

neem eens op wat ik je voorstelde en post het bestand met die opgenomen macro, dan wil ik die wel voor je aanpassen...
 
Tineke, kijk eens of dit is wat je bedoelt
 

Bijlagen

  • uren-rapport TEST HS.xlsm
    19,4 KB · Weergaven: 27
Met de gegevens in een array wordt het bv zo
Code:
Sub VenA()
  Dim j As Long, ar, ar1
  With Sheets("uren").Cells(1).CurrentRegion
    ar = .Value
    For j = 2 To UBound(ar)
      If InStr(ar(j, 4), "/") Then
      ar1 = Split(Split(ar(j, 4), "-")(UBound(Split(ar(j, 4), "-"))), "/")
        ar(j, 6) = Trim(ar1(1))
        ar(j, 8) = Trim(ar1(0))
      End If
    Next j
    .Value = ar
  End With
End Sub

@Haije,
Ipv een lusje kan je beter autofill gebruiken. Dat werkt een heel stuk sneller om formules te plaatsen.;)
bv
Code:
Sub Macro1()
  lr = Cells(Rows.Count, 1).End(xlUp).Row - 1
  [F2] = "=right(RIGHT(RC[-2],22),10)"
  [F2].AutoFill [F2].Resize(lr)
  [H2] = "=left(RIGHT(RC[-4],22),9)"
  [H2].AutoFill [H2].Resize(lr)
End Sub
 
Heren (misschien dames),

Veel geleerd van jullie input. Alles 100% snappen doe ik nog niet, maar dat ik hier op deze manier geholpen wordt vind ik super.
Gekozen voor de input van VenA omdat daar enkel en alleen de werknr's en opdrachtbonnr's worden getoond.
Haije jij ook bedankt voor je input, want ik wist werkelijk waar niet dat het zo makkelijk was om formules dmv de recorder te maken.

Ik heb de input van VenA verwerkt in het bestand waar ik mee bezig ben. In dit bestand zijn de uiteindelijke kolommen anders.
Daar waar nodig de code aangepast zodat de juiste kolommen worden gepakt, maar dit resulteert in een fout: 'Het subscript valt buiten het bereik'.
Wat doe ik fout, want ik zie het niet meer.

Code:
Sub Macro8()

'Extraheren van Werknr en Opdrachtbonnr
  With Sheets("Blad1").Cells(1).CurrentRegion
    ar = .Value
    For j = 2 To UBound(ar)
      If InStr(ar(j, 8), "/") Then
      ar1 = Split(Split(ar(j, 8), "-")(UBound(Split(ar(j, 8), "-"))), "/")
        ar(j, 11) = Trim(ar1(1))
        ar(j, 13) = Trim(ar1(0))
      End If
    Next j
    .Value = ar
  End With
  
End Sub

Dit is het bestand waar de macro in is verwerkt: Bekijk bijlage Uitgewerkte versie.xlsm
 
Dat was inderdaad de boosdoener Timshel. Thanks!
De output komt er nu uit zoals gewenst. Vandaag testen of het bestand ingelezen kan worden in de applicatie.

Oh ik ben zo blij met jullie :thumb::thumb::thumb::thumb:
 
Formules plaatsen kan sneller over het gehele bereik dan de 'Autofill' methode.
Code:
Sub Macro1()
  lr = Cells(Rows.Count, 1).End(xlUp).Row - 1
  range("f2").resize(lr) = "=right(RIGHT(RC[-2],22),10)"
  range("h2").resize(lr) = "=left(RIGHT(RC[-4],22),9)"
End Sub
 
De output is goed. Er zijn alleen nog problemen met het inlezen van het bestand in het andere pakket.
Zij hebben nog niet aangegeven waar het probleem ligt. Lijkt mij niet aan de uitkomst van de macro.
Mag ik jullie hierbij bedanken voor de steun en toeverlaat.
En mocht ik jullie expertise weer (eens) nodig hebben dan laat ik wat van me horen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan