[VBA] バイト数指定で文字列切り出し
VBAのMidB関数は、バイト数指定で文字列を切り出す関数ですが、
実際には半角1バイト、全角2バイトのイメージで指定したつもりでも、その通りに取得できません。
原因は、内部的にUnicodeが使われているためで、すべての文字が2バイト扱いになっています。
半角1バイト、全角2バイトで切り出したい場合は、
以下のような関数を用意して、MidBの代わりに使えばOKです。
この関数では、一時的にUnicodeを ANSI形式に変換した状態で文字列を切り出し、
そのあとで元のUnicodeに戻しています。
なんとも回りくどい処理ですね。
Function MidBex(source As String, start As Integer, leng As Integer) As String MidBex = StrConv(MidB(StrConv(source, vbFromUnicode), start, leng), vbUnicode) End Function
同じように、LenBも関数を作ればOKです。
Function LenBex(source As String) As String LenBex = LenB(StrConv(source, vbFromUnicode)) End Function
LeftBやRightBなどもこれらを応用すればできます。
最近は、画面の文字数チェックもバイト数ではなく、文字数でおこなうことが多く、
データベースもバイト数指定以外も指定できるようにはなってきています。
ですが、実際のところ、まだまだ半角/全角という区別は抜けることなく、
ところどころに出てきてプログラマを悩ませます。
でも、”○○バイト以内で入力してください”なんていうエラーメッセージは、
エンドユーザーには意味不明なので出来るかぎり回避しましょう。
== ランキングに参加しています。ぜひクリックお願いします ==
[Air] ステータスバーに、ボタンを追加する [Flex] ButtonBarのスタイル指定