Excel Buchstabenkombination z.B. "ABC" durch Zahlenkombination z.B."1,2,3" ersetzen

  • #1
Q

Quattroaner

Neues Mitglied
Themenersteller
Dabei seit
29.07.2013
Beiträge
2
Reaktionspunkte
0
Hallo, ich habe folgendes Problem:
Ich muss eine Tabelle machen in der man eine Buchstabenkombination eingibt, die mir dann eine Zahlenkombination ausgibt.
Zum Beispiel:
Ich gebe im Feld A1 "ABCD" ein, dann wird im Feld A2 "12,34" ausgegeben!

Der Code soll dann so ähnlich sein:
A=1
B=2
C=3
D=4
E=5
F=6
G=7
H=8
I=9
J=0

Vielen Dank schonmal im vorraus!
 
  • #2
Aloha,

ich weiß nicht, ob da jemand von den Überflieger-Excel-Cracks eine fuchsige (und vor allem kurze) Formel für hat... ich würde es auf die Schnelle mit einem Makro etwa so lösen:



Code:
Function doDaDecode(Eingabe As String) As String

   Dim Buchstabe As String
   Dim i As Integer
   Dim Ausgabe As String
   Dim AusgabeMitKomma As String
   Dim daCode As Integer
   Dim daPos As Integer
   
   Dim TransTableIN As String
   Dim TransTableOUT As String
   
   If Not (Len(Eingabe) > 10) Then                    [COLOR=#008000] 'Eingabe darf nicht länger als max. 10 Zeichen sein...[/COLOR]
  [COLOR=#008000] '----------------------------------------------------------------------------------------------------------[/COLOR]
      If (Eingabe <> "") Then                          [COLOR=#008000]'wenn überhaupt eine Eingabe existiert[/COLOR]
      
        [COLOR=#008000] ' "Übersetzungstabelle"[/COLOR]
         TransTableIN = "ABCDEFGHIJ"
         TransTableOUT = "1234567890"
      
         Eingabe = UCase(Eingabe)                   [COLOR=#008000]  'wandelt ggf. Kleinbuchstaben in Großbuchstaben um[/COLOR]
         Ausgabe = ""
    
         For i = 1 To Len(Eingabe)
            Buchstabe = Mid$(Eingabe, i, 1)         [COLOR=#008000]  'nächster Buchstabe des Eingabe-Strings[/COLOR]
            daPos = InStr(1, TransTableIN, Buchstabe)[COLOR=#008000] 'Position des Buchstabens in TransTableIN[/COLOR]
            daCode = Mid$(TransTableOUT, daPos, 1)   [COLOR=#008000] 'entsprechende Position in TransTableOUT[/COLOR]
            Ausgabe = Ausgabe & daCode               [COLOR=#008000] 'schrittweiser Aufbau der Ausgabe[/COLOR]
         Next i
      
       [COLOR=#008000]  'baue Komma an drittletzter Stelle ein[/COLOR]
         AusgabeMitKomma = Mid(Ausgabe, 1, Len(Ausgabe) - 2) & _
                           "," & _
                           Mid(Ausgabe, Len(Ausgabe) - 1, 2)
         
         'Rückgabewert der Funktion
         doDaDecode = AusgabeMitKomma
      
      
      Else                                          [COLOR=#008000]  'wenn gar keine Eingabe existiert...[/COLOR]
         
         'Rückgabewert der Funktion
         doDaDecode = ""                              [COLOR=#008000] '...gebe leeren String zurück[/COLOR]
      
      End If
   '----------------------------------------------------------------------------------------------------------
   Else                                                [COLOR=#008000]'Wenn die Eingabe länger als 10 Zeichen ist...[/COLOR]
      
       doDaDecode = "Eingabe ungültig!"             [COLOR=#008000]   '... Fehlermeldung ausgeben[/COLOR]
      
   End If
   

End Function


Dazu in einer Excel-Tabelle per ALT-F11 (von mir aus auch über die Menüs) den VB-Editor starten,
ein neues "Modul" anlegen...


Anhang anzeigen 20130729-1911_-_screenshot.001.png

... und obigen Code (Function doDaDecode usw.) reinkopieren.


In B1, B2, B3 usw. schreibst du dann wie im Screenshot zu sehen ist, den Funktionsaufruf für das Makro à la

=doDaDecode(A1)


Das Makro ignoriert Groß-/Kleinschreibung der Buchstaben in der Spalte A und überprüft zudem, ob die Zeichenkette nicht länger als 10 Zeichen (A-J) ist.

Anhang anzeigen 20130729-1901_-_screenshot.001.png
 
  • #3
Super, Danke für die schnelle Antwort! Das ist genau so wie ich das haben wollte:smug:
 
  • #4
:xyxthumbs:
 
  • #5
Nur ein paar ergänzende Hinweise: 1. was passiert, wenn ein Input-Zeichen kein A..J ist (entweder ignorieren oder Fehlermeldung) 2. Wenn weniger als drei Buchstaben eingegeben werden, funktioniert das Einfügen des Kommas nicht richtig. Man muss dann den Ausgabestring mit Vornullen erweitern, bevor man das Komma einfügt.
 
  • #6
hkdd schrieb:
1. was passiert, wenn ein Input-Zeichen kein A..J ist (entweder ignorieren oder Fehlermeldung)

Probier es doch einfach aus.
In der Ziel-Zelle erscheint der Fehler "#WERT!".

Ich bitte vielmals um Entschuldigung, daß ich nicht alle möglichen Eingabe-Eventualitäten durch Plausis abgefangen habe.
Ich habe mich für diese spontane Lösung auf das Abfangen von...
· Unterschieden in der Groß-/Kleinschreibung
· Eingaben > 10 Zeichen
· Eingaben leerer Werte
...beschränkt.
Als Gedanken-Anstoß sollte das denke ich reichen.
Wenn ich einen bezahlten Programmier-Auftrag für eine FiBu-Software erhalte, geb ich mir mehr Mühe.
Versprochen.

Aber anhand der vorliegenden Plausis für Eingaben > 10 Zeichen und leere Werte darfst du den Quellcode gerne erweitern.

hkdd schrieb:
2. Wenn weniger als drei Buchstaben eingegeben werden, funktioniert das Einfügen des Kommas nicht richtig. Man muss dann den Ausgabestring mit Vornullen erweitern, bevor man das Komma einfügt.

siehe oben
 
Zuletzt bearbeitet:
  • #7
Es war ja nur ein Hinweis und nicht als Kritik gemeint.
 
  • #8
Na gut. :biggthumpup:

Der Vollständigkeit halber habe ich die o.g. Plausibilitätsprüfungen noch eingebaut:


Code:
Function doDaDecode(Eingabe As String) As String

   Dim Buchstabe As String
   Dim CheckLen As Integer
   Dim validChar As Boolean
   Dim i As Integer
   Dim Ausgabe As String
   Dim AusgabeMitKomma As String
   Dim daCode As Integer
   Dim daPos As Integer
   
   Dim TransTableIN As String
   Dim TransTableOUT As String
   
   
   CheckLen = Len(Eingabe)                             [COLOR=#008000] 'Voraussetzung: 2 < Eingabelänge < 11[/COLOR]
   Select Case CheckLen
      Case 0                                           [COLOR=#008000] 'Es sei denn, die Eingabe ist leer,[/COLOR]
         Ausgabe = ""                                  [COLOR=#008000] ' ...dann gib auch leeren String zurück[/COLOR]
         doDaDecode = Ausgabe                    [COLOR=#008000]'Rückgabewert der Funktion[/COLOR]
         Exit Function                                 [COLOR=#ff0000] 'ABBRUCH[/COLOR]
      Case 1 To 2                                      [COLOR=#008000] 'Eingabe zu kurz[/COLOR]
         Ausgabe = "Eingabe zu kurz (3-10)!"
         doDaDecode = Ausgabe                    [COLOR=#008000]'Rückgabewert der Funktion[/COLOR]
         Exit Function                                  [COLOR=#ff0000]'ABBRUCH[/COLOR]
      Case 3 To 10                                     [COLOR=#008000] 'Eingabelänge OK[/COLOR]
         i = i                                         [COLOR=#008000] ' Dummy[/COLOR]
      Case Is > 10                                     [COLOR=#008000] 'Eingabe zu lang[/COLOR]
         Ausgabe = "Eingabe zu lang (3-10)!"
         doDaDecode = Ausgabe                    [COLOR=#008000]'Rückgabewert der Funktion[/COLOR]
         Exit Function                                 [COLOR=#ff0000] 'ABBRUCH[/COLOR]
      Case Else                                        [COLOR=#008000] 'alle anderen Fälle (sollte nicht vorkommen)[/COLOR]
         Ausgabe = "unbekannter Fehler!"
         doDaDecode = Ausgabe                    [COLOR=#008000]'Rückgabewert der Funktion[/COLOR]
         Exit Function                                 [COLOR=#ff0000] 'ABBRUCH[/COLOR]
   End Select



[COLOR=#008000]   'Hier wird nur angekommen, wenn die Prüfungen oben erfolgreich waren
   '===================================================================[/COLOR]
   
   
   
[COLOR=#008000]   ' "Übersetzungstabelle"[/COLOR]
   TransTableIN = "ABCDEFGHIJ"
   TransTableOUT = "1234567890"
      
   Eingabe = UCase(Eingabe)                 [COLOR=#008000]        'wandelt ggf. Kleinbuchstaben in Großbuchstaben um[/COLOR]
   Ausgabe = ""
      
                                                      
   For i = 1 To Len(Eingabe)                   [COLOR=#008000] 'Schleife über alle Zeichen der Eingabe[/COLOR]
      Buchstabe = Mid$(Eingabe, i, 1)        [COLOR=#008000]   'nächstes Zeichen des Eingabe-Strings[/COLOR]
      validChar = True                         [COLOR=#008000] 'initialisiere "Zeichen gültig" als "wahr"[/COLOR]
      daPos = InStr(1, TransTableIN, Buchstabe)[COLOR=#008000] 'Position des Zeichens in TransTableIN[/COLOR]
      If daPos = 0 Then                       [COLOR=#008000]  'wenn Zeichen nicht in TransTableIN vorkommt...[/COLOR]
         validChar = False                     [COLOR=#008000] ' ... Zeichen als ungültig kennzeichnen[/COLOR]
         Exit For                              [COLOR=#008000] ' ... und weitere String-Prüfung abbrechen[/COLOR]
      End If
      daCode = Mid$(TransTableOUT, daPos, 1)  [COLOR=#008000]  'entsprechende Position in TransTableOUT[/COLOR]
      Ausgabe = Ausgabe & daCode              [COLOR=#008000]  'schrittweiser Aufbau der Ausgabe[/COLOR]
   Next i

   
   If validChar = False Then                 [COLOR=#008000]   'Wenn zuvor ein ungültiges Zeichen erkannt wurde...[/COLOR]
      finalAusgabe = "ungültige(s) Zeichen!"  [COLOR=#008000]  ' ... Fehlermeldung für Ausgabe generieren[/COLOR]
   Else                                        [COLOR=#008000] 'Ansonsten...[/COLOR]
                                                [COLOR=#008000]'... baue Komma an drittletzter Stelle ein[/COLOR]
      AusgabeMitKomma = Mid(Ausgabe, 1, Len(Ausgabe) - 2) & _
                        "," & _
                        Mid(Ausgabe, Len(Ausgabe) - 1, 2)
      finalAusgabe = AusgabeMitKomma
   End If
   
   
   
[COLOR=#008000]   'Rückgabewert der Funktion[/COLOR]
   doDaDecode = finalAusgabe
      
   

End Function



So sieht's dann aus:

Anhang anzeigen 20130802-1726_-_screenshot.001.png


Wer will kann ja noch in Spalte B eine bedingte Formatierung einfügen à la "ist nicht numerisch" oder so, um getextete Fehlermeldungen farbig hervorzuheben.

Wenn ich's jetzt mit dem Einfügen eines Anhangs richtig gemacht habe, hängt an diesem Posting die ganze Excel-Tabelle samt Makro als ZIP-Archiv dran.
 

Anhänge

  • ABC durch Zahlenkombination 1,2,3 ersetzen_(VBA-Makro).zip
    12,9 KB · Aufrufe: 29
Zuletzt bearbeitet:
Thema:

Excel Buchstabenkombination z.B. "ABC" durch Zahlenkombination z.B."1,2,3" ersetzen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.959
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben