バイト単位で文字列の長さや一部を取得するには

VBAのLen関数は「文字数」をカウントするため、Shift_JISで言う全角と半角の区別を行いません。”Abc”(Aのみ全角)の場合にShift-JIS換算での4バイトという結果が欲しくても3を返してきます。

同様に、Mid関数、Left関数、Right関数も文字数で処理されます。バイト単位で処理するための関数がLenB、MidB、LeftB、RightBとして用意されているのですが、想定した動きをしません。例えば、先に挙げた”Abc”(Aのみ全角)をLenBでバイト数を算出しようとしても、4を期待するのに6が返ってきます。

原因は日本語圏でのVBAの文字コードは全角を2バイト、半角を1バイトと計算するShift-JISではなく、全ての文字を2バイトとするDBCSコード体系のため、バイト数として計算するLenB関数を通すとどんな文字も2バイトとして扱われることにより、3文字×2バイト=6バイトとして返されます。

そこで、期待通りの「バイト数」を返す関数を紹介します。それぞれの関数の引数は、各LenB等と同じです。

バイト数取得用のLen関数

 

バイト数取得用のMid関数

 

バイト数取得用のLeft関数

 

バイト数取得用のRight関数

 

バイト数取得用の各関数の使用例