【入門編】【初心者向け】表の特定の列を基準に、行全体を昇順・降順で並び替える基本コード – Word VBA解析バイブル

スポンサーリンク
スポンサーリンク

「マクロの記録」を卒業せよ。Word VBAで表を自在に操る「ソート(並べ替え)」の極意

「マクロの記録」ボタンを押して、必死に操作を記録する。
動けばラッキー、動かなければ「自分には才能がないのかも……」と落ち込む。

もしあなたが今、そんな状態にあるとしたら、まずはお伝えさせてください。あなたは間違っていません。ただ、まだ「オブジェクト」という概念の扉を開けていないだけなのです。

こんにちは。今日は、Word VBAの世界へようこそ。
「マクロの記録」という魔法の杖を置き、自分の手でコードという設計図を描き始めるための第一歩として、「表(Table)の並べ替え」をマスターしましょう。

これができるようになると、バラバラに並んだデータ行を、一瞬で「金額順」や「名前順」に整列させることができるようになります。これは単なるテクニックではなく、業務自動化における「武器」を手に入れるプロセスです。

1. なぜ「マクロの記録」ではダメなのか?

「マクロの記録」で表の並べ替えを行うと、驚くほど長いコードが生成されます。
`Selection.GoTo…` や `Selection.MoveDown…` といった、「マウスでどこをクリックしたか」という記録ばかりが並ぶのです。

これには致命的な弱点が2つあります。

1. 壊れやすい: 表の行数が一つ変わるだけで、記録された動きは無意味になります。
2. 遅い: 「画面上の動き」を再現しようとするため、処理のたびに画面がチカチカし、パフォーマンスが著しく低下します。

プロのエンジニアは、マウスの動きではなく、「Table(表)というオブジェクトに対して、Sort(並べ替え)という命令を直接出す」という書き方をします。これが、今回学ぶ「本質的な書き方」です。

2. 実践:特定の列を基準に並べ替える基本コード

では、具体的なコードを見ていきましょう。
ここでは、「文書内の1番目の表の、2列目を基準に、昇順(小さい順)で並べ替える」というシナリオを想定します。

Sub SortTableByColumn()
    ' ===========================================================
    ' 目的: 文書内の最初の表の、2列目を基準に昇順で並べ替える
    ' ターゲット: 初学者向け・実用コード
    ' ===========================================================
    
    Dim targetTable As Table ' 操作対象の表を格納するための変数(オブジェクト)
    
    ' 1. エラーハンドリング(表が存在しない場合に備える)
    If ActiveDocument.Tables.Count = 0 Then
        MsgBox "文書内に表が見つかりません。", vbExclamation
        Exit Sub
    End If

    ' 2. 操作対象の表をセットする
    ' ここでは「1番目の表」を指定しています
    Set targetTable = ActiveDocument.Tables(1)

    ' 3. 並べ替え(Sort)の実行
    ' ここが心臓部です。引数(設定値)の意味を理解しましょう。
    targetTable.Sort _
        ExcludeHeader:=True, _
        Field:=2, _
        SortField:="Ascending"

    ' 完了通知
    MsgBox "並べ替えが完了しました!", vbInformation
End Sub

💡 コードの「魂」を読み解く(解説)

このコードの核となるのは、`targetTable.Sort` の部分です。ここにある「引数(ひきすう)」こそが、エンジニアのコントロール能力そのものです。

  • `ExcludeHeader:=True`

これが最も重要です。「見出し行(ヘッダー)を除外するか?」という問いに対し、`True(はい)` と答えています。これを行わないと、「名前」「日付」といった見出し行まで並べ替えの対象になり、データの途中に見出しが紛れ込むという悲劇が起こります。

  • `Field:=2`

「何列目を基準にするか」を指定します。今回は2列目(例えば「金額」や「日付」の列)を基準にしています。

  • `SortField:=”Ascending”`

「昇順(小さい順)」を指定しています。逆に「降順(大きい順)」にしたい場合は、`”Descending”` と書き換えるだけです。

3. 陥りやすい「3つの罠」を回避せよ

ここからは、現場でよく遭遇するトラブルについてお話しします。これを知っているだけで、あなたのデバッグ(修正)時間は劇的に短縮されます。

① セルの結合(Merged Cells)の罠

Wordの表において、「セルの結合」は天敵です。
`Sort` メソッドは、表が綺麗な格子状(グリッド状)であることを前提としています。一部のセルが結合されていると、「並べ替えようとしたけど、構造が複雑すぎて無理です!」とVBAがエラーを吐いて止まってしまいます。

  • 対策: 並べ替えを行う列に、結合されたセルが含まれていないか確認してください。

② 表のインデックス(番号)の罠

`ActiveDocument.Tables(1)` と書いた場合、それは「文書内の1番目の表」を指します。しかし、文書に表が複数ある場合、意図しない表を操作してしまうことがあります。

  • 対策: 確実に操作したい場合は、表の直前に「特定のキーワード」を置くか、表に「ブックマーク」を設定して、それを目印にする高度なテクニックが必要になります(これは次のステップでお教えしましょう)。

③ データ型の罠

「数値」に見えても、実は「文字列」として入力されている場合があります。
例えば、`1, 10, 2` という並びになった場合、文字列としてソートされると `1, 10, 2` (1の次に10が来る)という順番になってしまいます。

  • 対策: 数値をソートする場合は、セル内のデータが正しく数値形式であることを確認してください。

4. まとめ:ここをクリアすれば、基本はバッチリ!

今回学んだことを振り返りましょう。

1. 「マウスの動き」ではなく「オブジェクト(Table)」を操作する。
2. `ExcludeHeader:=True` で見出しを守る。
3. `Field` で列を、`SortField` で順序を決める。

「マクロの記録」から脱却し、このように「何に対して(Target)」「何を(Method)」「どんな条件で(Arguments)」行うのかを意識してコードを書く。これが、プログラミングへの入り口です。

一歩ずつで大丈夫です。まずは、お手元のWordで、適当な表を作ってこのコードを貼り付けてみてください。自分の書いたコードで表が「シュッ」と整列する瞬間、あなたは間違いなく、自動化エンジニアとしての第一歩を踏み出しています。

Happy Coding! 次のステップでお会いしましょう。

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