Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Format Sozialversicherungsnummer mit Leerzeichen

Forumthread: Format Sozialversicherungsnummer mit Leerzeichen

Format Sozialversicherungsnummer mit Leerzeichen
27.04.2017 14:49:59
Jürgen
Hallo Excel-Forum,
ich habe ein kleines Formatierungsproblem.
Ich glaube das dies, wenn überhaupt möglich, nur unter VBA gelöst werden kann.
Mit dem Benutzerdefinierten Zahlenformat komme ich nicht weiter da es sich um Zahlen und Buchstaben handelt.
Im Prinzip mochte ich nichts anderes als die Sozialversicherungsnummer mit Leerzeichen darstellen.
Ich habe eine Tabelle "Grunddaten" in der in Spalte B die Nummer eingetragen wird.
Beispiel:
Eingetragen wird sie ohne Leerzeichen:
80121255B807
Ist es möglich, dass nach der Eingabe (mit Return) die Nummer sich wie folgt formatiert:
80 121255 B 807
Das soll nur in dieser Tabelle, bei der Spalte passieren.
Würde mich über jede Hilfe freuen.
Ich danke sehr im Voraus.
Grüße
Jürgen
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Format Sozialversicherungsnummer mit Leerzeichen
27.04.2017 14:59:09
yummi
Hallo Jürgen,

=VERKETTEN(LINKS(B1;2);" ";TEIL(B1;3;6);" ";TEIL(B1;9;1);" ";RECHTS(B1; 3))
wen dein Wert in B1 steht
Gruß
yummi
AW: Format Sozialversicherungsnummer mit Leerzeichen
27.04.2017 15:12:06
Jürgen
Hallo yummi,
vielen Danke für die Antwort.
Allerdings möchte ich vermeiden mit einer zweiten Zelle zu arbeiten.
Wenn möglich sollte sich die Nummer direkt mit Return (in der Zelle in der sie auch eingegeben wurde) formatieren.
Ist das möglich?
Grüße Jürgen
Anzeige
AW: Format Sozialversicherungsnummer mit Leerzeichen
27.04.2017 15:30:17
Jürgen
Sorry hatte vergessen die Frage noch auf offen zu stellen:
Hallo yummi,
vielen Danke für die Antwort.
Allerdings möchte ich vermeiden mit einer zweiten Zelle zu arbeiten.
Wenn möglich sollte sich die Nummer direkt mit Return (in der Zelle in der sie auch eingegeben wurde) formatieren.
Ist das möglich?
Grüße Jürgen
Anzeige
Hier in VBA
27.04.2017 15:37:28
Max2
Hallo,
hier in VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim newNumber As String
Dim i As Long
On Error Resume Next
If Target.Column = 2 Then
i = Len(Target.Value)
If i = 12 Then
newNumber = change_number(Target.Value)
Application.EnableEvents = False
Target.Value = newNumber
Application.EnableEvents = True
End If
End If
End Sub
Function change_number(ByVal number As String) As String
Dim i As Long
Dim newNumber As String
On Error Resume Next
i = Len(number)
newNumber = Left(number, 2) '80
newNumber = newNumber & " " & Mid(number, i - 4, 6) '121255
newNumber = newNumber & " " & Mid(number, i - 3, 1) 'B
newNumber = newNumber & " " & Right(number, 3) '807
change_number = newNumber
End Function

Anzeige
AW: Hier in VBA
27.04.2017 15:47:04
Jürgen
Hallo Max2,
vielen Dank für den VBA-Script.
Ich komme erst morgen dazu diesen zu testen.
Melde mich sofort morgen Früh.
Vielen Dank erst mal.
Grüße Jürgen
AW: Hier in VBA
27.04.2017 15:50:31
Jürgen
Konnte gerade doch noch testen.
Funktioniert toll.
Ich danke dir sehr.
Danke und Beste Grüße
Jürgen
Danke für Rückmeldung. Geschlossen...owT
27.04.2017 23:57:08
Max2

Anzeige
Das dürfte noch etwas zu früh sein,...
28.04.2017 08:25:54
Case
Hallo Max, :-)
... um das Thema zu beenden. ;-)
In Deiner Funktion ist ein Fehler drin.
newNumber = newNumber & " " & Mid(number, i - 4, 6)
Das ergibt mit der Beispielnummer "80121255B807" das hier - "5B807". ;-)
Da musst Du noch anpassen.
Als Alternative mit Regulären Ausdrücken würde es so gehen: ;-)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objMatch As Object
Dim objReg As Object
Dim lngCount As Long
Dim strTMP As String
On Error GoTo Fin
If Target.Column = 2 And Target.CountLarge = 1 Then
Application.EnableEvents = False
If Len(Target.Value) = 12 Then
Set objReg = CreateObject("VbScript.RegExp")
objReg.Pattern = "^(\d{2})(\d{6})(\w)(.+)"
Set objMatch = objReg.Execute(Target.Text)
With objMatch
If .Count > 0 Then
For lngCount = 0 To .Item(0).SubMatches.Count - 1
strTMP = strTMP & .Item(0).SubMatches(lngCount) & " "
Next lngCount
Target.Value = Left(strTMP, Len(strTMP) - 1)
End If
End With
End If
End If
Fin:
Set objMatch = Nothing
Set objReg = Nothing
Application.EnableEvents = True
If Err.number  0 Then MsgBox "Fehler: " & _
Err.number & " " & Err.Description
End Sub
Servus
Case

Anzeige
AW: Das dürfte noch etwas zu früh sein,...
28.04.2017 08:35:50
Jürgen
Guten Morgen Max, Guten Morgen Case,
das hatte ich schon angepasst ;-)
Vielen Dank für den Hinweis.
Aber ich hätte hier doch noch ein kleines Problem.
Im Vorfeld hatte ich in dieser Spalte eine Gültigkeitsprüfung hinterlegt, die vermeiden soll, dass zweimal eine gleiche Nummer eingegeben wird. Diese sieht so aus:
=ZÄHLENWENN($B:$B;B2)=1
Durch das Makro wird diese Prüfung umgangen. Kann man diese vielleicht mit einbauen?
Könntet ihr mir hier nochmal helfen?
Grüße Jürgen
Anzeige
Bezogen auf mein Beispiel...
28.04.2017 09:02:16
Case
Hallo Jürgen, :-)
... würde das so gehen: ;-)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objMatch As Object
Dim objReg As Object
Dim lngCount As Long
Dim strTMP As String
On Error GoTo Fin
If Target.Column = 2 And Target.CountLarge = 1 Then
Application.EnableEvents = False
If Len(Target.Value) = 12 Then
Set objReg = CreateObject("VbScript.RegExp")
objReg.Pattern = "^(\d{2})(\d{6})(\w)(.+)"
Set objMatch = objReg.Execute(Target.Text)
With objMatch
If .Count > 0 Then
For lngCount = 0 To .Item(0).SubMatches.Count - 1
strTMP = strTMP & .Item(0).SubMatches(lngCount) & " "
Next lngCount
Target.Value = Left(strTMP, Len(strTMP) - 1)
End If
End With
End If
If Not Application.WorksheetFunction.CountIf _
(Columns(2), Target.Value) > 1 Then
Else
Target.ClearContents
MsgBox "Doppelt - wurde gelöscht!"
End If
End If
Fin:
Set objMatch = Nothing
Set objReg = Nothing
Application.EnableEvents = True
If Err.number  0 Then MsgBox "Fehler: " & _
Err.number & " " & Err.Description
End Sub
Servus
Case

Anzeige
Vielen Dank
28.04.2017 09:55:36
Jürgen
Klappt klasse.
Hat einen Moment gedauert bis ich mich durchgefuchst habe.
Nochmals vielen Dank Case und auch an Max.
Ein schönes langes Wochenende.
Jürgen
Also das mit...
28.04.2017 10:08:54
Case
Hallo Jürgen, :-)
... dem...
If Not Application.WorksheetFunction.CountIf...
... geht natürlich ohne "Else". Hatte das nur aus einem anderen Code schnell reinkopiert. ;-)
Dir auch ein schönes langes Wochenende. \O/
Servus
Case

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Sozialversicherungsnummer formatieren mit Leerzeichen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu dem Arbeitsblatt, in dem du die Sozialversicherungsnummer formatieren möchtest.

  2. Öffne den VBA-Editor: Drücke ALT + F11.

  3. Füge ein neues Modul ein: Rechtsklick auf "VBAProject (dein Dokument)" -> Einfügen -> Modul.

  4. Kopiere den folgenden VBA-Code und füge ihn in das Modul ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim objMatch As Object
       Dim objReg As Object
       Dim lngCount As Long
       Dim strTMP As String
       On Error GoTo Fin
       If Target.Column = 2 And Target.CountLarge = 1 Then
           Application.EnableEvents = False
           If Len(Target.Value) = 12 Then
               Set objReg = CreateObject("VbScript.RegExp")
               objReg.Pattern = "^(\d{2})(\d{6})(\w)(.+)"
               Set objMatch = objReg.Execute(Target.Text)
               With objMatch
                   If .Count > 0 Then
                       For lngCount = 0 To .Item(0).SubMatches.Count - 1
                           strTMP = strTMP & .Item(0).SubMatches(lngCount) & " "
                       Next lngCount
                       Target.Value = Left(strTMP, Len(strTMP) - 1)
                   End If
               End With
           End If
       End If
    Fin:
       Set objMatch = Nothing
       Set objReg = Nothing
       Application.EnableEvents = True
       If Err.number <> 0 Then MsgBox "Fehler: " & Err.number & " " & Err.Description
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Gib die Sozialversicherungsnummer in die Zelle der Spalte B ein (z. B. 80121255B807). Nach dem Drücken der Enter-Taste wird die Nummer automatisch formatiert: 80 121255 B 807.


Häufige Fehler und Lösungen

  • Fehler: Nichts passiert nach der Eingabe

    • Lösung: Stelle sicher, dass der VBA-Code korrekt eingefügt wurde und dass du ihn im richtigen Arbeitsblatt platziert hast. Der Code funktioniert nur in der Spalte B.
  • Fehler: Falsches Format

    • Lösung: Überprüfe, ob die eingegebene Nummer genau 12 Zeichen lang ist. Andernfalls wird die Formatierung nicht angewendet.

Alternative Methoden

Anstelle von VBA kannst du die Sozialversicherungsnummer auch mit einer Formel formatieren, jedoch wird dies eine zusätzliche Zelle erfordern. Verwende die folgende Formel, wenn die Nummer in Zelle B1 steht:

=VERKETTEN(LINKS(B1;2);" ";TEIL(B1;3;6);" ";TEIL(B1;9;1);" ";RECHTS(B1;3))

Diese Methode eignet sich eher für Benutzer, die keine VBA-Kenntnisse haben.


Praktische Beispiele

  • Beispiel 1: Gebe die Nummer 80121255B807 in Zelle B2 ein. Nach Drücken von Enter wird sie als 80 121255 B 807 angezeigt.
  • Beispiel 2: Stelle sicher, dass beim Testen der Formatierung keine Leerzeichen oder anderen Zeichen in der Nummer enthalten sind.

Tipps für Profis

  • Wenn du häufig mit dem Format der Sozialversicherungsnummer arbeitest, kannst du den VBA-Code anpassen, um zusätzliche Validierungen einzufügen, die sicherstellen, dass die Eingaben den gewünschten Kriterien entsprechen.
  • Nutze Reguläre Ausdrücke für komplexere Validierungen, falls notwendig, um sicherzustellen, dass das Format der Sozialversicherungsnummer konsistent bleibt.

FAQ: Häufige Fragen

1. Kann ich den Code auch in anderen Spalten verwenden?
Ja, du kannst die Spaltennummer im Code anpassen, um die Funktion für andere Spalten zu aktivieren.

2. Was passiert, wenn ich eine doppelte Nummer eingebe?
Das VBA-Skript kann so angepasst werden, dass es überprüft, ob die eingegebene Nummer bereits existiert und dir eine Warnmeldung anzeigt.

3. Ist dieser Code in allen Excel-Versionen anwendbar?
Ja, der Code sollte in den meisten aktuellen Excel-Versionen funktionieren, solange die VBA-Funktionalität unterstützt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige