【Word VBA】特定の文字列を含むセルを着色するWordマクロ

2016年10月10日

先日のOffice祭り2016 in Hiroshima に来られた私のブログの読者の方から質問をいただきました。さっそく会場でサンプルコードを作ってみました。

このマクロでできること

特定の文字列を含む表内のセルを着色します。

(実行前)

Wordマクロと書かれたセルがいくつかあります。Wordマクロを探して着色します。

表のセル着色

(実行後)

表のセル着色

マクロの解説

マクロ1では、カーソルが置かれている表を処理対象にしています。マクロ2とマクロ3では、現在カーソルが置かれている文書(アクティブな文書)を処理対象にしています。

セルがWordマクロという文字列を含むかどうかの判定を、InStr関数を用いて調べています。

この関数は、文字列を見つけると開始位置を返します。また、文字列を見つけられなかった場合には、0を返します。

よって、返した値が0より大きい場合には、セル内に文字列があったと判断できます。

 

マクロ3では、すべてのセル内の文字列を判断するのではなく、表単位でもWordマクロという文字列があるのかどうかを判定します。

大きなかたまりで判定をするので、セルごとに判定するよりも高速になります。

先日の「【コード】上付きに見えるけど上付きではない文字を上付きに変換するWordマクロ(その2)」の高速化の考え方に似ています。

マクロ1


Sub 特定の文字列を含むセルの背景色を明るい緑色にする_カーソルのある表()

 Dim myCell As Cell

 For Each myCell In Selection.Tables(1).Range.Cells
  If InStr(1, myCell.Range.Text, "Wordマクロ") > 0 Then
   myCell.Shading.BackgroundPatternColorIndex = wdBrightGreen
  End If
 Next

End Sub

マクロ2


Sub 特定の文字列を含むセルの背景色を明るい緑色にする_すべての表1()

 Dim myCell As Cell
 Dim myTable As Table

 For Each myTable In ActiveDocument.Tables

  For Each myCell In myTable.Range.Cells
   If InStr(1, myCell.Range.Text, "Wordマクロ") > 0 Then
    myCell.Shading.BackgroundPatternColorIndex = wdBrightGreen
   End If
  Next

  Next

End Sub

 

マクロ3


Sub 特定の文字列を含むセルの背景色を明るい緑色にする_すべての表2()

 Dim myCell As Cell
 Dim myTable As Table
 
 For Each myTable In ActiveDocument.Tables
  
  If InStr(1, myTable.Range.Text, "Wordマクロ") = 0 Then
   '何もしない
  Else
   For Each myCell In myTable.Range.Cells
    If InStr(1, myCell.Range.Text, "Wordマクロ") > 0 Then
     myCell.Shading.BackgroundPatternColorIndex = wdBrightGreen
    End If
   Next
  End If
 Next
  
End Sub

-コード
-, ,