「あー、またエラーだ……。システムへのデータ取り込み、文字数制限で弾かれちゃった。全角と半角が混ざっているから、目視で数えるなんて無理だよ……!」
バックオフィスで膨大なデータを扱っていると、一度はこんな悩みに直面したことがあるのではないでしょうか?
こんにちは!ぐーです。
私も新人時代、古いシステムの「全角20文字(半角40文字)以内」というルールに苦しめられ、数千件のデータを3時間かけて目視チェックした苦い経験があります。
しかし、VBAの「Len関数」と「LenB関数」を正しく使えば、あの膨大な作業もボタン一つ、わずか1秒で完了します。
今回は、ITに苦手意識がある方でもサクッと使えるように、この2つの関数の違いと、現場で本当に使えるテクニックをわかりやすく解説していきます。
文字の「数」を数えるか、「重さ」を量るか
想像してみてください。たとえば、小学生のテストに出てくる「リンゴ」と「Apple」。
文字の「数」だけに注目すれば、それぞれ「3文字」と「5文字」です。
このように、見たままの文字数をシンプルに数えるのが「Len(レン)関数」の役割になります。
一方、システムの世界には文字の「重さ(データ量・バイト数)」という概念があります。
イメージとして、半角文字は「1kg」、全角文字は「2kg」の重さがあると捉えてみてください。
この「文字の重さ」を正確に量る体重計のような存在が、「LenB(レンビー)関数」なのです。
実務におけるシステムエラーの多くは、この「重さ(バイト数)」の制限を超えてしまった時に発生します。
【要注意】実務でハマりやすい「VBA独自の罠」と解決策
ここで、実務でよく遭遇する落とし穴についてお話しします。
実はVBAの内部処理においては、半角・全角を問わず、すべての文字を一律「2kg(2バイト)」として扱ってしまう特殊なルールがあります。
これでは、「半角は1kgとして計算したい」という多くの業務システムのルールと食い違ってしまいます。
そこで、現場で重宝されている「正しい重さを量るためのテクニック」を、コピペで使えるコードとともにご紹介します。
コピペで使える!文字数・バイト数判定サンプルコード
StrConv(文字列, vbFromUnicode) という命令を組み合わせることで、VBA独自のルールを一般的なルールに変換し、正確な重さを量ることができるようになります。
Sub CheckTextLength()
' 文字列を入れる箱(変数)を用意します
Dim myText As String
' テスト用の文字を入れます(半角カタカナ3文字+全角カタカナ2文字)
myText = "アイウエオ"
' ①Len関数:見たままの文字数を数える(結果は「5」)
MsgBox "文字数は " & Len(myText) & " 文字です。"
' ②LenB関数+裏技:全角=2、半角=1として重さを量る(結果は3+4=「7」)
' ※StrConvを使って、VBA独自のルールから一般的なルール(Shift-JIS)に変換してから量ります
MsgBox "バイト数は " & LenB(StrConv(myText, vbFromUnicode)) & " バイトです。"
End Sub
最後に
いかがでしたでしょうか。
「Lenは数を数える」「LenBは重さを量る」。
この基本さえ押さえておけば、文字数エラーに怯える必要はもうありません。作業時間をグッと短縮して、心に余裕を持って仕事をしていきましょう。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント