先日の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