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

TonRo

Gebruiker
Lid geworden
21 mrt 2005
Berichten
113
Geachte excell liefhebbers.

Ik heb het volgende probleempje.

In een cel staat bijv. het volgende "G00 X2.356 Y1.256" , nu wil ik de cijfers na de X en na de Y met 3 vermenigvuldigen hoe kan ik dit doen in een formule, want hij moet ook kijken of er een X danwel een Y aanwezig is want dat is niet altijd het geval.

Hoe kan ij dit oplossen ??

TonRo
 
Hi Tonro,

Code:
ALS(ISFOUT(DEEL(SUBSTITUEREN(A1;".";"");ALS(ISFOUT(VIND.SPEC("X";SUBSTITUEREN(A1;".";"");1));"";VIND.SPEC("X";SUBSTITUEREN(A1;".";"");1))+1;ALS(ISFOUT(VIND.SPEC("y";SUBSTITUEREN(A1;".";"");1));"";VIND.SPEC("y";SUBSTITUEREN(A1;".";"");1))-ALS(ISFOUT(VIND.SPEC("X";SUBSTITUEREN(A1;".";"");1));"";VIND.SPEC("X";SUBSTITUEREN(A1;".";"");1))-2)*3);"";DEEL(SUBSTITUEREN(A1;".";"");ALS(ISFOUT(VIND.SPEC("X";SUBSTITUEREN(A1;".";"");1));"";VIND.SPEC("X";SUBSTITUEREN(A1;".";"");1))+1;ALS(ISFOUT(VIND.SPEC("y";SUBSTITUEREN(A1;".";"");1));"";VIND.SPEC("y";SUBSTITUEREN(A1;".";"");1))-ALS(ISFOUT(VIND.SPEC("X";SUBSTITUEREN(A1;".";"");1));"";VIND.SPEC("X";SUBSTITUEREN(A1;".";"");1))-2)*3)

Code:
=ALS(ISFOUT(RECHTS(SUBSTITUEREN(A1;".";"");LENGTE(SUBSTITUEREN(A1;".";""))-ALS(ISFOUT(VIND.SPEC("y";SUBSTITUEREN(A1;".";"");1));"";VIND.SPEC("y";SUBSTITUEREN(A1;".";"");1)))*3);"";RECHTS(SUBSTITUEREN(A1;".";"");LENGTE(SUBSTITUEREN(A1;".";""))-ALS(ISFOUT(VIND.SPEC("y";SUBSTITUEREN(A1;".";"");1));"";VIND.SPEC("y";SUBSTITUEREN(A1;".";"");1)))*3)
 
Deze zou ook werken met de waarde in C5:

Code:
=LINKS(C5;VIND.SPEC("X";C5;1))&WAARDE(DEEL(C5;VIND.SPEC("X";C5;1)+1;VIND.SPEC("Y";C5;1)-VIND.SPEC("X";C5;1)-1))*3&" Y"&WAARDE(DEEL(C5;VIND.SPEC("y";C5;1)+1;LENGTE(C5)-VIND.SPEC("Y";C5;1)))*3
 
Hallo Joske2000,

Alvast bedankt voor je snelle reactie, maar als ik bij mij de formules plak krijg ik alleen maar een getal te zien en verder niets meer. Tot nu toe heb ik zelf de volgende formule gevonden:

Code:
=ALS(ISFOUT(VIND.ALLES("X";A4));A4;SUBSTITUEREN(SUBSTITUEREN(A4;DEEL(A4;VIND.SPEC("X";A4)+1;VIND.SPEC(" ";A4;VIND.SPEC("X";A4))-(VIND.SPEC("X";A4)+1));DEEL(A4;VIND.SPEC("X";A4)+1;VIND.SPEC(" ";A4;VIND.SPEC("X";A4))-(VIND.SPEC("X";A4)+1))*3);DEEL(A4;VIND.SPEC("Y";A4)+1;VIND.SPEC(" ";A4;VIND.SPEC("Y";A4))-(VIND.SPEC("Y";A4)+1));DEEL(A4;VIND.SPEC("Y";A4)+1;VIND.SPEC(" ";A4;VIND.SPEC("Y";A4))-(VIND.SPEC("Y";A4)+1))*3))

Deze formule kijkt of er een X in de cel voorkomt en kijkt dan hoeveel tekens er na de X tot de spatie komen. Dit vermenigvuldigd hij met 3. Ook de waarde na de Y vermenigvuldigd hij met 3, alleen lukt het mij nog niet in dezelfde formule aan te geven dat hij moet kijken of er een Y in de cel voorkomt, anders geeft hij een fout waarde.

En het is van belang dat er na de Y nog een spatie voorkomt anders krijg ik ook een foutwaarde.
 
en deze?
Code:
=LINKS(A1;VIND.SPEC("X";A1;1))&TEKST(DEEL(A1;VIND.SPEC("X";A1;1)+1;VIND.SPEC("Y";A1;1)-VIND.SPEC("X";A1;1)-2)*3;"#.###")&" Y"&TEKST(RECHTS(A1;LENGTE(A1)-VIND.SPEC("Y";A1;1))*3;"#.###")
 
Hallo helpers,

De antwoorden beginnen er op te lijken alleen stelt dat na de Y waarde ook nog een Z waarde voorkomt dus dat de Y niet het laatste is wat dan want nu loopt hij bij jullie oplossingen hier op vast.
 
Ik ga uit van de aangedragen info, zodoende heb ik geen rekening gehouden met een Z.
Betsaat het getal altijd uit 1 getal, een punt en nog 3 getallen???
 
Nee bandito bob, dat hoeft niet, het kan ook X0 zijn, vandaar dat ik op de eerstvolgende spatie ging zoeken zodat het niet van invloed is hoeveel cijfers gebruikt worden.

Ik zal nog enkel voorbeelden geven:

F200
G01 Z-0.05
F500
G01 X0.17448 Y0.667
G01 X0.52239
G01 X0.69687 Y0.5
G01 Y0.
WAIT=0.1
F200
G01 Z-0.1
F500
G01 Y0.5
G01 X0.52239 Y0.667
G01 X0.17448
G01 X0. Y0.5

In deze regels dienen de X en Y waarden met 3 te worden vermenigvuldigd.
 
Ik ga uit van de aangedragen info, zodoende heb ik geen rekening gehouden met een Z.
Betsaat het getal altijd uit 1 getal, een punt en nog 3 getallen???

Zoals reeds meerdere malen gemeld, een voorbeeldbestandje doet wonderen !
Dan moeten wij met zen allen niet liggen gokken !

Joske
 
Ik denk dat het wachten is totdat er iemand met vba code komt;)
...mag IK de 1e zijn? :D (plak de functie in een standaard module van de VBE)
Code:
Function XY(sOrg As String) 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
            varSplitsString(i) = Left(varSplitsString(i), 1) & (3 * CDbl(Mid(varSplitsString(i), 2, Len(varSplitsString(i)) - 1)))
        End If
    Next i

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

End Function
De syntax voor deze functie is: (voorbeeld) de te bewerken string in cel A1, dan in B1 de formule =XY(A1)

Groet, Leo
 
Laatst bewerkt:
...mag IK de 1e zijn? :D (plak de functie in een standaard module van de VBE)
Code:
Function XY(sOrg As String) 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
            varSplitsString(i) = Left(varSplitsString(i), 1) & (3 * CDbl(Mid(varSplitsString(i), 2, Len(varSplitsString(i)) - 1)))
        End If
    Next i

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

End Function
De syntax voor deze functie is: (voorbeeld) de te bewerken string in cel A1, dan in B1 de formule =XY(A1)

Groet, Leo
Heel mooi, alleen vergeet je een mogelijke Z-waarde.;)
 
Heel mooi, alleen vergeet je een mogelijke Z-waarde.;)
Heu??? Volgens mij bedoelde TonRo met z'n opmerking....
dat na de Y waarde ook nog een Z waarde voorkomt dus dat de Y niet het laatste is
....dat de door jullie zo mooi gemaakte formules eerst zoeken naar een X en dan naar een Y, maar dat er daarna nog een Z in de string kan staan.
Ik had persoonlijk niet het gevoel dat er óók nog iets met een andere letter gedaan moet worden door de opmerking in z'n initiele vraag....
nu wil ik de cijfers na de X en na de Y met 3 vermenigvuldigen
But... wie sjel sie...:)
't Is trouwens een kleine moeite om de extra letter toe te voegen in de functie. Gewoon een kwestie van deze regel...
Code:
If UCase(Left(varSplitsString(i), 1)) Like "[XY[B][COLOR="Blue"]Z[/COLOR][/B]]" Then
....met 1 letter uitbreiden.

Groet, Leo
 
Heu???
..........
't Is trouwens een kleine moeite om de extra letter toe te voegen in de functie. Gewoon een kwestie van deze regel...
Code:
If UCase(Left(varSplitsString(i), 1)) Like "[XY[B][COLOR="Blue"]Z[/COLOR][/B]]" Then
....met 1 letter uitbreiden.

Groet, Leo
Aha, ik had beide XY's aangepast in XYZ, en dat werkte niet....maar alleen die ene Z toevoegen werkt inderdaad prima.

Ik denk dat de TS met jouw code goed is geholpen, met- of zonder Z-waardes.
 
Hallo Ginger,

het lijkt me er goed uit te zien, alleen snap ik niet hoe ik het moet toepassen.

Jij vermeld VBE terwijl ik alleen VBA heb en als ik hier dan een module aanmaak en jou code erin plaats hoe krijg ik het dan aan de gang.

Trouwens sorry voor het niet meesturen van een voorbeeld bestand, dus bij deze.
In kolom B moet iedere cel die in kolom A staat komen staan en als er in kolom A een X of een Y waarde voorkomt moet dit met 3 of mogelijk een variabele vermenigvuldigd worden.

Bekijk bijlage Map1.rar
 
TonRo, VBE staat voor Visual Basic Editor. Die weet je duideljik te vinden. Maak een gewone module aan en plak daarin de functie.

Groet, Leo

P.s. ik zal 'm wel ff in je voorbeeldbestand plakken... (tot zo)
 
....Ghi... Je had 't al helemaal goed gedaan!:thumb:
Een UDF (user defined function) roep je net zoals standaard Excel functies aan. Dus in cel B1 gewoon =XY(A1)...

Groet, Leo
 
TonRo
of mogelijk een variabele vermenigvuldigd worden
...DAT kan óók...;) (2 kleine aanpassingen...)

Code:
Function XY(sOrg As String[COLOR="Blue"], Optional iGetal As Integer = 3[/COLOR]) 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
            varSplitsString(i) = Left(varSplitsString(i), 1) & ([COLOR="blue"]iGetal[/COLOR] * CDbl(Mid(varSplitsString(i), 2, Len(varSplitsString(i)) - 1)))
        End If
    Next i

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

End Function
Standaard gebruikt de functie dus 3 om te vermenigvuldigen, maar je mag óók er voor kiezen om een ander getal op te geven. De syntax voor bijvoorbeeld cel B4 is dan: =XY(A4;10)

Groet, Leo
 
Laatst bewerkt:
Hallo Leo,

Geweldig, dit is wat ik bedoel.

Alleen nog even een vraag. Wanneer ik in VBA iets maak dan kan ik dmv de F8 toets er stap voor stap door heen lopen om op die manier te kijken wat er gebeurd. Dat lukt me hier niet. Is het hier ook ergens mogelijk om er doorheen te stappen en zo niet zou je dan enigzins aan kunnen geven wat er gebeurd.

Ik ben bijv, al benieuwd waarom de "." vervangen moet worden. Ben zeer benieuwd naar je toelichting mocht je die nog willen geven.

Tot nu toe al veel geleerd want ik wist niet dat je op deze manier eigen fucties kunt maken.

Groet, Ton
 
TonRo, nog een 'ff snel antwoord' voor 't slapen...:o

Door een functie kan je inderdaad niet zomaar 'stappen'. Wat je wel kan doen is bijvoorbeeld voor de 1e echte regel code een keer in de kantlijn klikken (de rand). Je ziet dan een stip verschijnen. Als je dan in je worksheet in 1 van je functies 'entert', stopt de code bij die stip en kan je wél verder stappen...

Die punten moest ik vervangen omdat er met de amerikaanse getalnotatie wordt gewerkt in VBA. Ik maak er dus ff een europese notatie van om 'm daarna na bewerking weer te voorzien van punten ipv komma's. Er viel dus anders niet goed te vermenigvuldigen. Kijk maar 'ns met 'stappen' als je de regel ff als commentaar zet. Je ziet dan een waarde van 0.5 veranderen in 15 ipv je gewenste 1.5.

Groet, Leo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan