サーチ…


前書き

VBAは、 Unicodeを使用して任意の言語またはスクリプトで文字列を読み書きできます。しかし、 識別子トークンのためのより厳しい規則があります。

VBAコードの非ラテン文字

スプレッドシートのセルA1には、次のアラビア語のパングラムがあります。

ユーザー名をお忘れですか?

VBAは、マルチバイト文字コードで動作するAscWおよびChrW関数を提供します。 Byte配列を使って文字列変数を直接操作することもできます:

Sub NonLatinStrings()

Dim rng As Range
Set rng = Range("A1")
Do Until rng = ""
    Dim MyString As String
    MyString = rng.Value
    
    ' AscW functions
    Dim char As String
    char = AscW(Left(MyString, 1))
    Debug.Print "First char (ChrW): " & char
    Debug.Print "First char (binary): " & BinaryFormat(char, 12)
    
    ' ChrW functions
    Dim uString As String
    uString = ChrW(char)
    Debug.Print "String value (text): " & uString        ' Fails! Appears as '?'
    Debug.Print "String value (AscW): " & AscW(uString)
    
    ' Using a Byte string
    Dim StringAsByt() As Byte
    StringAsByt = MyString
    Dim i As Long
    For i = 0 To 1 Step 2
        Debug.Print "Byte values (in decimal): " & _
            StringAsByt(i) & "|" & StringAsByt(i + 1)
        Debug.Print "Byte values (binary): " & _
            BinaryFormat(StringAsByt(i)) & "|" & BinaryFormat(StringAsByt(i + 1))
    Next i
    Debug.Print ""

    ' Printing the entire string to the immediate window fails (all '?'s)
    Debug.Print "Whole String" & vbNewLine & rng.Value
    Set rng = rng.Offset(1)
Loop

End Sub

これは、 アラビア語の悲しい悲しみのために次の出力を生成します。

最初のchar(ChrW):1589
最初のchar(バイナリ):00011000110101
文字列値(テキスト):?
文字列値(AscW):1589
バイト値(10進数):53 | 6
バイト値(バイナリ):00110101 | 00000110

文字列全体
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????

文字列関数が正しく機能していても、VBAはラテン文字以外のテキストを直接ウィンドウに出力できないことに注意してください。これはIDEの制限であり、言語の制限ではありません。

非ラテンの識別子と言語のカバレッジ

VBA識別子 (変数名と関数名)はラテン語のスクリプトを使用でき、 日本語韓国語簡体字中国語繁体字中国語のスクリプトも使用できます。

拡張されたラテン語のスクリプトは、多くの言語を網羅しています:
英語、フランス語、スペイン語、ドイツ語、イタリア語、ブルトン語、カタロニア語、デンマーク語、エストニア語、フィンランド語、アイスランド語、インドネシア語、アイルランド語、ロイバン語、Mapudungun、ノルウェー語、ポルトガル語、スコットランドゲール語、スウェーデン語、タガログ語

一部の言語は部分的にしかカバーされていません:
アゼルバイジャン、クロアチア、チェコ、エスペラント、ハンガリー、ラトビア、リトアニア、ポーランド、ルーマニア、セルビア、スロバキア、スロベニア、トルコ、ヨルバ、ウェールズ

一部の言語には、ほとんどまたはまったくカバーしていません
アラビア語、ブルガリア語、チェロキー語、Dzongkha、ギリシャ語、ヒンズー語、マケドニア語、マラヤーラム語、モンゴル語、ロシア語、サンスクリット語、タイ語、チベット語、ウルドゥー語、ウイグル語

次の変数宣言はすべて有効です。

Dim Yec’hed As String 'Breton
Dim «Dóna» As String 'Catalan
Dim fræk As String 'Danish
Dim tšellomängija As String 'Estonian
Dim Törkylempijävongahdus As String 'Finnish
Dim j’examine As String 'French
Dim Paß As String 'German
Dim þjófum As String 'Icelandic
Dim hÓighe As String 'Irish
Dim sofybakni As String 'Lojban (.o’i does not work)
Dim ñizol As String 'Mapudungun
Dim Vår As String 'Norwegian
Dim «brações» As String 'Portuguese
Dim d’fhàg As String 'Scottish Gaelic

VBA IDEでは、変数名内の単一のアポストロフィは行をコメントに変換しません(スタックオーバーフローと同様)。

また、引用符を示すために2つの角度を使用する言語«»は、変数名の中でそれらを使用することができますが、型引用符はそうではありません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow