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

omdraaien van voor en achternaam

Status
Niet open voor verdere reacties.

longron

Gebruiker
Lid geworden
2 apr 2007
Berichten
361
Beste alle,

ik wil onderstaande routine gebruiken om voor en achternaam om te draaien.
ik heb in de lijst echter een aantal lege cellen en cellen met alleen een voor of achternaam

Helaas loopt de routine vast op de lege cellen of op een cel met maar een naam.
( eigenlijk is de cel met een naam een kop. Bv verpleegkundige of artsen
in totaal heb ik in de routine 4 kopjes.

hoe kan ik dit het beste oplossen ?
Thanks

Ronald


Code:
Private Sub Omdraaien()
Dim sq, i, Sn


sq = Range(Range("A85"), Range("A234")) 
ReDim arr(1 To UBound(sq))  'declareren van de grootte voor de array
  For i = 1 To UBound(sq) - 1 'van 1 tot de laatste cel - 1 (1 tot laatste index - 1 van array)
       Sn = Split(sq(i, 1))  'splits de gegevens van sq(i, 1) door een spatie
      arr(i) = Sn(UBound(Sn)) & " " & Mid(sq(i, 1), 1, Len(sq(i, 1)) - Len(Sn(UBound(Sn))) - 1)
'array-index (i) = het laatste deel van split sn &" "& eerste delen van sq(i, 1)  = deel(sq(i,1),1,lengte van sq(i,1)-lengte laatse woord van split)
  Next i
Range("A85").Resize(UBound(sq) - 1) = Application.Transpose(arr) 'schrijf de array in één keer weg naar B2 met het aantal rijen diep van de lengte van ubound(sq)


End Sub
 
Kan dit wat zijn?
Code:
Private Sub Omdraaien()
Dim sq As Variant, i As Byte, j As Byte, Sn As Variant, arr As Variant

    sq = Range(Range("A85"), Range("A234"))
    ReDim arr(1 To UBound(sq))
    For i = LBound(sq) To UBound(sq)
        Sn = Split(sq(i, 1))
        If LBound(Sn) = UBound(Sn) Then
            arr(i) = LBound(Sn)
        Else
            For j = UBound(Sn) To LBound(Sn) Step -1
                If arr(i) = "" Then
                    arr(i) = Sn(j) & ", "
                Else
                    arr(i) = Sn(j) & " "
                End If
            Next j
        End If
    Next i
    Range("A85").Resize(UBound(sq) - 1) = Application.Transpose(arr)

End Sub

Lastig testen zonder bestandje :).
 
@ Octafish

Je hebt gelijk.

daarom hier bestand


hij loopt nu volgens mij vast op de lege cellen en op de cellen met inhoud als Psychiater en IBT/ADB

Ik hoor graag als je weet hoe het wel moet.

Groetjes
Ronald
 

Bijlagen

  • omdraaien.xlsm
    102,3 KB · Weergaven: 49
Probeer het maar eens.
Code:
Sub hsv()
Dim sv, s0 As String, i As Long
With Range("a85", Cells(Rows.Count, 1).End(xlUp))
sv = .Value
  For i = 1 To UBound(sv)
    s0 = Trim(sv(i, 1))
    If sv(i, 1) <> "" Then sv(i, 1) = Split(s0)(UBound(Split(s0))) & " " & Replace(s0, Split(s0)(UBound(Split(s0))), "")
  Next i
.Value = sv
End With
End Sub
 
Hai Harry,

Dit is zo ongeveer wat ik bedoel. De lege cellen blijven op hun plaats en hij loopt niet vast.
Echter gedraagd hij zich niet helemaal zoals ik wil.
Ik wil hem weer terug kunnen zetten zodat de voornamen weer eerst staan en hij heeft wat moeite met "van der", "de" "van" etc
Weet je hoe ik dat kan ondervangen?

thanks voor je adviezen en correcties.

Groetjes
Ronald
 
Maak een nieuw tabblad aan.
Code:
Sub Origineel() [COLOR=#ff0000]'Voer deze code een keer uit[/COLOR]
 Sheets("februari").Range("a85", Sheets("februari").Cells(Rows.Count, 1).End(xlUp)).Copy Sheets(2).Cells(1)
End Sub




Sub terug()
 Sheets(2).Range("a1", Sheets(2).Cells(Rows.Count, 1).End(xlUp)).Copy Sheets("februari").Range("a85")
End Sub
 
Als ik deze routines draai zet hij alles op de tweede sheet. maar verder gebeurd er volgens mij niet.

Echter zit ik ook wel met het tweede sheet.
Het is zoals je al zag een rooster programma met 12 maanden. 1 blad met gegevens van de werknemers., 1 blad met de dienstcodes en een blad met info over het programma en 1 blad om te printen.

Liefst wil ik binnen deze sheets blijven.

Thanks..
Ronald
 
Met de eerste code plaats je de originele data op het tweede blad, verder niets.

Wil je rouleren, voer je sub hsv() uit.
Wil je terug,.. neem je de sub terug()
 
oke, ja dan snap ik het.
Is dit niet mogelijk door bv de, ter van de etc etc te filteren en het daardoor binnen 1 sheet te houden?

Thanks,

Ronald
 
Beste alle.

hoe kan ik de routine zo aanpassen dat hij naar de actieve sheet kijkt en op de active sheet wegschrijft. bv naar kolom 100

Thanks voor het meedenken.

Ronald
 
Alles wat je doet in Vba zonder een verwijzing naar een blad is het actieve werkblad (activesheet).
 
Beste alle,

bovengenoemde routines werken prima..

Wat ik me echter afvraag is waarom ik de routine van het copieren van de originele namen niet gewoon vervang voor een routine die gewoon de namen in de eerste rij naar de andere rij kopieer.

dus:

Code:
Sub Origineel() 'Voer deze code een keer uit
 Sheets("februari").Range("a85", Sheets("februari").Cells(Rows.Count, 1).End(xlUp)).Copy Sheets(2).Cells(1)
End Sub

vervangen voor bv
Code:
    Range("A85:A234").Select
    Selection.Copy
    Range("D85").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Wat is het voordeel van de ene routine tov de andere?
Ik snap dat bij de eerste routine alleen cellen worden gecopieerd tot de laaste cel die in gebruik is. bij de tweede routine de hele range.
 
Je gebruikt select, dat selecteert het bereik en is trager.

Wat wil je bereiken?
 
oke, helder.

thanks.
De snelheid.

dus blijf bij de eerste routine.
Vroeg me alleen af wat het voordeel was.

Ik leer nog iedere dag.

Thanks,
 
Die code die je plaatste komt rechtstreeks van de recorder, en neemt een hoop overbodige dingen op.
 
Klopt. zeker.

en ik probeer wel routines zelf te schrijven of te herschrijven.
Maar soms is het me dus niet duidelijk wat het voordeel is.
 
Als je alleen waarden wil plakken dan zou ik ook geen copy gebruiken, maar...

Code:
Sub Origineel() 
dim sv
sv =  Sheets("februari").Range("a85", Sheets("februari").Cells(Rows.Count, 1).End(xlUp))
 Sheets(2).Cells(1).resize(ubound(sv)) = sv
End Sub
 
beste alle,

ik loop vast op de routine.
In eerste instantie worden de namen gecopieerd naar kolom DD. daarna worden bij de namen in de eerste kolom de voornaam en achternaam omgedraaid.
als ik de namen weer wil omdraaien. ( eerst voornaam en dan achternaam ) moet de routine weer worden gestart.

Echter plaatst de routine de namen niet meer terug.
Wat doe ik verkeerd?

Thanks voor het advies.

Ronald
 

Bijlagen

  • Test draaien.xlsm
    37,2 KB · Weergaven: 45
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan