1

これは特殊文字を受け入れないため、支払いシステムにデータをインポートするために名前を置き換えるために使用する機能があります。

Function UMLAUT(text As String)
'** Dimensionierung der Variablen
Dim umlaut1, umlaut2, umlaut3, umlaut4, _
umlaut5, umlaut6, umlaut7, umlaut8, umlaut9, _
umlaut10, umlaut11, umlaut12, umlaut13, umlaut14, _
umlaut15, umlaut16, umlaut17, umlaut18, umlaut19, _
umlaut20, umlaut21, umlaut22 As String

umlaut1 = Replace(text, "ü", "ue")
umlaut2 = Replace(umlaut1, "Ü", "Ue")
umlaut3 = Replace(umlaut2, "ä", "ae")
umlaut4 = Replace(umlaut3, "Ä", "Ae")
umlaut5 = Replace(umlaut4, "ö", "oe")
umlaut6 = Replace(umlaut5, "Ö", "Oe")
umlaut7 = Replace(umlaut6, "ß", "ss")
umlaut8 = Replace(umlaut7, "ó", "o")
umlaut9 = Replace(umlaut8, "&", "+")
umlaut10 = Replace(umlaut9, ";", ",")
umlaut11 = Replace(umlaut10, "é", "e")
umlaut12 = Replace(umlaut11, "á", "a")
umlaut13 = Replace(umlaut12, "à", "a")

UMLAUT = umlaut13

End Function

これはうまくいきますが、これが必要になるたびに「新しい」特殊文字を探す必要がない方法はありますか? たとえば、he west データには、è交換されない も含まれているため、バンキング ソフトウェアでのインポートは機能しません。

助けてくれてありがとう!マックス

4

4 に答える 4

2

必要なのは、この ASCII テーブルへの便利な参照です

ここに画像の説明を入力

また

  1. それほど多くの変数は必要ありません。
  2. 変数を として宣言するとDim umlaut1, umlaut2, umlaut3 As String、最後の変数のみが VBA で文字列として宣言されます。最初の 2 つは次のように宣言されます。Variants

ASCII テーブルに戻ります。

特殊文字が 128 から始まり 255 まで続くことに気付いた場合は、単純にループを使用して不要な文字を置き換えます。

: 1 回限りのスローギングが必要です。これにより、将来さらに文字を追加する必要がなくなります。以下のコードでは、上の画像と同じ順序で置き換えるテキストを追加するだけです。

コード: (未テスト)

Function umlaut(text As String)
    Dim umlaut1 As String, rplString As String
    Dim i As Long, j as Long
    Dim MyArray

    '~~> One time slogging
    rplString = ",ue,e,,a,,,,,,,,......." '<~~ and so on.
    '~~> The first one before the comma is empty since we do
    '~~> not have any replacement for character represented by 128.
    '~~> The next one is for 129 and then 130 and so on so forth.
    '~~> The characters for which you do not have the replacement,
    '~~> leave them empty

    MyArray = Split(rplString, ",")

    umlaut1 = text: j = 0

    For i = 128 To 255
        umlaut1 = Replace(umlaut1, Chr(i), MyArray(j))
        j = j + 1
    Next

    umlaut = umlaut1
End Function

ヒント: たとえば ASCII 166 までを考慮するだけで解決策が得られると思われる場合は、それに応じてコードを修正するだけです :)

于 2013-09-17T13:52:02.790 に答える
0

文字を削除するのではなくカスタム置換を使用しているため、簡単なトリックはありません。余分な String 変数を削除できます。

Function UMLAUT(text As String) As String
    UMLAUT = Replace(text, "ü", "ue")
    UMLAUT = Replace(UMLAUT, "Ü", "Ue")
    UMLAUT = Replace(UMLAUT, "ä", "ae")
    UMLAUT = Replace(UMLAUT, "Ä", "Ae")
    UMLAUT = Replace(UMLAUT, "ö", "oe")
    UMLAUT = Replace(UMLAUT, "Ö", "Oe")
    UMLAUT = Replace(UMLAUT, "ß", "ss")
    UMLAUT = Replace(UMLAUT, "ó", "o")
    UMLAUT = Replace(UMLAUT, "&", "+")
    UMLAUT = Replace(UMLAUT, ";", ",")
    UMLAUT = Replace(UMLAUT, "é", "e")
    UMLAUT = Replace(UMLAUT, "á", "a")
    UMLAUT = Replace(UMLAUT, "à", "a")
End Function
于 2013-09-17T13:33:45.750 に答える