【PR】 ワードマクロ集

表以外を非表示にして表だけを表示するワードマクロ【図解】

2025-05-04

ワード文書中の表以外の部分を非表示にして表だけを表示するマクロのアイキャッチ画像

このマクロは、ワード文書中の表以外の部分を非表示にして表だけを表示するマクロです。非表示部分を再表示する機能も備えています。

ワード文書中に点在する多数の表を1つ1つ閲覧/チェックするのが面倒な場合に、このマクロが役立ちます。

このマクロは、この記事の最後にあるコードをコピペするだけで使えます

マクロの概要

このマクロの概要をイラストで示します。

マクロの概要

ワンクリックで、表以外の部分の非表示と表示を切り替えることができます。

マクロの使用方法

各自のワード文書を開きます

表を含むワードファイルを開きます。

ワードファイルアイコン

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

表を含むワードファイルの例

マクロの実行ボタンをクリックします

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

クイックアクセスツールバー上のマクロ実行アイコン

モードを選択します

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

当マクロのモード選択メッセージ

表示モード切替

はい」:表以外の部分が非表示になり、表のみが表示されます。

いいえ」:すべての部分が表示されます。

キャンセル」:処理を中止します。

今回の例では、「はい」を選択します。

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

表のみを表するモードに切り替えた旨のメッセージ

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

ワード文書中の表以外の部分を非表示にして表のみを表示させた例

元に戻したい場合は、再度マクロを実行し、上記のメッセージで「いいえ」を選んでください。

すべての部分が再表示されます。

以上がマクロの使い方です。

マクロの処理の説明

非表示処理の詳細

このマクロを実行すると、表以外の部分が非表示になります。

この非表示化は、以下の処理を行って実現しています。

.表以外の部分のテキストを隠し文字に設定

隠し文字を非表示に設定

そのため、結果的に、1と2の変更がワード文書に加わります

しかし、「すべてを表示するモード」で処理を行うと、隠し文字の設定が解除され、すべてが表示されることから、結果的に上記の1と2の変更はなかったことになります。

つまり、ワード文書の内容は元の通りになります

しかし、一度はワード文書に変更を加えていることから、ワード文書を閉じようとすると、「このファイルの変更内容を保存しますか」というメッセージがでます。

このメッセージがでる理由は、上記の処理のみによるものです。

上記の処理による一時的な変更が気になる方は、ワードファイルのコピーを作成し、そのコピーで本マクロを実行してワード文書中の表をチェックするといいと思います。

陰キャくじら
陰キャくじら

注意点

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

ワード文書内に最初から隠し文字が存在する場合は、最初に以下のメッセージがでます。

ワード文書内に最初から隠し文字が存在する旨の注意メッセージ

隠し文字の設定が失われてもいい場合にのみ、本マクロを実行してください。

また、隠し文字の有無にかかわらず、本マクロの実行の前には、念のため、バックアップをとっておいてください。

マクロの使用準備

以下の手順を行うことで、各自のワードファイルから本マクロを簡単に呼び出せるようになります。

こちらの記事に記載したステップ①の手順0~6までを実施した後、ステップ①の手順で、この記事の最後にあるコードを標準モジュールのModule1にコピペします。

ステップ①8から22を行います

(ステップ①の11では、以下のマクロ名を選択してから、追加ボタンを押してください)

Project.Module1.ToggleDisplayMode

ステップ①11で追加するのは、上記のマクロ名のみです。

ステップ①13では、お好きなアイコンを選んでください)

ステップ①20での保存名は何でもかまいません)

ステップ①22の次に記載されている「動作確認」はスキップしていただいてかまいません)

ステップ②を行います

ステップ②を行うことで、このマクロをどのワード文書からも呼び出せるようになります。

(このステップ②を行うと、各自のワードファイルを開いた際に、各自が選んだマクロアイコンがワード文書の左上に表示されるようになります)

以上で、マクロを使用する準備が整いました!

マクロの削除

本マクロが不要になった場合は、こちらの手順で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
【スポンサーリンク】

-ワードマクロ集
-,