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

  • Onderwerp starter Onderwerp starter TonRo
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.
Hallo Leo,

Geweldig wat je gemaakt hebt, ik snap nog niet helemaal waar alle functies voor dienen, maar snap nog minder van het feit dat je al deze functies kent.

Alleen had ik nog een vraagje ??. Wanneer er bij mij een regel staat met bijv: G01 Y0.
dan vermenigvuldigd hij de waarde na de Y correct alleen de punt is dan verdwenen, is dit nog aan te passen dat die er dan toch komt staan.

De rest van de code probeer ik te achterhalen hoe het precies werkt.

Bij voorbaat dank.

Groet Ton
 
TonRo zei:
Alleen had ik nog een vraagje ??. Wanneer er bij mij een regel staat met bijv: G01 Y0.
dan vermenigvuldigd hij de waarde na de Y correct alleen de punt is dan verdwenen, is dit nog aan te passen dat die er dan toch komt staan
Ja hoor... Zo dan?
Code:
Function XY(sOrg As String, Optional iGetal As Integer = 3) As String
Dim i As Integer
Dim varSplitsString As Variant

    Application.Volatile

    sOrg = Replace(sOrg, ".", ",")
    
    varSplitsString = Split(sOrg, " ")
    
    For i = 0 To UBound(varSplitsString)
        If UCase(Left(varSplitsString(i), 1)) Like "[XY]" Then
            [COLOR="Blue"]If Right(varSplitsString(i), 1) <> "," Then[/COLOR]
                varSplitsString(i) = Left(varSplitsString(i), 1) & (iGetal * CDbl(Mid(varSplitsString(i), 2, Len(varSplitsString(i)) - 1)))
            [COLOR="blue"]End If[/COLOR]
        End If
    Next i

    XY = Replace(Join(varSplitsString, " "), ",", ".")

End Function

Groet, Leo
 
Laatst bewerkt:
Hallo Leo,

Na je laatste verandering slaat hij de vermenigvuldiging bij de regels eindigend op een punt over dus bijv. G00 Y1. blijft G00 Y1. terwijl het eigenlijk dan G00 Y3. moet worden. Bij de vorige functie werd het G00 Y3 (zonder punt)

Weet je hier nog een oplossing voor ??

Groeten,

Ton
 
Hallo Leo of andere deskundigen

Ik heb 2 weken geleden aangegeven dat het vermnigvuldigen goed werkte maar dat wanneer er een X of Y waarde stond met een cijfer en dan een punt dat dan na de vermenigvuldiging de punt weg was. Leo is toen met een wijziging in zijn fomule gekomen, maar dan slaat hij de regel over. De vermenigvuldiging moet wel uitgevoerd worden, maar de punt moet erbij.

Hopelijk weet toch iemand de oplossing.

Groeten
TonRo
 
Suggesties:
- zonder expliciet splitsingsteken gebruiken split en join de spatie
- de funktie mid neemt zonder lengte-argument de rest van de string mee
- een tekststring met getallen hoef je niet om te zetten naar een getal (met Val, Cdbl of Int) als die wordt vermenigvuldigd met een getal; er vindt 'impliciete' conversie plaats.

Een alternatief voor Like "[XY]" kan zijn:
Code:
If Instr("XY",UCase(Left(varSplitsString(i), 1)))>0 Then

Code:
Function XY(sOrg As String, Optional iGetal As Integer = 3) As String
  varSplitsString = Split(Replace(sOrg, ".", ","))
    
  For i = 0 To UBound(varSplitsString)
    If UCase(Left(varSplitsString(i), 1)) Like "[XY]" Then varSplitsString(i) = Left(varSplitsString(i), 1) & iGetal * Mid(varSplitsString(i), 2)
  Next

  XY = Replace(Join(varSplitsString), ",", ".")
End Function
 
Laatst bewerkt:
Hallo snb

De vermenigvuldiging gaat nu wel goed maar nu komt er weer geen puntje aan het einde staan, dus stel ik heb in een cel G00 Y1. staan dan maakt hij er G00 Y3 van maar het puntje ontbreekt dan, dus nu ben ik net zover als de formule bij Leo die ook perfect werkte alleen ook het puntje wegliet.

Groet
TonRo
 
Deze had je zelf ook wel kunnen bedenken

Code:
Sub tst()
    sq = Split(Replace(Replace([A1] & " ", ". ", "; "), ".", ","))
    For j = 0 To UBound(sq) - 1
        If InStr("XY", UCase(Left(sq(j), 1))) > 0 Then sq(j) = UCase(Left(sq(j), 1)) & 3 * Mid(Replace(sq(j), ";", ""), 2) & IIf(InStr(sq(j), ";") > 0, ".", "")
    Next
    x3 = Trim(Replace(Join(sq), ",", "."))
End Sub
 
Hallo snb,

Sorry, maar nu snap ik er niets meer van.

Je geeft aan dat ik het laatste ook wel zelf had kunnen bedenken maar ik snap de hele code niet eens dus hoe kan ik dan iets bedenken.

Trouwens nu heb ik je laatste code ingevoerd en nu werkt het helemaal niet meer
Jij werkt nu opeens met een sub ipv een function ??

Groeten
TonRo
 
Ik had zeker een te hoge pet van je op :)
Ik heb niets tegen enige zelfwerkzaamheid.

Ik zie de zin van Optional iGetal As Integer = 3 niet als er steeds met eenzelfde getal vermenigvuldigd moet worden. In plaats van iGetal heb ik nu maar gewoon 3 in de code gezet.
het argument sOrg heb ik gewijzigd in de voor mij gebruikelijke c0.

En het is nu eenmaal zo: code/grafieken en tabellen zijn geconcentreerde informatie.
Lezen gaat daarom 4 keer langzamer dan gewone tekst.
Het begrijpen van de code is wel essentieel.

Code:
Function XY(c0 As String,c1 as integer) As String
  sq = Split(Replace(Replace(c0 & " ", ". ", "; "), ".", ","))
  For j = 0 To UBound(sq) - 1
    If InStr("XY", UCase(Left(sq(j), 1))) > 0 Then sq(j) = UCase(Left(sq(j), 1)) & c1 * Mid(Replace(sq(j), ";", ""), 2) & IIf(InStr(sq(j), ";") > 0, ".", "")
  Next
  XY = Trim(Replace(Join(sq), ",", "."))
End Sub
 
Laatst bewerkt:
Hallo snb,

Zelfwerkzaamheid is zeker aanwezig en ik wil er ook alles aan doen om het te snappen.

Morgen terug op het werk ga ik proberen de code toe te passen en voor het getal 3 wat U noemt heb ik in het begin van deze vraag aangegeven dat dat een variabele moest zijn, vandaar dat Leo dit ook zo had ingebouwd. Maar zoals ik al aangaf ga ik dat morgen zelf proberen.

In elk geval tot nu toe bedankt voor de hulp.

Groeten,
Ton
 
Hallo snb,

Het begint er nu echt op te lijken, alleen er waren regels waar bijv. stond
waar bij er dan na doorlopen van de code
van werd gemaakt. Dit heb ik opgelost door tussen je For..Next de volgende regel erbij te plaatsen
Code:
If Right(sq(j), 1) = ";" Then sq(j) = Replace(sq(j), ";", ".")
. Alleen wat me nu nog opvalt is dat hij bijv. bij de volgende regel waar staat
uiteindelijk
geeft. Is hier nog iets voor te vinden.

Groeten,
Ton
 
Dan heb je niet exact deze code gebruikt:

Function XY(c0 As String,c1 ) As String
XY=c0
if instr(c0," X")+instr(c0," Y")>0 then
sq = Split(Replace(Replace(c0 & " ", ". ", "; "), ".", ","))
For j = 0 To UBound(sq) - 1
If InStr("XY", UCase(Left(sq(j), 1))) > 0 Then sq(j) = UCase(Left(sq(j), 1)) & c1 * Mid(Replace(sq(j), ";", ""), 2) & IIf(InStr(sq(j), ";") > 0, ".", "")
Next
XY = Trim(Replace(Join(sq), ",", "."))
End if
End function
 
Laatst bewerkt:
Hallo snb,

Sorry, maar nu werkt het helemaal niet. Hij begint al met de melding dat er aan het einde End Function moet staan ipv End sub en voor de rest geeft hij nu overal in alle regels

Ik zie nu even niet wat er fout is, je code is weer voor een gedeelte veranderd en ik zie niet wat hij gaat doen.

Groeten,

Ton
 
Vorige code aangepast. End Fuction is inderdaad wel logisch.
De test levert bij mij geen probleem op.

De formule in de cel moet zijn
=XY(A1;$C$1)

in A1 staat de tekst waarmee gewerkt moet worden.
in C1 staat de vermenigvuldigingsfaktor.

Ik hoop dat je mijn code knipt en plakt, want een typefoutje is zo gemaakt.
 
Laatst bewerkt:
Hallo snb,

dit werkt goed, alleen als ik met bijv 2.5 wil vermenigvuldigen dan doet hij het niet.

Groeten,

Ton
 
Vorige code aangepast.
Vermenigvuldig met 2,5 ipv. met 2.5
 
Hallo snb,

Dit is de oplossing, ontzettend bedankt voor je moeite en je geduld.

Groeten,

Ton
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan