Word VBAで「表の全角文字」を半角へ一掃する!実務を劇的に変えるクリーンアップ術
こんにちは。業務自動化の世界へようこそ。
日々、Wordで作成された報告書や仕様書と格闘している皆さん、お疲れ様です。
「表の中に混ざった全角の英数字を、全部半角に直したい……。一つずつ直すなんてやってられない!」
そんな悩み、Word VBAなら数秒で解決できます。今回は、Wordの表(Table)を操作し、セル内のテキストを全角から半角へ一括変換する、プロの入り口となるマクロを伝授しましょう。
「マクロの記録」から一歩踏み出し、コードの力で文書を支配する快感を味わってください。
—
1. なぜ「表の操作」は難しいのか?
Word VBAにおいて、表の操作は「オブジェクトの階層」を理解することから始まります。
Wordの構造は、以下のようなマトリョーシカ構造になっています。
- Document(文書) > Table(表) > Row(行) > Cell(セル) > Range(範囲)
初心者の方が陥りやすいミスは、この階層を無視して「いきなり特定のセルを触ろうとする」ことです。今回は、「文書内のすべての表を巡回し、すべてのセルを一つずつチェックする」という、最も堅牢でエラーの起きにくい手法を学びます。
—
2. これが実務で使える「全角→半角」一括変換コード
以下のコードをコピーして、VBE(Alt + F11)の標準モジュールに貼り付けてください。
Sub CleanUpTables_HalfWidth()
Dim tbl As Table
Dim cel As Cell
Dim rng As Range
‘ 文書内のすべての表に対してループ処理を行う
For Each tbl In ActiveDocument.Tables
‘ 表の中のすべてのセルに対してループ処理を行う
For Each cel In tbl.Range.Cells
‘ セルの内容をRangeオブジェクトとして取得
Set rng = cel.Range
‘ セルの末尾には「セルの区切り記号」が含まれるため、
‘ それを除外するために長さを調整する(重要!)
If Len(rng.Text) > 2 Then
rng.End = rng.End – 1
‘ StrConv関数で全角(vbWide)を半角(vbNarrow)へ変換
‘ vbNarrow は英数記号を半角にする定数です
rng.Text = StrConv(rng.Text, vbNarrow)
End If
Next cel
Next tbl
MsgBox “表内の全角英数字を半角にクリーンアップしました!”, vbInformation
End Sub
—
3. コードの「極限の知見」を解説
このコードには、ただ動くだけでなく、「現場でエラーを出さないための知恵」が詰まっています。
① `For Each` ループの採用
`For i = 1 to tbl.Rows.Count` と書くこともできますが、`For Each` を使うことで「表がいくつあるか?」「行が何行あるか?」をいちいち数える必要がなくなります。コードが直感的になり、保守性が劇的に向上します。
② セルの「セルの区切り記号」問題
ここが最も重要です。Wordのセルには、目には見えない「セル末尾を示す特殊記号」が必ず含まれています。
もしこれを含めて変換しようとすると、場合によってはWordがクラッシュしたり、謎の記号が挿入されたりします。
`rng.End = rng.End – 1` という処理は、その「見えない境界線」を保護するための、プロの定石です。
③ `StrConv`関数の威力
`StrConv(対象文字列, 変換定数)` は、VBAにおける文字列操作の魔法の杖です。
- `vbNarrow`:全角を半角に。
- `vbWide`:半角を全角に。
これを知っているだけで、データ整形の手間は1/100になります。
—
4. 陥りやすいエラーと対処法
- 「実行時エラーが発生する」
- 原因:結合されたセル(マージセル)が含まれていると、`Range`の扱いが複雑になりエラーが出ることがあります。まずは単純な表で試し、複雑な表で動かない場合は、その表だけ手動で処理する「逃げ道」を作るのも賢いエンジニアの判断です。
- 「変換後のレイアウトが崩れた」
- 全角から半角になると文字列の幅が狭くなります。表の幅設定が「自動調整」になっているか確認してください。
—
最後に:ここをクリアすれば「自動化の扉」が開く
今回学んだ「文書内の全要素をループでなめる」という手法は、表だけでなく、段落、画像、図形など、Wordのあらゆる要素を操作する基本になります。
「面倒な作業をコードに押し付ける」という感覚を掴んでください。
一度この快感を覚えたら、もう手作業には戻れないはずです。
もし分からないことがあれば、またいつでも聞きに来てくださいね。あなたのエンジニアライフを応援しています!
