Excel VBA-Skript zur Anonymisierung von Daten
Dieses VBA-Skript für Microsoft Excel ermöglicht die einfache Anonymisierung sensibler Daten in Tabellen. Der Benutzer wählt eine Spalte sowie Start- und Endzeile aus und bestimmt das gewünschte Format (Text, Datum, Währung oder Zahl). Anschließend ersetzt das Skript die vorhandenen Werte durch zufällig generierte Inhalte im gewählten Format – ideal für Schulungsdaten, Testumgebungen oder Datenschutzkonzepte. Der Code ist vollständig dokumentiert und sofort einsatzbereit.
Ablauf des Skriptes
Vorbereitung
Das Script unter Entwicklertools, VBA-Skript einfügen
Ablauf in Excel – am Beispiel dieser Tabelle:

Nun das Skript über Makros aufrufen:

Nun die Spaltenadresse eingeben, in unseren Beispiel nehmen wir den Namen also Spalte B

Als nächstes die Startzeile eingeben um Überschriften nicht zu verändern. Wir beginnen bei der Zeile 2

Mit der Endzeile wird die letzte zu bearbeitende Zeile eingegeben. In unseren Beispiel nehmen wir nur die ersten 5 Einträge, also Zeile 7.

Als letzte Eingabe wird das Format gewählt, in unseren Beispiel Text

Die gelb markierten Werte wurden nun anonymisiert.
Prompt um das Skript selbst zu erzeugen
Erstelle ein VBA-Skript für Excel, das die Anonymisierung von Daten unterstützt. Die Funktionsweise soll wie folgt sein:
Der Benutzer wird interaktiv aufgefordert, folgende Informationen einzugeben:
Den Buchstaben der Spalte, in der anonymisiert werden soll.
Die Startzeile und Endzeile für den zu anonymisierenden Bereich.
Das gewünschte Datenformat für die Ersetzung:
Text: Zufällige Zeichenfolgen
Datum: Zufällige Datumswerte im realistischen Bereich
Währung: Zufällige Geldbeträge mit zwei Dezimalstellen
Zahlen: Zufällige Ganzzahlen
Das Skript ersetzt anschließend in der gewählten Spalte und im definierten Zeilenbereich die Originalwerte durch entsprechend formatierte Zufallswerte, die dem gewählten Datentyp entsprechen.
Bitte schreibe sauberen, kommentierten VBA-Code, der robust und benutzerfreundlich ist.
VBA-Skript
Hinweis: Der Einsatz dieses Skriptes erfolgt auf eigene Gefahr!
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Datum 15.05.2025 | BKS | www.experte.org
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' AnonymisiereSpalteMitZufallswerten
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Diese Funktion anonymisiert Daten in einer angegebenen Spalte, indem sie von der Start- bis zur Endzeile Zufallswerte einträgt. Das Format (Text, Datum, Währung oder Zahl) wird vom Benutzer gewählt.
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Parameter
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' spaltenAdresse | String | 3 | Adresse der zu anonymisierenden Spalte (z. B. "B")
' startZeile | Long | 10 | Erste Zeile des Datenbereichs
' endZeile | Long | 10 | Letzte Zeile des Datenbereichs
' formatTyp | String | 10 | Gewähltes Format für Zufallswerte ("Text", "Datum", "Waehrung", "Zahl")
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Variablen
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' i | Long | 10 | Zählvariable für die Schleife
' zufallsText | String | 20 | Zufälliger generierter Text
' zufallsZahl | Double | 15 | Zufällig generierte Zahl
' zufallsDatum | Date | 10 | Zufällig generiertes Datum
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Versionsverlauf
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' 15.05.2025 | Version 1 | Scripterstellung
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sub AnonymisiereSpalteMitZufallswerten()
Dim spaltenAdresse As String
Dim startZeile As Long
Dim endZeile As Long
Dim formatTyp As String
Dim i As Long
Dim zufallsText As String
Dim zufallsZahl As Double
Dim zufallsDatum As Date
' Eingaben vom Benutzer einholen
spaltenAdresse = InputBox("Geben Sie die Spaltenadresse ein (z.B. B):", "Spalte eingeben")
startZeile = CLng(InputBox("Geben Sie die Startzeile ein:", "Startzeile"))
endZeile = CLng(InputBox("Geben Sie die Endzeile ein:", "Endzeile"))
formatTyp = InputBox("Geben Sie das gewünschte Format ein (Text, Datum, Waehrung, Zahl):", "Formatwahl")
' Schleife durch die Zellen
For i = startZeile To endZeile
Select Case LCase(formatTyp)
Case "text"
zufallsText = Chr(65 + Int(Rnd() * 26)) & Chr(65 + Int(Rnd() * 26)) & CStr(Int(Rnd() * 1000))
Cells(i, spaltenAdresse).Value = zufallsText
Case "datum"
zufallsDatum = DateSerial(2000 + Int(Rnd() * 25), 1 + Int(Rnd() * 12), 1 + Int(Rnd() * 28))
Cells(i, spaltenAdresse).Value = zufallsDatum
Cells(i, spaltenAdresse).NumberFormat = "DD.MM.YYYY"
Case "waehrung"
zufallsZahl = Round(Rnd() * 10000, 2)
Cells(i, spaltenAdresse).Value = zufallsZahl
Cells(i, spaltenAdresse).NumberFormat = "#,##0.00 €"
Case "zahl"
zufallsZahl = Int(Rnd() * 10000)
Cells(i, spaltenAdresse).Value = zufallsZahl
Case Else
MsgBox "Unbekanntes Format. Bitte verwenden Sie: Text, Datum, Waehrung oder Zahl.", vbCritical
Exit Sub
End Select
Next i
MsgBox "Anonymisierung abgeschlossen!", vbInformation
End Sub