2017年7月4日VBAバイト単位で文字列の長さや一部を取得するには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等と同じです。Excel作業をVBAで効率化シェアお問合わせTOPへ。