このマクロは、ワード文書中の表以外の部分を非表示にして表だけを表示するマクロです。非表示部分を再表示する機能も備えています。
ワード文書中に点在する多数の表を1つ1つ閲覧/チェックするのが面倒な場合に、このマクロが役立ちます。
このマクロは、この記事の最後にあるコードをコピペするだけで使えます。
マクロの概要
このマクロの概要をイラストで示します。

ワンクリックで、表以外の部分の非表示と表示を切り替えることができます。
マクロの使用方法
各自のワード文書を開きます
表を含むワードファイルを開きます。

今回の例では、以下のワードファイルを開きました。

マクロの実行ボタンをクリックします
ワード文書画面の左上にあるマクロ実行ボタンをクリックします。

モードを選択します
以下のメッセージボックスの「はい」と「いいえ」のどちらかを選んでモードを選択します。

今回の例では、「はい」を選択します。
「はい」選択すると処理が始まり、以下のメッセージがでます。

「OK」ボタンを押すと、以下のように、ワード文書中の表以外の部分が非表示になって表のみが表示されます。

元に戻したい場合は、再度マクロを実行し、上記のメッセージで「いいえ」を選んでください。
すべての部分が再表示されます。
以上がマクロの使い方です。
マクロの処理の説明
非表示処理の詳細
このマクロを実行すると、表以外の部分が非表示になります。
この非表示化は、以下の処理を行って実現しています。
1.表以外の部分のテキストを隠し文字に設定
2.隠し文字を非表示に設定
そのため、結果的に、1と2の変更がワード文書に加わります。
しかし、「すべてを表示するモード」で処理を行うと、隠し文字の設定が解除され、すべてが表示されることから、結果的に上記の1と2の変更はなかったことになります。
つまり、ワード文書の内容は元の通りになります。
しかし、一度はワード文書に変更を加えていることから、ワード文書を閉じようとすると、「このファイルの変更内容を保存しますか」というメッセージがでます。
このメッセージがでる理由は、上記の処理のみによるものです。
上記の処理による一時的な変更が気になる方は、ワードファイルのコピーを作成し、そのコピーで本マクロを実行してワード文書中の表をチェックするといいと思います。

注意点
このマクロでは、上記の処理を行う関係で、ワード文書内に最初から隠し文字が存在する場合、このマクロの処理を行うと、隠し文字の設定が消失します。
ワード文書内に最初から隠し文字が存在する場合は、最初に以下のメッセージがでます。

隠し文字の設定が失われてもいい場合にのみ、本マクロを実行してください。
また、隠し文字の有無にかかわらず、本マクロの実行の前には、念のため、バックアップをとっておいてください。
マクロの使用準備
以下の手順を行うことで、各自のワードファイルから本マクロを簡単に呼び出せるようになります。
1.こちらの記事に記載したステップ①の手順0~6までを実施した後、ステップ①の手順7で、この記事の最後にあるコードを標準モジュールのModule1にコピペします。
2.ステップ①の8から22を行います
(ステップ①の11では、以下のマクロ名を選択してから、追加ボタンを押してください)
Project.Module1.ToggleDisplayMode
ステップ①の11で追加するのは、上記のマクロ名のみです。
(ステップ①の13では、お好きなアイコンを選んでください)
(ステップ①の20での保存名は何でもかまいません)
(ステップ①の22の次に記載されている「動作確認」はスキップしていただいてかまいません)
3.ステップ②を行います
ステップ②を行うことで、このマクロをどのワード文書からも呼び出せるようになります。
(このステップ②を行うと、各自のワードファイルを開いた際に、各自が選んだマクロアイコンがワード文書の左上に表示されるようになります)
以上で、マクロを使用する準備が整いました!
マクロの削除
本マクロが不要になった場合は、こちらの手順でdotmファイルごと削除してください。
マクロのコード
以下は、本マクロのコードです。
上の説明(マクロの使用準備)にあるように標準モジュールにコピペしてご使用ください。
(以下のコードをすべて選択して、そのまま貼り付けてください)
現在の公開バージョンは、V01L02(公開日:2025/5/5)です。
Sub ToggleDisplayMode()
' V01L02
' 隠し文字の存在チェック
If HasHiddenText() Then
' 隠し文字が見つかった場合、ユーザーに確認
Dim confirmResponse As Integer
confirmResponse = MsgBox("この文書には隠し文字が含まれています。" & vbCrLf & _
"このマクロを実行すると、元の隠し文字の設定が失われます。" & vbCrLf & vbCrLf & _
"続行しますか?", vbYesNo + vbExclamation + vbDefaultButton2, "隠し文字の検出")
' ユーザーが「いいえ」を選択した場合は処理を中止
If confirmResponse = vbNo Then
Exit Sub
End If
End If
' ユーザーに選択してもらうダイアログボックスを表示
Dim userChoice As Integer
userChoice = MsgBox("表示モードを選択してください:" & vbCrLf & vbCrLf & _
"「はい」 → 表のみを表示するモード" & vbCrLf & _
"「いいえ」 → すべてを表示するモード", _
vbYesNoCancel + vbQuestion, "表示モード切替")
' ユーザーの選択に基づいて処理を実行
Select Case userChoice
Case vbYes
' モード1: 表以外を非表示にする
HideTextExceptTables
Case vbNo
' モード2: すべての非表示部分を表示する
ShowAllText
Case vbCancel
' キャンセルの場合、何もしない
Exit Sub
End Select
End Sub
Function HasHiddenText() As Boolean
' この関数は文書内に隠し文字が存在するかどうかをチェックする
Dim doc As Document
Dim fnd As Find
Dim hasHidden As Boolean
' デフォルトでは隠し文字なしと仮定
hasHidden = False
' アクティブなドキュメントを取得
Set doc = ActiveDocument
' 大きな文書の場合のパフォーマンス向上のため、画面更新を一時停止
Application.ScreenUpdating = False
' ステータスバーに処理状況を表示
Application.StatusBar = "文書内の隠し文字をチェック中..."
' 検索オブジェクトを使用して隠し文字を検索
Set fnd = doc.Range.Find
With fnd
.ClearFormatting
.text = ""
.Font.Hidden = True
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
' 検索実行
If .Execute Then
hasHidden = True
End If
End With
' ステータスバーを元に戻す
Application.StatusBar = ""
' 画面更新を再開
Application.ScreenUpdating = True
HasHiddenText = hasHidden
End Function
Sub HideTextExceptTables()
Dim doc As Document
Dim i As Long
Dim tableCount As Long
Dim myStory As Range
' ユーザー操作による割り込みを防止
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' マウスポインタを待機状態に変更
System.Cursor = wdCursorWait
' アクティブなドキュメントを取得
Set doc = ActiveDocument
' 文書内に表がない場合の処理
tableCount = doc.Tables.count
If tableCount = 0 Then
' 設定を元に戻してから終了
System.Cursor = wdCursorNormal
Application.StatusBar = ""
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "この文書には表がありません。", vbInformation, "表示モード切替"
Exit Sub
End If
' まず文書内のすべてのテキストを非表示にする
Application.StatusBar = "すべてのテキストを非表示にしています..."
Set myStory = doc.Range
myStory.Font.Hidden = True
' 次に、表のセル内容だけを表示に戻す - 大量の表がある場合は処理に時間がかかる
For i = 1 To tableCount
' 進捗状況をステータスバーに表示
Application.StatusBar = "表 " & i & " / " & tableCount & " を処理中..."
doc.Tables(i).Range.Font.Hidden = False
' 大量の表がある場合、10個ごとに画面を更新して応答性を維持
If i Mod 10 = 0 Then
DoEvents ' システムイベントの処理を許可
End If
Next i
' 非表示テキストが表示されないようにビュー設定を変更
ActiveWindow.View.ShowHiddenText = False
' 設定を元に戻す
System.Cursor = wdCursorNormal
Application.StatusBar = ""
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "表のみ表示モードに切り替えました。", vbInformation, "完了"
End Sub
Sub ShowAllText()
Dim doc As Document
' ユーザー操作による割り込みを防止
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' マウスポインタを待機状態に変更
System.Cursor = wdCursorWait
' アクティブなドキュメントを取得
Set doc = ActiveDocument
' 処理状況をステータスバーに表示
Application.StatusBar = "すべてのテキストを表示しています..."
' 非表示テキストも表示されるようにビュー設定を変更
ActiveWindow.View.ShowHiddenText = True
' すべてのテキストの非表示設定を解除
doc.content.Font.Hidden = False
' 設定を元に戻す
System.Cursor = wdCursorNormal
Application.StatusBar = ""
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "すべて表示モードに切り替えました。", vbInformation, "完了"
End Sub