• 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.

tekst omzetten naar getallen

Status
Niet open voor verdere reacties.

SandyH

Gebruiker
Lid geworden
29 jan 2012
Berichten
113
Hallo,

Ik heb een file waarop berekeningen moeten gebeuren met bepaalde cellen, deze file wordt aangeleverd in een bepaalde format, het is een dump van gegevens uit een ERP pakket en de format kan niet aangepast worden.

De velden met cijfers zijn geformateerd als tekst, gewoon omzetten naar getal werkt nietBekijk bijlage test.xls, je kan geen enkele andere format op die cellen uitvoeren.
Het 'getal' wordt weergegeven als vb 3767.000-, ik wil dit graag geconverteerd zien naar -3767

Het lukt me niet om dit voor mekaar te krijgen, in bijlage een voorbeeld van zo een bestand. als er een minteken achterstaat, moet de waarde negatief weergeven worden, en zonder minteken gewoon als positief getal.

We krijgen het bestand in xls (dus oude excel versie), ik werk wel met Office 2010,maar ik denk niet dat dit van groot belang is ?

Hoe kan ik deze tekst omzetten naar getallen, liefst zelfs met een macro, want dit bestand moet dagelijks verwerkt worden, dus moet zo vlot mogelijk kunnen gedaan worden.

Alvast bedankt !
 
Code:
Sub M_snb()
  MsgBox Format(Format("3767.000-", "0") / 1000, "0.00")
End Sub
 
Ook nog een bijdrage van mij...
Code:
Sub TekstNaarGetal()

    q1 = Sheets(1).Cells(1).CurrentRegion   ' haal je hele tabel op in een array om 'm in het geheugen te verwerken
    For i = 2 To UBound(q1, 1)                    ' doorloop in een lus alle regels van de tabel, te beginnen vanaf de tweede regel
        For ii = 1 To UBound(q1, 2)               ' doorloop in een lus binnen elke regel alle kolommen, te beginnen vanaf de eerste kolom
            If IsNumeric(q1(i, ii)) Then q1(i, ii) = (q1(i, ii) * 1) / 1000    ' test of de waarde een getal is, zo ja vermenigvuldig deze met 1 om het minteken links te krijgen en deel die waarde door duizend
        Next ii
    Next i
    Sheets(1).Cells(1).Resize(UBound(q1, 1), UBound(q1, 2)) = q1    ' schrijf je geupdate tabel weer terug naar je sheet
    
End Sub

[EDIT] commentaar toegevoegd aan de code ten behoeve van de TS....
 
Laatst bewerkt:
Bedankt ! Hiermee lukt het, ik ga nu aan de slag om te proberen alle stappen in de code te begrijpen, zodat ik weet waar de codes voor staan.
 
nu aan de slag om te proberen alle stappen in de code te begrijpen

Ik heb in m'n post hierboven de procedure voorzien van commentaar zodat je kan zien wat een regel doet.

Overigens bedacht ik me later dat het misschien veiliger is om je bestaande tabel niet te overschrijven, maar deze op een nieuwe sheet te plaatsen. Als je 2x deze procedure over dezelfde tabel laat lopen, kloppen je waardes niet meer...
 
Beetje late reactie, maar wou je toch nog bedanken voor de extra uitleg, is nu duidelijker :)
De code doet perfect zijn werk !
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan