Excel: String splitten ohne Makro?

  • #1
A

Ace_NoOne

Bekanntes Mitglied
Themenersteller
Dabei seit
07.04.2002
Beiträge
403
Reaktionspunkte
0
Ort
Germany
Hallo zusammen,

derzeit arbeite ich an einer Excel-Liste, die u.a. eine große Anzahl an Namen enthält. Allerdings stehen Vor- und Nachnamen in einer Zelle. Nun müssten diese Namen getrennt werden, sodass man eine Spalte für Vor- und eine für Nachnamen erhält.
Gibt es dafür eine vorgefertigte Funktion, sodass ich in die entsprechende Zelle nur...
Code:
=split(A:A;  ; 1)
... eingeben muss?
(Annahme: Spalte A enthält die Namen in der Form [Nachname][leerzeichen][Vorname]; das dritte Argument der Split-Funktion gibt den auszugebenden Teilstring an)

Mit Makros möchte ich nicht arbeiten, da ich da jedes Mal das entsprechende Makro starten müsste - es sei denn, ich könnte die Makro-Funktion wie oben definieren und dann auch so im Arbeitsblatt einbinden... !?

Im Voraus besten Dank!
 
  • #2
Hallo Ace_NoOne,

ich hab dir mal ein Beispiel zusammengestellt, wie du deine Splitt-Funktion als Makro erstellen  und dann als Formel weiter benutzen kannst.



Funktion (Makro) für die Verwendung in Formeln erstellen:

a) deine Excel-Arbeitsmappe öffnen
b) VB-Editor öffnen mit Alt+F11
c) mit rechter Maustaste im Projekt-Fenster  VBAProject(Dateiname) selektieren
   -> Einfügen -> Modul
  (es öffnet sich ein Modul-Fenster)
d) den Makro per copy and paste in dieses Modulfenster kopieren


Code:
Function GibNachname(r As Range) As String

  Dim s As String, s_Vorname As String, s_Nachname As String

  If r.Count <> 1 Then
    GibNachname = #RANGE DARF NUR EINE ZELLE UMFASSEN
    Exit Function
  End If
  
 ->kompletten Namen holen, Leerzeichen am Anfung und am Ende abschneiden
  s = Trim(r.Value)
  
  Call NamenZerlegen(s, s_Vorname, s_Nachname)
  
  GibNachname = s_Nachname
  
End Function
'******************************************************************
Function GibVorname(r As Range) As String

  Dim s As String, s_Vorname As String, s_Nachname As String

  If r.Count <> 1 Then
    GibVorname = #RANGE DARF NUR EINE ZELLE UMFASSEN
    Exit Function
  End If
  
 ->kompletten Namen holen, Leerzeichen am Anfung und am Ende abschneiden
  s = Trim(r.Value)
  
  Call NamenZerlegen(s, s_Vorname, s_Nachname)
  
  GibVorname = s_Vorname
  
End Function
'******************************************************************
Private Function NamenZerlegen(s As String, _
                               s_Vorname As String, _
                               s_Nachname As String)
  Dim pos As Long, pos1 As Long
  
 ->letztes Leerzeichen suchen
  pos = 0: pos1 = 0
  Do
    pos1 = InStr(pos1 + 1, s,  )
    If pos1 = 0 Then Exit Do
    pos = pos1
  Loop
  
 ->Leerzeichen vorhanden ?
  If pos = 0 Then
   ->nein -> Name = Nachname, kein Vorname
    s_Nachname = s
    s_Vorname = 
  Else
   ->ja -> Namen trennen
    s_Vorname = Left(s, pos - 1)
    s_Nachname = Right(s, Len(s) - pos)
  End If
End Function

e) Speichern mit Alt+S
f) VB-Editor schliessen mit Alt+Q

Jetzt steht dir GibVorname und GibNachname für Formeln zur Verfügung.




Formel erstellen:

Annahme:
  - der erste Name steht in A2
  - Vorname soll in B2 erscheinen
  - Nachname soll in C2 erscheinen

1) Gehe in die Zelle B2
2) schreibe ein Gleichheitszeichen
   (es wird in der Symbolleiste die Drop-Down-Auswahl für Funktionen angezeigt)
3) im der Drop-Down-Auswahl für Funktionen wählst du
   'weitere Funktionen...'
   (das Fenster->Funktionen einfügen' öffnet sich
4) im Fenster->Funktionen einfügen' wählst Du->Benutzerdefiniert'
   (im Fenster->Funktion:' GibVornamen
5) GibVornamen mit einem Doppelklick auswählen
   (Es öffnet sich ein Formel-Fenster der Funktion GibVornamen
    in dem der Bereich eingegeben werden muß.
6) Den Bereich A2 eingeben oder auf das Symbol zur Bereichsmarkierung
    klicken und den Bereich mit der Maus selektieren)
7) Ende-Button

Die Schritte 1 - 7 für GibNachnamen in Zelle C2 wiedeholen

Dann  B2 und C2 markieren und soweit Namen vorhanden sind, nach unten ziehen.

Fertig :)


Der Makro berücksichtigt, dass es mehrere Vornamen in einem Namen geben kann.
Er gibt jeweils den letzten durch Leerzeichen getrennten Namensteil als Nachnamen
und den Rest als Vornamen.

Wenn kein Leerzeichen enthalten ist, wird der Name als Nachname behandelt.

Gruß Matjes :)
 
  • #3
Wow, erstmal vielen Dank für die Mühe!

Allerdings bleibe ich beim Einbinden der Funktion hängen - obwohl deine Anleitung ja eigentlich idiotensicher ist: Bei mir erscheint keine derartige Auswahlliste (Schritt 2 bzw. 3), sodass ich auch keine benutzerdefinierten Funktionen einfügen kann!? Ich arbeite mit Excel 2002 (kann's am Montag auf der Arbeit aber mal mit Excel 2003 versuchen).
Ich habe versucht, die Funktion auf anderem Wege einzubinden, bin aber kläglich gescheitert (weder in der Excel- noch in der VBA-Hilfe konnte ich eine Antwort finden)... :(
 
  • #4
Hallo Ace_NoOne,

ist mein Bug  ;) Bin von meinen Einstellungen ausgegangen.

Die Drop-Down-Liste findest Du auf der Format-Symbolleiste.
(Haken vor Ansicht->Sybolleisten->Format)

Gruß Matjes :)
 
  • #5
Oh je, bin ich so dumm! ::)
Im Feld Funktion einfügen war ich ja bereits (und zwar seeehr lange... ;) ) - nur konnte ich dort keine Schaltfläche bzw. keinen Eintrag zum Einfügen einer benutzerdefinierten Funktion finden. Das ist aber auch nicht notwendig, denn deine Funktionen stehen in der Liste schon drin!
Allerdings hatte ich auch versucht, deine beiden Formeln per manueller Eingabe (also ohne Menüauswahl) einzubinden - da bekam ich dann aber den #NAME?-Fehler. Einen Tippfehler halte ich für ausgeschlossen, dazu habe ich's zu oft versucht (und zwar auch seeehr lange... :D ).

Naja, ist ja jetzt egal - es klappt jedenfalls perfekt! (besonders begeistert mich übrigens, dass bereits im ersten Release an die Unterstützung mehrerer Vornamen gedacht wurde :) )
 
Thema:

Excel: String splitten ohne Makro?

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.966
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben