Zufallszeichen an Zufallsposition ersetzen

Zugegeben, das hört sich etwas kryptisch an, was da in der Überschrift steht. Aber dort sind nun einmal kurze, knackige Texte gefragt. Gemeint ist folgendes: Eine Zelle enthält einen beliebigen Text, genauer gesagt ein Wort. In diesem Wort soll an beliebiger, zufällig bestimmter Position ein Zeichen durch ein wiederum zufällig gewähltes anderes Zeichen ersetzt werden. Die Groß- Kleinschreibung soll erhalten bleiben und es sollen alle Buchstaben des deutschen Alphabets genutzt werden.

Wir bieten Ihnen hier eine kleine VBA-Lösung an, die das gut löst. Voraussetzung ist, dass wirklich nur das eine Wort ohne Satzzeichen in der Zelle steht. Ein Doppelklick auf die Zelle wird sofort ein beliebiges/zufälliges Zeichen ändern:

Option Explicit
Option Base 1

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   Dim Lg As Integer, Pos As Integer, Zeichen As String, Ersatz As String
   Dim aUcase(29), aLcase(30)
   Dim i As Integer
   
   If VarType(Target) <> 8 Then
      'Eventuell eine Fehlermeldung, dass es kein Text ist ...
      Cancel = True
      Exit Sub
   End If
   
   'Arrays mit Buchstaben füllen
   For i = 65 To 90
      aUcase(i - 64) = Chr(i)
   Next i
   aUcase(27) = "Ä"
   aUcase(28) = "Ö"
   aUcase(29) = "Ü"
   For i = 97 To 122
      aLcase(i - 96) = Chr(i)
   Next i
   aLcase(27) = "ä"
   aLcase(28) = "ö"
   aLcase(29) = "ü"
   aLcase(30) = "ß"
   
   'Und ersetzen
   Lg = Len(Target)
   Pos = WorksheetFunction.RandBetween(1, Lg)
   Zeichen = Mid(Target, Pos, 1)
   If Zeichen = UCase(Zeichen) Then 'Großbuchstaben ersetzen
      Do While True
         Ersatz = aUcase(WorksheetFunction.RandBetween(1, 29))
         If Ersatz <> Zeichen Then Exit Do
      Loop
   Else  'Kleinbuchstaben
      Do While True
         Ersatz = aLcase(WorksheetFunction.RandBetween(1, 30))
         If Ersatz <> Zeichen Then Exit Do
      Loop
   End If
   Target = Left(Target, Pos - 1) & Ersatz & Right(Target, Lg - Pos)
   Cancel = True
End Sub

Hinweis: Führende oder nachgestellte Leerzeichen werden hier nicht abgefangen, sie werden als ganz normale Zeichen gewertet und bei entsprechender Position mit einem Zeichen des Alphabets ersetzt.

Mit etwas Programmier-Erfahrung können Sie den Code auch so umändern, dass das Ersetzen in allen Zellen eines definierten Bereichs bzw. einer Markierung erfolgt.

▲ nach oben …

Dieser Beitrag wurde unter Code-Schnipsel, Text, Verschiedenes abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.