プロプログラマ

プログラマーを職業としてます。 Flex,Air,C#,Oracle,HTML+JSの言語ノウハウを中心に情報発信していきます

[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などもこれらを応用すればできます。

最近は、画面の文字数チェックもバイト数ではなく、文字数でおこなうことが多く、
データベースもバイト数指定以外も指定できるようにはなってきています。

ですが、実際のところ、まだまだ半角/全角という区別は抜けることなく、
ところどころに出てきてプログラマを悩ませます。

でも、”○○バイト以内で入力してください”なんていうエラーメッセージは、
エンドユーザーには意味不明なので出来るかぎり回避しましょう。

 

== ランキングに参加しています。ぜひクリックお願いします ==

プログラム ブログランキングへ
にほんブログ村 IT技術ブログへ
にほんブログ村

, , ,

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください