Word VBAで「動的な表」を制する:日付から曜日を判定し、自動で色分けする帳票術
こんにちは。業務自動化の世界へようこそ。
「マクロの記録」ボタンを押すだけの世界から一歩踏み出し、自分の手でコードを書こうとしているあなた。その決断が、あなたの業務効率を劇的に変える第一歩です。
今回は、Word VBAにおける「表(Table)」の操作をマスターしましょう。ただ文字を流し込むだけではない、「日付を見て、曜日を判定し、土日祝に色を塗る」という、実務で死ぬほど役立つテクニックを伝授します。
—
1. なぜWordで「表」を扱うのが難しいのか?
Wordの表は、Excelのセル(A1など)と違い、「連続したオブジェクトの集合体」として管理されています。
初心者が陥りやすいのは、カーソル移動(Selection)を多用して画面をチラつかせ、処理を遅くすることです。
伝説的なエンジニアは「Selection」を使いません。「Range(範囲)」オブジェクトを直接操作し、メモリ上でスマートに完結させます。これが、高速で安定したマクロを書くための第一歩です。
—
2. 実践:日付から曜日を判定して色分けするコード
まずは、新規作成した文書の最初の表に対して、日付を入力し、土曜日なら青、日曜日なら赤に塗り分けるコードを見てみましょう。
Sub CreateSmartTable()
Dim doc As Document
Dim tbl As Table
Dim targetDate As Date
Dim i As Integer
Set doc = ActiveDocument
‘ 文書内に表がなければ終了
If doc.Tables.Count = 0 Then Exit Sub
Set tbl = doc.Tables(1)
targetDate = Date ‘ 今日の日付からスタート
‘ 表の2行目から最終行までループ(1行目はヘッダーと仮定)
For i = 2 To tbl.Rows.Count
‘ 1列目に日付、2列目に曜日を入力
tbl.Cell(i, 1).Range.Text = Format(targetDate, “yyyy/mm/dd”)
tbl.Cell(i, 2).Range.Text = WeekdayName(Weekday(targetDate))
‘ 曜日判定と色分け
Select Case Weekday(targetDate)
Case vbSaturday ‘ 土曜日なら青
tbl.Rows(i).Shading.BackgroundPatternColor = wdColorLightBlue
Case vbSunday ‘ 日曜日なら赤
tbl.Rows(i).Shading.BackgroundPatternColor = wdColorLightRed
End Select
‘ 次の日へ
targetDate = targetDate + 1
Next i
MsgBox “帳票の生成が完了しました!”, vbInformation
End Sub
—
3. コードの「魂」を読み解く(重要ポイント)
① `tbl.Cell(i, j).Range.Text`
これがWord VBAにおけるセルの呼び出し方です。`Range`プロパティを介することで、セルの「中身」にアクセスできます。`.Text`に値を代入するだけで、セル内に文字が流し込まれます。
② `Weekday関数`と`WeekdayName関数`
- `Weekday(targetDate)`: 日付を「1(日)〜7(土)」の数値に変換します。これがプログラミングの要です。
- `WeekdayName(数値)`: その数値を「月曜日」「火曜日」といった文字列に変換してくれます。
③ `Shading.BackgroundPatternColor`
ここが一番のポイントです。Wordの背景色は「塗りつぶし」ではなく「シェーディング(網掛け)」として定義されています。`wdColorLightBlue`のような定数を使うことで、色指定を直感的に行えます。
—
4. 初学者が必ずハマる「罠」と対策
罠:表の行数が足りない!
コードを実行して「実行時エラーが発生しました」となる場合、表の行数が足りていない可能性が高いです。
以下のコードをループの直前に追加すれば、自動で足りない分を補えます。
‘ 行数が足りなければ追加する
If tbl.Rows.Count < 10 Then
tbl.Rows.Add
End If
罠:Selectionを使ってしまう
「`Selection.MoveRight`」などを多用していませんか?それは手動操作をなぞっているだけで、コードが非常に不安定になります。常に `tbl.Cell(i, j)` のように、場所を直接指定する癖をつけてください。これが「エンジニアのコード」と「素人のコード」の分かれ道です。
—
最後に:ここをクリアすれば、あなたはもう脱・初心者です
今回解説した「日付の取得」→「条件判定」→「セルの装飾」という流れは、Word VBAにおける「帳票自動化」の基本中の基本です。
これが理解できれば、次は「CSVからデータを読み込んで表を自動生成する」や「特定の文字が含まれる行だけを太字にする」といった、より高度な自動化へと進むことができます。
プログラミングに魔法はありません。しかし、コードを書き続ければ、それは魔法のような効率化へと変わります。まずはこのコードを、あなたの環境で動かしてみてください。
何かあれば、いつでも戻ってきてくださいね。あなたの挑戦を応援しています。
