Mal abgesehen, davon, ob diese Ermittlung Sinn macht:
Da Du das Ergebnis sowieso in die Tabelle schreibst, würde ich das ganze als benutzerdefinierte Funktion mit Select Case umsetzen, z. B. so:
Function ByteZaehler(rng As Range)
If rng.Cells.Count > 1 Then Exit Function
For i = 1 To rng.Characters.Count
Select Case rng.Characters(i, 1).Text
Case "ä", "ö", "ü", "Ä", "Ö", "Ü", "ß"
ByteZaehler = ByteZaehler + 2
Case Else
ByteZaehler = ByteZaehler + 1
End Select
Next
End Function
Das ist schon deshalb sinnvoll, da Du eventuell nicht daran denkst, dass das Ergebnis eine Zelle über der aktiven Zelle eingefügt wird. Denn der darin stehende Inhalt wird gelöscht (ohne das rückgäng machen zu können). Da ist eine Funktion etwas vorteilhafter, da ich genau weiß wo ich die Formel eintrage.
Excel verwendet mW für jedes Unicode-Zeichen 2 Byte, egal welches Zeichen (in der Reigenfolge High Byte Low Byte = Big Endian):
Sub ByteTest()
Dim bytText() As Byte
Dim strText As String
strText = "Dies ist ein Täst"
bytText = strText
Debug.Print "Anzahl Bytes: " & UBound(bytText) + 1 'Da der Index bei 0 beginnt
Debug.Print "Anzahl Zeichen: " & Len(strText)
End Sub
|