【入門編】【初心者向け】表のセル内テキストを全角から半角へ一括変換する置換マクロ – Word VBA解析バイブル

スポンサーリンク

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のあらゆる要素を操作する基本になります。

「面倒な作業をコードに押し付ける」という感覚を掴んでください。
一度この快感を覚えたら、もう手作業には戻れないはずです。

もし分からないことがあれば、またいつでも聞きに来てくださいね。あなたのエンジニアライフを応援しています!

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