Word VBAの真髄:表の並び替え(Sort)を完全に掌握する
こんにちは。自動化の世界へようこそ。
普段、Wordの表を一つひとつ手作業で並び替えていませんか?「マクロの記録」ボタンを押して生成された、冗長で意味不明なコードを見て、なんとなく触るのを避けている……そんなあなたにこそ、この記事を読んでほしい。
Word VBAにおいて、表(Tableオブジェクト)を自在に操れるようになることは、自動化エンジニアとしての「登竜門」です。今回は、`Table.Sort`メソッドの核心に迫り、なぜ多くの初心者がここでつまずくのか、その正体を解き明かします。
—
1. なぜ「表の並び替え」が自動化の要なのか
Wordの表は、Excelのセルとは異なり、非常に「有機的」な存在です。行や列の挿入、結合、テキストの流し込み……これらをコードで制御できるようになると、報告書作成やデータ集計の時間は劇的に短縮されます。
特に`Table.Sort`は、Word VBAの中でも非常に強力なメソッドです。これを使えば、バラバラの順番で入力されたデータを、一瞬で「日付順」「金額順」に整列させることが可能です。
—
2. 実践:表を並び替えるためのVBAコード
まずは、以下のコードをご覧ください。現在カーソルがある位置の表を、「2列目(数値)」を基準にして昇順に並び替えるコードです。
Sub SortTableExample()
Dim tbl As Table
‘ 1. 現在のカーソル位置が表の中にあるか確認
If Selection.Information(wdWithInTable) = False Then
MsgBox “カーソルを並び替えたい表の中に置いてください。”, vbExclamation
Exit Sub
End If
‘ 2. 現在の表をオブジェクトとして取得
Set tbl = Selection.Tables(1)
‘ 3. 並び替えの実行
‘ ExcludeHeader:=True は、1行目を見出しとして除外する設定です
tbl.Sort ExcludeHeader:=True, _
FieldNumber:=”列 2″, _
SortFieldType:=wdSortFieldNumeric, _
SortOrder:=wdSortOrderAscending
MsgBox “表の並び替えが完了しました!”, vbInformation
End Sub
コードの解説
- `Selection.Tables(1)`: 現在のカーソル位置にある表を指します。もし文書内に複数の表がある場合、この指定方法が最も安全です。
- `FieldNumber:=”列 2″`: ここが肝です。「2番目の列」を基準にするという意味です。
- `SortFieldType`: 並び替えるデータの種類を指定します。数値なら `wdSortFieldNumeric`、文字列なら `wdSortFieldAlphanumeric` を使い分けましょう。
—
3. 初学者が陥る「3つの落とし穴」
現場でよくある失敗事例と、その回避策を伝授します。
① 「表の中にいない」というエラー
コード実行時にカーソルが表の外にあると、`Selection.Tables(1)` は「そんなものはない!」とエラーを吐きます。必ず `Selection.Information(wdWithInTable)` で存在確認を行うのが、プロのたしなみです。
② 「見出し行」の扱いを忘れる
表の1行目が項目名(氏名、金額など)の場合、`ExcludeHeader:=True` を忘れると、項目名まで含めて並び替えられ、データの中に混ざってしまいます。これは非常に格好悪いミスです。
③ 結合セル(セルの結合)の罠
Wordの表で「セルが結合されている」と、`Sort`メソッドはしばしば動作を拒否します。複雑な結合を含む表を扱う場合は、先に結合を解除するか、あるいはVBAで一度表を再生成するようなアルゴリズムが必要になります。
—
4. さらなる高みへ:エンジニアの視点
今回のコードは「基本」ですが、実務では「複数のキーで並び替える」ことが求められるシーンも多いでしょう。
`Table.Sort` は引数が多いため、慣れてきたら以下のパラメータも調べてみてください。
- `SortColumn`: 複数の列をキーにする際の起点。
- `CaseSensitive`: 大文字・小文字を区別するかどうか。
Word VBAは「泥臭い」と思われがちですが、オブジェクトの性質さえ理解すれば、これほど頼りになるツールはありません。
—
最後に:自動化の第一歩を踏み出したあなたへ
「マクロの記録」から卒業し、自分でコードを書いて動かす。この感覚を覚えたら、もうあなたは立派な自動化エンジニアの卵です。
まずはこのコードをコピーして、適当なWord表で動かしてみてください。うまく並び替わった瞬間のあの小さな感動こそが、エンジニアとしての成長の糧になります。
次は、「表の特定のセルに値を書き込む」方法や、「行を追加してデータを蓄積する」テクニックを一緒に学んでいきましょう。何か詰まったら、いつでもここに戻ってきてくださいね。応援しています!
