Help us understand the problem. What is going on with this article?

AccessVBAの文字コードにハマった話

More than 1 year has passed since last update.

VBAで文字列のバイト数により処理を分岐させるプログラムを実装したとき、
半角英数と全角文字列を区別してくれない。。だと。。!?
て感じでハマったのでメモ。access2016を使用。

VBAでの文字列はUnicodeになる

VBAでは文字列がUnicode形式になるので、すべての文字が2バイトになる。
例えば文字列のバイト数を返すLenB関数を使ったとき、
下記の例では両方とも結果が2になる。

lenB("a")'2が返る
lenB("あ")'2が返る

半角英数は1バイトで処理したいとき

半角英数は1バイトで処理したいとき、StrConv 関数を使って、
下記みたいな感じでUnicode からANSI に変換させる必要がある。

lenB(strconv("a",vbFromUnicode))'1が返る
lenB(strconv("あ",vbFromUnicode))'2が返る
Dim str As String
str = StrConv(str,vbFromUnicode)'ANSI に変換
'処理を記述
str = StrConv(str,vbUnicode)'Unicode に戻す

以上、AccessVBAでバイト数に依存したコードを
書くときは、注意が必要ってはなしでした。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away