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

Aantal tekens aan het begin van de rij verwijderen

Status
Niet open voor verdere reacties.

robinvdveeken

Gebruiker
Lid geworden
7 sep 2010
Berichten
84
Geachte veelwetende :)

Ik loop weer eens tegen een probleempje aan:

Ik wil graag een aantal, mag één per keer zijn, tekens aan het begin van de cel verwijderen.

Het aan het einde verwijderen doe ik op deze manier:
Code:
Range("C" & Aantal_nr).Value = Left$(Range("C" & Aantal_nr).Value, Len(Range("C" & Aantal_nr).Value) - 6)

Iemand een idee hoe ik dit aan het begin kan doen?

Alvast bedankt.

Groeten,
Robin
 

Bijlagen

als het allemaal dezelfde tekens zijn (waar het op lijkt...)

Kan dit ook:
Code:
Sub tst()
    With Sheets("Blad1").Range("a5:a80")
        .Replace What:="=", Replacement:="", LookAt:=xlPart
    End With
End Sub
 
Waarom vba gebruiken, als het veel eenvoudiger zonder kan?
Je geeft helaas niet aan hoeveel tekens aan het begin verwijderd moeten worden.
Als het er 6 zijn, typ dan dit in B5 en kopieer naar beneden:

=RECHTS(A5;6)
 
Omdat volgens het voorbeeld de omzetting moet gebeuren in dezelfde cel en niet in een hulpkolom zie ik geen andere mogelijkheid dan VBA. Of je moet telkens het omzettingsproces handmatig intypen natuurlijk
 
Bedankt voor de reactie's

@ Paulva.. Hoe simpel het soms kan zijn (A)


Voor de duidelijkheid, deze code doet niets anders dan het eerste teken van alle cellen uit kolom E verwijderen.

Zie code:

Code:
Sub Eerste_teken_verwijderen()

    
Dim Laatste_entry As Integer
Dim X As Integer
Dim IO_nr As Integer


'init
IO_nr = 5
Laatste_entry = 5
X = 5


' zoeken naar hoeveel IO er is
While X < 2000
    If Range("E" & X) = "" Then
        Laatste_entry = X
        X = 2000
    Else
        X = X + 1
    End If
Wend
' einde zoeken naar aantal IOen

While Laatste_entry > IO_nr
    Range("E" & IO_nr).Value = Right$(Range("E" & IO_nr).Value, Len(Range("E" & IO_nr).Value) - 1)
    IO_nr = IO_nr + 1
Wend

End Sub
 
Robin,
die laatste macro is een wel erg omslachtige manier van verwijderen hoor.
Uitgaande van je voorbeeld waarin de gegevens in A5 beginnen, kun je daarvoor bv. ook dit gebruiken (en het kan nog korter):
Code:
Sub macro1()
Dim a As Integer, x As Integer
'Deze macro is geschreven door Zapatr
With Sheets("Blad1")
a = InputBox("Hoeveel tekens wil u aan de linkerzijde vervangen?")
For x = 5 To [a65536].End(xlUp).Row
If Len(Cells(x, 1)) >= 1 Then
Cells(x, 1).Value = Right(Cells(x, 1), Len(Cells(x, 1)) - a)
End If
Next x
End With
End Sub
 
Beste Zapatr,
Bedankt voor reactie. Ik heb hem iets aangepast.


Code:
Sub Verwijderen()
Dim a As Integer, x As Integer
'Deze macro is geschreven door Zapatr
'Aangepast op 9-11-2010 door Rve
With Sheets("IO_lijst")
    a = InputBox("Hoeveel tekens wil u aan de linkerzijde vervangen?")
    For x = 5 To [a65536].End(xlUp).Row
        If Len(Cells(x, 4)) >= a Then ' groter dan of gelijk aan a ipv 1
        Cells(x, 4).Value = Right(Cells(x, 4), Len(Cells(x, 4)) - a)
    Else
    MsgBox " Niet elke cel bevat" & a & "tekens. Uit deze cel word niets verwijderd." 'exeption handeling

End If
Next x
End With
End Sub

Toch werkt het nog niet perfect.
De eerste keer dat de macro word gedraait in een file voert deze het geheel alleen uit voor de eerste cel.

Groeten,
Robin
 
Beste Zapatr,
Bedankt voor reactie. Ik heb hem iets aangepast.
Toch werkt het nog niet perfect.
De eerste keer dat de macro word gedraait in een file voert deze het geheel alleen uit voor de eerste cel.
Als je een macro aanpast moet je het wel goed doen.
Je past hem nu toe op kolom 4, maar dan moet je natuurlijk ook [a65536] wijzigen in [d65536].
Waarschijnlijk is dat de reden van de fout.
 
Om het aantal lees-en schrijfbewerkingen te beperken (vooral handig bij grotere bereiken) sla je het bereik op in een array, voert de bewerkingen uit in het werkgeheugen en schrijf je de array in 1 keer terug naar je werkblad. Val je gebruiker ook niet lastig met Msgboxen als de lengte v/d cel niet voldoet aan de voorwaarde (stel je hebt 500 waarden en 450 voldoen niet aan je lengte kan je 450 Msgboxen wegklikken :shocked:)
Code:
Sub tst()
Dim a As Integer, x As Integer
With Sheets("IO_lijst")
    sq = .Range("D5:D" & .Cells(Rows.Count, 4).End(xlUp).Row)
    a = InputBox("Hoeveel tekens wil u aan de linkerzijde vervangen?")
        For x = 1 To UBound(sq)
            If Len(sq(x, 1)) >= a Then sq(x, 1) = Right(sq(x, 1), Len(sq(x, 1)) - a)
        Next
    .Cells(5, 4).Resize(UBound(sq)) = sq
End With
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan