[vba] 1 willekeurig karakter

Pagina: 1
Acties:
  • 138 views sinds 30-01-2008
  • Reageer

  • Bzzje
  • Registratie: November 2000
  • Laatst online: 24-06 14:55

Bzzje

Negeren is vooruitzien

Topicstarter
beetje moeilijke titel, moeilijk te omschrijven ook.

ik heb hier getallen (die nog als textobject staan in excel en later omgezet worden naar getallen (dat kan ik al))
maar nu moeten er een aantal waarden vervangen worden:
1: 5,000 --> 5000
2: 5,239 --> 5239
3: 2500,00 --> 2500

door een search/replace de komma weghalen werkt in voorbeeld 1 en 2 wel, maar maakt bij voorbeeld 3 250000 als resultaat.

eigenlijk moet er dus een zoek/vervang komen die van ",_ _ _ " --> "_ _ _" maakt
in sql is het teken voor 1 willekeurig karakter de _ (ten op zichte van de % voor elke willekeurige hoeveelheid aan karakters)

maar wat is de syntax daarvoor in vba?

Negeren is vooruitzien


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Je zult op de een of andere manier moeten aangeven wanneer het een decimaal scheidingsteken betreft, en wanneer het gaat om een scheidingsteken voor duizendtallen.
In de regional-settings van windows worden die karakters bepaald.
Adhv kan je misschien een replace of een andere actie ondernemen.

https://fgheysels.github.io/


  • sjroorda
  • Registratie: December 2001
  • Laatst online: 16:16
Probeer het eens met regular expressions (ervan uitgaande dat VBA die heeft :?). Mooiste en netste is natuurlijk de gebruiker wijzen op het verschil tussen een 'thousand seperator' en een decimaal, en daar dus 2 verschillende tekens voor te nemen.

Verwijderd

je kan ook eerst tsjekken waar de komma zich bevindt.. is dit minder dan 3 plaatsen van de rechter kant, dan moet je 'm niet vervangen, anders wel
sjroorda schreef op 30 oktober 2003 @ 14:00:
Probeer het eens met regular expressions (ervan uitgaande dat VBA die heeft :?). Mooiste en netste is natuurlijk de gebruiker wijzen op het verschil tussen een 'thousand seperator' en een decimaal, en daar dus 2 verschillende tekens voor te nemen.
vba heeft geen reguliere expressies, maar als je in de verwijzingen (extra -> verwijzingen) de "Microsoft VBscript bla bla" koppelt, kan je een RegExp object declareren.. dit is dus een object voor reguliere expressies

[ Voor 67% gewijzigd door Verwijderd op 30-10-2003 14:02 ]


  • Bzzje
  • Registratie: November 2000
  • Laatst online: 24-06 14:55

Bzzje

Negeren is vooruitzien

Topicstarter
@whoami: hij ziet het nog als een tekstveld, dus er is "nog" niets aan de hand met de regional settings. zodra ik naar getal omzet, vernuked hij het omdat iemand niet volgens de regional settings heeft ingevoerd (soms wel, soms niet).

@sjoorda: gebruiker is hier niet meer werkzaam

@tijz: da's op zich een optie...

Negeren is vooruitzien


  • Bzzje
  • Registratie: November 2000
  • Laatst online: 24-06 14:55

Bzzje

Negeren is vooruitzien

Topicstarter
dacht eerst nog om drie zoek/vervang achter mekaar te doen
1: ,00 --> #00
2: , --> komma weg
3: #00 --> ,00

maar met getallen als 5,000 (5000) veranderd dat dus niets

Negeren is vooruitzien


  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 01-08 16:55
Bzzje schreef op 30 oktober 2003 @ 14:05:
dacht eerst nog om drie zoek/vervang achter mekaar te doen
1: ,00 --> #00
2: , --> komma weg
3: #00 --> ,00

maar met getallen als 5,000 (5000) veranderd dat dus niets
Al geprobeer met mid$ ??

dus zoiets :

code:
1
2
3
If Mid$(Tekst_Getal,2,1) = "," then
     Tekst_Getal = Left$(Tekst_Getal,1) & Right$(Tekst_Getal,3)
End If


deze zet de tekst waarvan pos. 2 een komma is om in een tekst met de eerste van links en de eerste 3 van rechts. (uiteraard van rechts naar links voor de right$)

Je hebt dan de tekst, omzetten naar numeriek kun je al las ik :)

Genoeg andere ideeën hier, echter moet ik wel dan precies weten welke getallen wel of niet om een pasklare oplossing te bieden.

Speel sowieso maar eens met bovenstaande code, ik hoor wel hoe het afloopt.

[ Voor 13% gewijzigd door Bud_s op 30-10-2003 18:52 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
Bzzje schreef op 30 oktober 2003 @ 14:05:
dacht eerst nog om drie zoek/vervang achter mekaar te doen
1: ,00 --> #00
2: , --> komma weg
3: #00 --> ,00

maar met getallen als 5,000 (5000) veranderd dat dus niets
Het idee is goed, alleen doorzetten:
,000 -> .000
-> punt weg

Kan dus zelfs met een stap minder.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Bzzje
  • Registratie: November 2000
  • Laatst online: 24-06 14:55

Bzzje

Negeren is vooruitzien

Topicstarter
thx.
werkt

Negeren is vooruitzien

Pagina: 1