276 Aufrufe
Gefragt in Tabellenkalkulation von stephfan Einsteiger_in (9 Punkte)
Liebe Community,

ich würde gerne die Zahlenfolge (ASCII) 115 116 101 112 104 102 97 110 zurück in Text (ein Wort) mit StrConv + vbUnicode konvertieren. Komme leider nicht mit der For-Next Schleife klar.

Den Text in die Zahlenfolge habe ich wie folgt erstellt (mit Google gefunden) - aber wieder zurück in Text bekomme ich einfach nicht hin. Kann mir da jemand bitte helfen oder Tipps geben. Vielen Dank und schöne Grüße Stephfan

Sub zuASCII()
Dim str1 As String, str2 As String
Dim i As Integer
Dim x() As Byte

str1 = Cells(1, 1).Value                 '(in dieser Zelle steht der Text)

x = StrConv(str1, vbFromUnicode)

For i = 0 To UBound(x)
  str2 = str2 & " " & x(i)
Next i

Cells(1, 2).Value = Trim(str2)

End Sub

3 Antworten

+1 Punkt
Beantwortet von xlking Experte (1.5k Punkte)

Hallo stephfan

du verwechselst hier ein paar Sachen. Ascii und Unicode sind zwei verschiedene System zur Zeichendarstellung. Die von dir gezeigten Zahlen geben jeweils ein Zeichen in Ascii an. Für ein Unicode-Zeichen benötigst du zwei Zahlen. Muss es denn unbedingt Unicode sein? 99% aller Texte lassen sich normal mit ASCII-ANSI darstellen:

für die Rückumwandlung benötigst du die Chr-Funktion (aus einer Unicodezahl (z.B. 45123) dann ChrW) 

For i = 0 To UBound(x)
  str2 = str2 & Chr(x(i))
Next i

Zurück in Ascii gehts dann mit der ASC-Funktion.

Gruß Mr. K.

0 Punkte
Beantwortet von stephfan Einsteiger_in (9 Punkte)

Hallo Mr. K.

vielen Dank für die schnelle Antwort mitten in der Nacht :-)

Tatsächlich habe ich das mit ASCII und Unicode verwechselt. Ich meinte ASCII, bin aber wohl mit den Befehlen durcheinander gekommen, da ja die Programm-Zeile 

x = StrConv(str1, vbFromUnicode)

mir das Ergebnis

115 116 101 112 104 102 97 110

ausgibt und das doch ASCII ist, oder?

Jedenfalls stehe ich wohl immer noch auf dem Schlauch was die Rückumwandlung in Text angeht. Mit dem folgenden Code erhalte ich wieder die o.g. ASCII Reihenfolge

Sub zuText()
Dim str1 As String, str2 As String
Dim i As Integer
Dim x() As Byte

str1 = Cells(1, 2).Value

x = StrConv(str1, vbFromUnicode)

For i = 0 To UBound(x)
  str2 = str2 & Chr(x(i))
Next i

Cells(1, 3).Value = Trim(str2)

End Sub

Es liegt sicherlich wohl an der Zeile "x = StrConv(str1, vbFromUnicode)" - da fehlt mir aber das Verständnis. Kannst Du da bitte nochmals drüber schauen?

Vielen Dank für Deine Bemühungen :-)

+1 Punkt
Beantwortet von xlking Experte (1.5k Punkte)

Hi stephfan,

Der Code macht doch genau das, was du in deiner Eingangsfrage angefragt hast. Wo ist das Problem?

Du kannst StrConv auf verschiedene Arten verwenden. Im Normalfall wandelt der Befehl x = StrConv(str1, vbFromUnicode) Unicodetext in normalen Text um und legt diesen Text dann in die Variable x. Du hast aber x als Array definiert über Dim x() Das erkennt die Funktion und wandelt die Buchstaben in deren Ascii-Byte-Zahlen um und legt diese im Array ab. Wusste ich übrigens auch noch nicht, dass dies geht.

Anschließend durchläufst du mit der Schleife alle Positionen des Arrays und wandelst diese Zahlen mit Hilfe von Chr(Zahl) bzw. Chr(x(Pos.)) wieder in Buchstaben um, die du dem String str2 hinzufügst. Die Ausgabe von str2 nach C1 erfolgt dann natürlich wieder als Text. Die Rückumwandlung war also erfolgreich.

Gibt es Unterschiede zwischen B1 und C1? Dann hast du wohl tatsächlich mindestens ein Unicodezeichen drin. Wenn alles Unicode wäre (z.B. UTF16), dann kannst du jeweils zwei Ascii-Zahlen zu einem Unicodezeichen verbinden. Wenn aber nur einzelne Zeichen Unicode sind (z.B. UTF8) musst du dir zuvor merken an welcher Stelle sich diese befinden. Da wird's dann kompliziert. Ich denke aber nicht, dass Gehirnschmalz in diese Richtung nötig wird oder?

Gruß Mr. K.

...