【入門編】【初心者向け】表の特定セルに日付を入力し、曜日を自動判定して色分けする – Word VBA解析バイブル

スポンサーリンク

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からデータを読み込んで表を自動生成する」や「特定の文字が含まれる行だけを太字にする」といった、より高度な自動化へと進むことができます。

プログラミングに魔法はありません。しかし、コードを書き続ければ、それは魔法のような効率化へと変わります。まずはこのコードを、あなたの環境で動かしてみてください。

何かあれば、いつでも戻ってきてくださいね。あなたの挑戦を応援しています。

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