【入門編】【全半角混在文字列の安全切り詰め】表示バイト数に合わせた末尾三点リーダー(…)自動付加関数の自作 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptを支配せよ:全角・半角混在文字列を「バイト単位」で美しく切り詰める極意

こんにちは。現場の最前線で自動化の荒波を乗りこなしているチーフアーキテクトです。

VBScriptで業務ツールを作っていると、必ずぶつかる壁があります。それが「全角文字(2バイト)と半角文字(1バイト)が混在する文字列の制御」です。画面の表示幅を制限したいとき、ただ文字数だけで数えると、全角が混じった瞬間にレイアウトが崩壊し、ユーザーから「見た目が汚い」と指摘を受けることになります。

今日は、VBScriptのポテンシャルを最大限に引き出し、「指定したバイト数に収め、溢れたら自動で三点リーダー(…)を添える」という、実務で死ぬほど役に立つプロのテクニックを伝授します。

1. なぜ「Len」ではなく「LenB」なのか?

VBScriptには、文字列を扱うための関数が二種類用意されています。

  • `Len` / `Mid`: 「文字数」を数える。
  • `LenB` / `MidB`: 「バイト数」を数える。

VBScriptの内部では文字はUnicodeとして扱われますが、`LenB`を使うことで、その文字がメモリ上で何バイト占有しているか(※厳密にはシステム標準のコードページ変換の結果)を判定できます。日本語環境のWindows(Shift-JIS)では、全角=2バイト、半角=1バイトとして計算するのが鉄則です。

2. 実践!安全な切り詰め関数のコード

さあ、現場でそのまま使える「職人のコード」を公開します。以下のコードをコピーして、あなたのスクリプトのライブラリに加えてください。

‘———————————————————
‘ 指定バイト数で切り詰め、超過分を三点リーダーにする関数
‘ @param strText 対象の文字列
‘ @param iLimitByte 最大バイト数
‘ @return 整形後の文字列
‘———————————————————
Function FormatStringByByte(strText, iLimitByte)
Dim iLen, iByteCount, i, strChar

‘ 既に制限内であればそのまま返す
If LenB(StrConv(strText, 128)) <= iLimitByte Then ' 128はvbFromUnicode FormatStringByByte = strText Exit Function End If ' 一文字ずつ検証しながらバイト数をカウント iByteCount = 0 For i = 1 To Len(strText) strChar = Mid(strText, i, 1) ' 文字ごとにバイト数を判定(全角なら2、半角なら1) If LenB(StrConv(strChar, 128)) = 2 Then iByteCount = iByteCount + 2 Else iByteCount = iByteCount + 1 End If ' 制限バイト数を超えたら、その前までを切り取って…を付与 If iByteCount > iLimitByte Then
FormatStringByByte = Left(strText, i – 1) & “…”
Exit Function
End If
Next

FormatStringByByte = strText
End Function

‘ — 実行例 —
Dim myText
myText = “VBScriptの世界へようこそ!”
WScript.Echo FormatStringByByte(myText, 10)
‘ 結果: VBScriptの…

このコードのポイント(知的な解説)

1. `StrConv(strChar, 128)`: ここが魔法のスパイスです。Unicodeの文字列を一旦システムのコードページ(Shift-JIS)に変換してから`LenB`で長さを測ることで、現実的なバイト数を正確に導き出しています。
2. 安全性: `Mid`で1文字ずつ分解しながら加算しているため、「全角文字のど真ん中でぶった切って文字化けさせる」という悲劇を物理的に回避しています。

3. 陥りやすいエラーと回避策

初心者がやりがちな「NGパターン」を共有しておきます。

  • 「バイト数制限」を「文字数制限」と混同する:

`Left(str, 10)` を使うと、全角だけで構成された文字列なら5文字分しか表示されません。常に「この項目は何バイトまで許容されるか」を基準に設計してください。

  • 三点リーダー(…)の文字化け:

`…` はUnicode文字です。VBScriptのソースコードを保存する際は、文字コードを「UTF-8 (BOM付き)」または「Shift-JIS」で保存してください。そうしないと、実行時に謎の記号に化けることがあります。

4. 最後に:エンジニアとしての心構え

「自動化」とは、単にコードを書くことではありません。「使う人が迷わない、見た目が整った出力を提供する」というホスピタリティのことです。

たかが文字列の切り詰めですが、ここにこだわることで、あなたの作るツールは「急造のスクリプト」から「堅牢な業務アプリケーション」へと進化します。

ここをクリアしたあなたは、もうVBScriptの基礎はバッチリです。自信を持って、より複雑なロジックの世界へ踏み込んでいってください。応援していますよ!

タイトルとURLをコピーしました