【PR】 ワードマクロ集

ワード文書中の全オブジェクトを一括選択するマクロ【図解】

2024-08-24

アイキャッチ画像

こんな方におすすめ

  • ワード文書中のオブジェクトを全選択したい
  • ワード文書中のすべてのオブジェクトを一度に削除したい
  • ワード文書中のすべてのオブジェクトを別のファイルに一度にコピーしたい
  • ワード文書中のすべてのオブジェクトに特定の書式を一度に適用したい
【スポンサーリンク】

マクロの概要

このマクロは、ワード文書中のすべてのオブジェクトを一括選択するためのマクロ(Word VBA)です

オブジェクトをマウスで1つ1つ選択するのはとても大変です。

特に、ワード文書のページ数が多い場合は大変です。

そんなときに、このマクロが役立ちます

この記事のマクロを実行すると、ページ数にかかわらず、以下のイラストのように、Word文書中のすべてのオブジェクトが一括選択されます。

ワード文書中のオブジェクトを全選択するマクロの概要図

これが基本挙動です。

一方で、オブジェクトの種類によっては、手動でもマクロでも全選択できないものがあります。

この点について、最初に説明します。

後述の理由から、マクロは3種類用意しました。

ワード文書中のオブジェクトについて

まず、ワード文書中のオブジェクトの種類について説明します。

この説明のために、最初に、ワード文書中のオブジェクトの一覧を出す方法について説明します。

オブジェクトの一覧を見る方法

以下のステップで、ワード文書中のオブジェクトをページ単位で一覧表示できます。

step
1
「ホーム」タブを選択します

ワードのホームタブ

step
2
「選択」→「オブジェクトの選択と表示」を選択します

「選択」→「オブジェクトの選択と表示」

「オブジェクトの選択と表示」を選択すると、以下のように、そのページに含まれているオブジェクトの一覧がワード文書の右側に表示されます。

ワード上でのオブジェクト一覧の表示

この方法で右側に表示されるオブジェクトは、そのページに含まれているもののみです。

そのため、次のページのオブジェクトの一覧をワード画面右側に表示させるには、次のページに移動後に、どこでもいいのでページの中で左クリックする必要があります。

オブジェクトの種類

すこし話が逸れましたが、オブジェクトの種類に話を戻します。

浮動オブジェクトと行内オブジェクト

上のイラストのように、ワード画面右側のオブジェクト一覧で、目のマーク(緑の線で囲った部分)があるものは、浮動オブジェクト(自由に動かせる)です。

目のマークがないものは、行内オブジェクト(行の中から出せない)です。

これら2種類のオブジェクトのうち、複数のオブジェクトを同時に選択できるのは、浮動オブジェクトだけです。

行内オブジェクトは、マクロでも手動でも、そのままでは複数を同時選択することできません

まとめると、以下の表のようになります。

オブジェクトの種類動かせるか複数同時選択できるか
浮動オブジェクト
(Shape)
行内オブジェクト
(InlineShape)
××
浮動オブジェクトと行内オブジェクトの違い
【スポンサーリンク】

3種類のマクロの説明

上記の性質から、通常の方法でマクロを実行しても、選択されるのは浮動オブジェクトだけです。

そのため、行内オブジェクトを無理やりにでも選択したい場合は、浮動オブジェクトに変換後に選択するしかありません。

ペンギン
ペンギン

変換せずに、複数の行内オブジェクトを同時に選択できないんですか?

私は他の方法を知りません... おそらく、ワードの仕様です

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

以上のことを加味して、以下の3種類のマクロを用意しました。

マクロ番号マクロ名行内オブジェクトから
浮動オブジェクトへの変換
選択されるオブジェクト
SelectOnlyShapeObjectsなし浮動オブジェクトのみ
ConvertInlineShapesToShapesAndSelectOnlyNewShapesあり行内オブジェクトから新たに変換された浮動オブジェクトのみ
ConvertInlineShapesToShapesAndSelectNewShapesAndOldShapesあり・最初からある浮動オブジェクト
・行内オブジェクトから新たに変換された浮動オブジェクト
(結果的に、文書中のすべてのオブジェクトが選択されます)
3種類のマクロの説明

マクロでは、変換を行うため、レイアウトが崩れるリスクがあります。

特に、マクロ②と③では、この変換でファイルに変更が加わりますので、あらかじめバックアップをとるようにしてください。

各マクロを実行した場合の結果は、以下のとおりです。

マクロ①の実行結果

マクロ①を実行すると、以下のように浮動オブジェクトのみが選択されます。

マクロ②の実行結果

マクロ②を実行すると、以下のように、すべての行内オブジェクトが浮動オブジェクトに変換され、新たにできた浮動オブジェクトのみが選択されます。

マクロ①の実行結果と比較すると、新たに誕生した浮動オブジェクトのみが選択されているものの、レイアウトが崩れていることが分かります。

マクロ③の実行結果

マクロ③を実行すると、以下のように、すべての行内オブジェクトが浮動オブジェクトに変換され、新たにできた浮動オブジェクトも、最初から存在した浮動オブジェクトも、すべて選択されます。

マクロの用途

ペンギン
ペンギン

このマクロって何に使えるんですか?

例えば、以下のようなことができますよ

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

このマクロを実行すると、ワード文書中のオブジェクトがすべて選択されるため、

すべてのオブジェクトを一度に削除できます

すべてのオブジェクトをコピーまたは切り取りして、別のファイル(ワード、エクセル、パワーポイントなど)に一度貼り付けることができます

すべてのオブジェクトに特定の書式を一度に適用できます

【スポンサーリンク】

補足説明

マクロ②または③を実行した場合、ワード文書によっては以下のエラーメッセージがでる場合があります。

この場合、OKボタンを押してください(マクロの処理は続行されます)。

このメッセージがでた場合、そのワード文書には、浮動オブジェクトに変換できない行内オブジェクトが含まれています。

変換できなかった行内オブジェクトの数と、浮動オブジェクトに変換できた行内オブジェクトの数は、処理終了後に表示されるメッセージで確認してください。

変換できなかった行内オブジェクトは選択されません。

マクロの注意点

1点のみ、注意点があります。

このマクロは、「描画オブジェクトとテキストボックスを画面に表示する」にチェックが入った状態で使用してください。

通常は、最初からチェックが入っているはずです

チェックが入っていないと、浮動オブジェクトが見えない状態になります(見えないだけで存在はしています。チェックが入っていても行内オブジェクトは見えます)。

チェックが入っていないと、仮にマクロ①を実行しても、浮動オブジェクトが見えていないため、選択されているのかどうか目視できません

チェックが入っていない状態でマクロ②またはマクロ③を実行した場合は、見えている行内オブジェクトが浮動オブジェクトに変換されて見えなくなるため、あたかも消えててしまったような状態になりますので注意してください(実際は浮動オブジェクトとして存在しています)。

描画オブジェクトとテキストボックスを画面に表示する」のチェックは、以下の手順で確認できます。

step
1
ワードファイルを開きます

ワードファイルアイコン

step
2
ワード画面左上の「ファイル」→「オプション」を選択します

「ワードオプション」を選択する図

step
3
「詳細設定」→「構成内容の表示」を確認します

描画オブジェクトとテキストボックスを画面に表示する」にチェックが入っているかを確認してください。

ワードの「詳細設定」→「構成内容の表示」→「描画オブジェクトとテキストボックスを画面に表示する」

チェックが入っていない場合は、チェックを入れてから、マクロを使用してください。

【スポンサーリンク】

マクロの使用方法

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

こちらの記事に記載したステップ①8から22までを行います

ステップ①の11では、ご自身が選ばれたマクロに対応する名前(以下の3つのいずれか1つ)を選択してから、追加ボタンを押してください

  • マクロ① Project.Module1.SelectOnlyShapeObjects
  • マクロ② Project.Module1.ConvertInlineShapesToShapesAndSelectOnlyNewShapes
  • マクロ③ Project.Module1.ConvertInlineShapesToShapesAndSelectNewShapesAndOldShapes

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

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

こちらの記事に記載したステップ②を行います

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

(ご自身で作られたワードファイルを開いた際に、ご自身が選ばれたマクロアイコンがワード文書の左上に表示されるようになります)

(このマクロは、選択したいオブジェクトを含むワード文書を開き、そこからマクロを呼び出すことが基本の使用方法になるため、ステップ②を行う方が便利です)

マクロのコード

マクロ①のコード

現在の公開バージョン V01L03

Sub SelectOnlyShapeObjects()
'V01L03
    Dim doc As Document
    Dim shp As Shape
    Dim objRange As Range
    Dim shapeFound As Boolean
    Dim userResponse As VbMsgBoxResult
    Dim ShapeCount As Long

    ' ユーザーに処理を開始するかどうかを確認
    userResponse = MsgBox("すべての浮動オブジェクトを選択します" & vbCrLf & vbCrLf & "処理を開始してよろしいですか?", vbYesNo + vbQuestion + vbDefaultButton2, "確認")

    If userResponse = vbNo Then
        Exit Sub
    End If

    Set doc = ActiveDocument
    ShapeCount = doc.Shapes.Count
    shapeFound = False

    ' ページごとに浮動オブジェクトをカウントし、選択
    For Each objRange In doc.StoryRanges
        For Each shp In objRange.ShapeRange
            shp.Select Replace:=False
            shapeFound = True
        Next shp
    Next objRange
    
    If shapeFound Then
        MsgBox "すべての浮動オブジェクト(" & ShapeCount & "個)が選択されました。"
    Else
        MsgBox "浮動オブジェクトは存在しません。"
    End If
    
    Set shp = Nothing
    Set objRange = Nothing
    Set doc = Nothing

End Sub

マクロ②のコード

現在の公開バージョン V01L05

Sub ConvertInlineShapesToShapesAndSelectOnlyNewShapes()
'V01L05
    Dim doc As Document
    Dim inlineShp As InlineShape
    Dim shp As Shape
    Dim newShapes As Collection
    Dim userResponse As VbMsgBoxResult
    Dim conversionErrors As Long
    Dim inlineShapeCount As Long

    Set doc = ActiveDocument
    Set newShapes = New Collection
    
    inlineShapeCount = doc.InlineShapes.Count
    
    ' ユーザーに処理を開始するかどうかを確認
    userResponse = MsgBox("すべての行内オブジェクトを浮動オブジェクトに変換後に選択します" _
    & vbCrLf & "(変換に伴ってレイアウトが崩れる可能性があります)" _
    & vbCrLf & vbCrLf & "オブジェクト選択処理を開始してよろしいですか?", vbYesNo + vbQuestion + vbDefaultButton2, "確認")

    If userResponse = vbNo Then
        Exit Sub
    End If
    
    ' すべての行内オブジェクトを浮動オブジェクトに変換
    On Error Resume Next
    conversionErrors = 0
    For Each inlineShp In doc.InlineShapes
        inlineShp.Select
        Set shp = inlineShp.ConvertToShape
        If Err.Number <> 0 Then
            conversionErrors = conversionErrors + 1
            Err.Clear
        End If
        If Not shp Is Nothing Then
            newShapes.Add shp
        End If
    Next inlineShp
    On Error GoTo 0
    
    ' 新しく作成された浮動オブジェクトを選択
    If newShapes.Count > 0 Then
        Dim i As Integer
        For i = 1 To newShapes.Count
            If i = 1 Then
                newShapes(i).Select
            Else
                newShapes(i).Select Replace:=False
            End If
        Next i
        If conversionErrors > 0 Then
            MsgBox inlineShapeCount & "個中" & conversionErrors & "個の行内オブジェクトの変換に失敗しました。" & vbCrLf _
            & "変換に成功した新たな浮動オブジェクト(" & inlineShapeCount - conversionErrors & "個)のみが選択されています", vbExclamation
        Else
            MsgBox "行内オブジェクトから変換された新たな浮動オブジェクト(" & inlineShapeCount & "個)が選択されました。"
        End If
    Else
        If conversionErrors > 0 Then
            MsgBox "すべての行内オブジェクト(" & conversionErrors & "個)の変換に失敗しました", vbExclamation
        Else
            MsgBox "変換可能な行内オブジェクトは存在しませんでした。"
        End If
    End If
    
    ' オブジェクトの後処理
    Set shp = Nothing
    Set inlineShp = Nothing
    Set newShapes = Nothing
    Set doc = Nothing
End Sub

マクロ③のコード

現在の公開バージョン V01L05

Sub ConvertInlineShapesToShapesAndSelectNewShapesAndOldShapes()
'V01L05
    Dim inlineShp As InlineShape
    Dim shp As Shape
    Dim doc As Document
    Dim i As Integer
    Dim userResponse As VbMsgBoxResult
    Dim conversionErrors As Long
    Dim ShapeCount As Long
    Dim inlineShapeCount As Long
    
    Set doc = ActiveDocument
    
    ShapeCount = doc.Shapes.Count
    inlineShapeCount = doc.InlineShapes.Count

    ' ユーザーに処理を開始するかどうかを確認
    userResponse = MsgBox("すべてのオブジェクトを選択します" & vbCrLf & "(行内オブジェクトは浮動オブジェクトに変換後に選択されます)" _
    & vbCrLf & "(変換に伴ってレイアウトが崩れる可能性があります)" & vbCrLf & vbCrLf & _
    "オブジェクト選択処理を開始してよろしいですか?", vbYesNo + vbQuestion + vbDefaultButton2, "確認")

    If userResponse = vbNo Then
        Exit Sub
    End If

    ' すべての行内オブジェクトを浮動オブジェクトに変換
    On Error Resume Next
    conversionErrors = 0
    For Each inlineShp In doc.InlineShapes
        inlineShp.Select
        Set shp = inlineShp.ConvertToShape
        If Err.Number <> 0 Then
            conversionErrors = conversionErrors + 1 ' エラーのカウントを増やす
            Err.Clear
        End If
    Next inlineShp
    On Error GoTo 0

    ' すべての浮動オブジェクトを選択
    If doc.Shapes.Count > 0 Then
        ' 最初のシェイプを選択
        doc.Shapes(1).Select
        
        ' その他の浮動オブジェクトを選択に追加
        For i = 2 To doc.Shapes.Count
            doc.Shapes(i).Select Replace:=False
        Next i
        
        ' エラーがあった場合の通知
        If conversionErrors > 0 Then
            MsgBox inlineShapeCount & "個中" & conversionErrors & "個の行内オブジェクトの変換に失敗しました。" & vbCrLf _
            & "最初から存在した浮動オブジェクト(" & ShapeCount & "個)と変換された新たな浮動オブジェクト(" _
            & inlineShapeCount - conversionErrors & "個)のみが選択されています", vbExclamation
        Else
            MsgBox "すべてのオブジェクト(" & ShapeCount + inlineShapeCount & "個)が選択されました。"
        End If
    Else
        ' エラーがあった場合の通知
        If conversionErrors > 0 Then
            MsgBox inlineShapeCount & "個すべての行内オブジェクトの変換に失敗しました。" & vbCrLf _
            & "オブジェクトを選択できませんでした" & vbCrLf _
            & "(浮動オブジェクトは最初から存在していません)", vbExclamation
        Else
            MsgBox "オブジェクトは存在しません。"
        End If
    End If

    ' オブジェクトの解放
    Set inlineShp = Nothing
    Set shp = Nothing
    Set doc = Nothing
End Sub

最後まで読んでいただきましてありがとうございました!

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



【スポンサーリンク】

-ワードマクロ集
-,