Microsoft Excel

Herbers Excel/VBA-Archiv

Kodieren innerhalb einer Zeichenfolge

Betrifft: Kodieren innerhalb einer Zeichenfolge von: hannes
Geschrieben am: 23.08.2007 23:13:21

Hallo,

ich möchte speziell definierte, in einer Zelle eingegebene Zahlen und Buchstaben durch andere spezielle Buchstaben ersetzen, also so etwas wie eine Umkodierung basteln.

Dies soll einer Vokabelliste dienen und mir das Eintippen erleichtern. Für ein „ß“ möchte ich z.B die Kombination „s1“ eintippen und dies soll durch „ß“ in einer anderen Zelle ersetzt werden.

So möchte ich aus einer Matrix (oder einfachen Tabelle), in der spaltenweise zahlen von 1 bis n und zeilenweise Buchstaben aufgetragen sind, aus deren Kombination jeweils neue Buchstaben einfügen lassen.

Ein weiteres Problem ist, dass die Buchstabenkombinationen im Text auftauchen und wiederholt vorkommen können. Tippe ich also in eine Zelle „Die Fus1ba2der“ ein, soll in einer Matrix (oder Tabelle) nach der Kombination „s1“ und „a2“ gesucht werden (z.B. C4&E3, wenn C4=s und E3=1) und dann für „s1“ ein „ß“ ausgegeben bzw. für „a2“ ein ä ersetzt werden (also das, was vorher in die Matrix eingetragen wurde).

Wie stelle ich das an?
Erste Versuche mit Wechseln und SVerweis bringen mich ein wenig näher, doch bekomme ich keine Wiederholungen rein.

Grüße
Hannes

Bsp.:



Zelle A1: Fus1ba2der a2rgern mich
Zelle A2: HausTue3r


Kodierungstabelle:

      1    2    3
S     ß    ê    @
A     €    ä    ZeichenXYZ
UE    î    í    ü


Ergebnis
Zelle B1: Fußbäder ärgern mich
Zelle B2: HausTür


  

Betrifft: AW: Kodieren innerhalb einer Zeichenfolge von: Daniel
Geschrieben am: 24.08.2007 00:26:37

Hi
meines wissen nach geht das mit Formeln nur über geschachtelte WECHSEL-Funktionen, die müssten dann auch mit den Mehrfach-Vorkommenden Zeichen zurecht kommen.
Du hast dann halt ein Formel-Monster mit 9x Wechseln oder mehr.
Hier jetzt mal für 3

=WECHSELN(WECHSELN(WECHSELN(A1;"a1";"ä");"o1";"ö");"u1";"ü")


oder halt selbst ne kleine Funktion Schreiben:

Public Function WechselnMulti(Text As String) As String
Text = Replace(Text, "a1", "ä")
Text = Replace(Text, "o1", "ö")
Text = Replace(Text, "u1", "ü")
'...
'...
WechselnMulti = Text
End Function


dann wird etwas übersichlicher

Gruß, Daniel


  

Betrifft: AW: Kodieren innerhalb einer Zeichenfolge von: {Boris}
Geschrieben am: 24.08.2007 09:36:48

Hi Hannes,

ein Kombination aus Change-Ereignis und UDF ist hier wahrscheinlich zielführend.
Leg Dir irgendwo in der Mappe Deine Kodierungstabelle an - im Beispiel ist es Tabelle1!H1:K4. Diese ist natürlich erweiterbar.

Dann das Klassenmodul der entsprechenden Tabelle:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
  If .Column = 1 And .Count = 1 Then 'wirkt nur in Spalte A
    If .Value <> "" Then
      On Error GoTo Uups
      Application.EnableEvents = False
      .Value = Aendern(.Value, [tabelle1!h1:k4]) 'Tabelle1!H1:K4 ist die Matrix
    End If
  End If
End With
Uups:
Application.EnableEvents = True
End Sub




Und in ein allgemeines Modul:

Option Explicit

Function Aendern(S As String, Bereich As Range) As String
Dim x As Long, y As Long
For x = 2 To Bereich.Columns.Count
  For y = 2 To Bereich.Rows.Count
    S = Replace(S, Bereich(y, 1) & Bereich(1, x), Bereich(y, x))
  Next y
Next x
Aendern = S
End Function



Groß-und kleinschreibung wird hierbei im übrigen unterschieden.

Grüße Boris


 

Beiträge aus den Excel-Beispielen zum Thema "Kodieren innerhalb einer Zeichenfolge"