Omzetten naar decimaal

Status
Niet open voor verdere reacties.

Zamna

Gebruiker
Lid geworden
2 aug 2006
Berichten
18
Wiel wil, kan en helpt mij met mijn probleem.
Vanuit een ascii bestand wordt middels een macro een bestand verwerkt.
Het probleem is echter dat ik een geldgetal niet decimaal krijg.
Bv 11696 moet 116,96 worden.
Momenteel doe ik het handmatig na het uitvoeren van de macro, door een aparte kolom met formule te maken
en de layout aan te passen met opschuiven van komma.
Het betreffende deel van macro doe ik hierbij.
Het gaat zich om regel waarin 438 en 483 staat.
Heel veel dank voor de te nemen moeite.

R = 2
Set regel = Ws2.Cells(R, K)
For x = 1 To rng.Row 'controleer alle cellen in blad1 vanaf a1

Set cel = Ws1.Cells(x, 1)
l = Len(cel)

If Left(cel, 2) = "01" Then

regel.Offset(0, 1).Value = Mid(cel, 81, 12) '0116
regel.Offset(0, 2).Value = Mid(cel, 311, 12) '0181
regel.Offset(0, 3).Value = Mid(cel, 335, 8) '0182

ElseIf Left(cel, 2) = "02" Then
regel.Offset(0, 4).Value = Mid(cel, 43, 11) '0206
regel.Offset(0, 5).Value = Mid(cel, 54, 8) '0207
regel.Offset(0, 6).Value = Mid(cel, 64, 20) '0210

ElseIf Left(cel, 2) = "04" Then
eindereeks = True 'einde reeks is waar
regel.Offset(0, 7).Value = Mid(cel, 243, 8) '0438
regel.Offset(0, 8).Value = Mid(cel, 251, 1) '0439
regel.Offset(0, 9).Value = Mid(cel, 320, 8) '0483
regel.Offset(0, 10).Value = Mid(cel, 328, 1) '0484
regel.Offset(0, 11).Value = Mid(cel, 329, 4) '0496
regel.Offset(0, 12).Value = Mid(cel, 333, 4) '0497
regel.Offset(0, 13).Value = Mid(cel, 252, 20) '0440

End If
If eindereeks Then 'controle op reeksen van 2
R = R + 1
Set regel = Ws2.Cells(R, K) 'ga een rij omlaag in blad2
eindereeks = False
End If

Next

End Sub
 
In Excel het getal delen door 100 en de opmaak als Valuta instellen.
 
Dat is wat ik nu handmatig doe, maar dat had ik graag in de macro verwerkt.
 
Plaats VBA code svp tusen code markeringen (tags) !!

Zoek eens in dit forum op de zoekterm 'array'.
 
Hallo Zamna,


Het voorstel van RogerS in een macro wordt iets van:
Code:
Range("A2") = CCur(Range("A1").Value) / 100
uitgaande dat het getal dat omgezet moet worden in cel A1 staat en het resultaat in A2 geplaatst wordt.

Verder begrijp ik je code niet. Je werkt met de functie Mid(String, Start as Long, [Length])
In jouw code gebruik je harde waardes om de startpositie te bepalen en de lengte ervan.
Waar haal je die vandaan/waar is het op gebaseerd?

Je schrijft dat het om regel waarin 438 en 483 staat, gaat. Maar verder??? Misschien kun je e.e.a. verduidelijken met een voorbeeld bestand?

gr. Mirjam
 
RogerS en Mirjamhelp hierbij het bestand en de macro.
Alvast bedankt.
 

Bijlagen

  • Helpmij.xlsm
    22,2 KB · Weergaven: 21
Hoi Zamna,

Kijk eens naar de Excel functionaliteit "Tekst naar kolommen" Die vind je in het lint op tab Gegevens.
Handmatig zou ik dan hetvolgende doen:
Voeg kolom toe waarin je het rijnummer plaatst bijv. door formule =rij() en vervolgens de waarden ervan plakt.
Sorteren op de kolom met jouw gegevens
Tekst naar kolommen per 01, 02 enz.
Terugsorteren op rijnummer.

Uiteraard kan je dit het ook automatiseren bijv. met een for each en select case.

gr. Mirjam
 
Hoi Zamna,

Ik heb me toch nog even verdiept in je macro.
In eerdere post schreef RogerS om het getal te delen door honderd.
Ik heb je hiervoor de VBA code gegeven
Code:
Range("A2") = CCur(Range("A1").Value) / 100
In jouw code ziet het er dan zo uit:
Code:
         ...
         regel.Offset(0, 7).Value = CCur(Mid(cel, 243, 8)) / 100 '0438
         regel.Offset(0, 8).Value = Mid(cel, 251, 1)   '0439
         regel.Offset(0, 9).Value = CCur(Mid(cel, 320, 8)) / 100 '0483
         ...

aanvullend zou je dan nog, wat RogerS suggereerde, de valuta opmaak toepassen. Welke je precies wil dat is aan jou. Kijk maar eens bij NumberFormat.

Gr. Mirjam
 
Bedankt Mirjam, je hebt me ontzettend geholpen het werkt.
Ik wil hem nog verder uitbreiden met de macro om de layout aan te passen.
Moet kijken hoe ik die aansluit op deze macro.
Nogmaals bedankt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan