Word VBA ワード文書の書式設定

ホームページのトップに戻る目次

Word VBA 目次

スタイル一覧を出力
 ・Selection オブジェクトを使用する
 ・Range オブジェクトを使用する
ワード文書の書式設定
 ・VBA の起動ボタンを設置する方法
 ・Selection、Range で選択する方法
 ・表を使用する
ワード文書の語群をExcelの辞書を使って置換
 ・参照設定
 ・文字列の検索、置換、および書式設定
 ・Word の組み込みのダイアログ ボックスを表示する
 ・コレクションからオブジェクトを取得する
テキスト・ファイルの文字コード変換

索引
 

ワード文書の書式設定

ばらばらで作成されたワード文書の書式を、ひとつの標準書式に合わせるために作りました。

下のマクロとサンプル文書をダウンロードできます。→formatting05.zip


Option Explicit
   Dim 置換対象文書名 As String
   Dim 本文領域 As Range
   Dim センテンス数 As Integer
   Dim 単語数 As Long
   Dim ボックス数 As Integer
   Dim ボックス名 As String
   Dim 開始行 As Integer
   Dim 文字列 As String
   Dim 処理行 As Integer
Public 開始日時 As Variant
Public 終了日時 As Variant
   Dim 現在のパス As String
   
   
Sub 標準書式に合わせる()

   Dim ヘッダーフッターの要否 As Integer
   
   Call 対象文書を指定するダイアログ

   ヘッダーフッターの要否 = _
   MsgBox("ヘッダーフッターをテンプレートからコピーしますか?" _
   , vbInformation + vbYesNo + vbDefaultButton2, "ヘッダーフッターの要否確認")
   'vbInformation は、情報メッセージ アイコン。
   'vbYesNo は、[はい] と [いいえ] のボタンを表示。
   'vbDefaultButton2 は、2つめのボタンをデフォルトにする
   If ヘッダーフッターの要否 = 6 Then  ' 6*Yes, 7:No
      Call ヘッダーフッターをテンプレートからコピー
   End If
   
   開始日時 = Now                ' 開始時刻を変数に格納します。
   
   Call 参考特別処理
   
   Call 表の罫線の太さ1以下を075に、1を超を150に統一
   
   Call 文字サイズを105ptに統一
   
   Call 行間を最少値間隔を18ptに

   Call リンクをすべて解除
      
   Call 全角英数を半角に統一
   
   Call 全角括弧を半角に統一
   
   Call 全角スペース1つを半角スペース2つに
   
   Call 読点。を全角ピリオドに
   
   'この処理より先に、全角英数と全角括弧を半角に統一しておくこと
   Call 細字をMS明朝に、太字をMSゴシックに統一する
   
   Call テキストボックスの余白を全て0mmにし、ボックス内の文字が全部表示されるように行間を12ptに
      
   Selection.MoveUp Unit:=wdScreen, Count:=1
   
   終了日時 = Now
   MsgBox "処理を終了しました。" & vbNewLine & "処理時間は、" _
   & Format(終了日時 - 開始日時, "hh時間nn分ss秒") & " でした。"
   
   Call スペルチェックと文章校正を起動

End Sub


Sub 読点。を全角ピリオドに()
    Documents(置換対象文書名).Activate

        With Selection.Find
          .ClearFormatting
          .Text = "。"
          .Forward = True
          .Wrap = wdFindContinue
          .Format = False
          .MatchCase = False
          .MatchByte = False   '全角と半角を区分しない。(半角「。」も対象になる。)
          .MatchAllWordForms = False
          .MatchSoundsLike = False
          .MatchFuzzy = False
          .MatchWildcards = False 'ワイルドカードは使わなくて良い。
          .Replacement.ClearFormatting
          .Replacement.Text = "."
          .Font.Hidden = False
        End With

        Selection.Find.Execute Replace:=wdReplaceAll

End Sub


Sub 全角スペース1つを半角スペース2つに()

    Documents(置換対象文書名).Activate

        With Selection.Find
          .ClearFormatting
          .Text = " "          '全角空白1文字
          .Forward = True
          .Wrap = wdFindContinue
          .Format = False
          .MatchCase = False
          .MatchByte = True   '全角と半角を区分する
          .MatchAllWordForms = False
          .MatchSoundsLike = False
          .MatchWildcards = False
          .MatchFuzzy = False
          .Replacement.ClearFormatting
          .Replacement.Text = "  " '半角空白2文字
          .Font.Hidden = False
        End With

        Selection.Find.Execute Replace:=wdReplaceAll

End Sub


Sub スペルチェックと文章校正を起動()
   Documents(置換対象文書名).Activate
   If Options.CheckGrammarWithSpelling = True Then
      ActiveDocument.CheckGrammar
   Else
      ActiveDocument.CheckSpelling
   End If
End Sub


Sub 対象文書を指定するダイアログ()

   置換対象文書名 = ""
   現在のパス = ThisDocument.Path

   ChangeFileOpenDirectory ThisDocument.Path
   
   MsgBox "置換対象のワード文書を指定します。"
   With Dialogs(wdDialogFileOpen)
      .Name = "*.doc*"
      If .Show = -1 Then
         置換対象文書名 = .Name 'パス無しの文書ファイル名
      End If
   End With
   
   If 置換対象文書名 = "" Then
      MsgBox "対象文書が取得できませんでした。終了します。"
      End
   ElseIf 置換対象文書名 = ThisDocument.Name Then
      MsgBox "指定した文書は、このマクロの文書自身です。終了します。"
      End
   End If

   Documents(置換対象文書名).Activate
End Sub


Sub 表の罫線の太さ1以下を075に、1を超を150に統一()
'さらに、表内の行間を12ptにして余白を0mmに
'gekkasuikou 月下推敲 さんのコードを使わせていただいています。
'http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1350770263

   Dim 表 As Table
   Dim 罫線 As Border
   Dim セル数 As Long
   
   For Each 表 In Documents(置換対象文書名).Tables   'すべての表について処理を繰り返す
      For セル数 = 1 To 表.Range.Cells.Count         '表内のすべてのセルについて処理を繰り返す
         For Each 罫線 In 表.Range.Cells(セル数).Borders 'セルのすべての罫線について処理を繰り返す
            With 罫線
               If 罫線 = True Then
                  If .LineWidth > wdLineWidth100pt Then 'しきい値
                     .LineWidth = wdLineWidth150pt '太線
'                     Stop
                  Else
                     .LineWidth = wdLineWidth075pt '細線
                  End If
               End If
            End With
         Next 罫線
         
         With 表.Range.Cells(セル数)
            .TopPadding = MillimetersToPoints(0)
            .BottomPadding = MillimetersToPoints(0)
            .LeftPadding = MillimetersToPoints(0)
            .RightPadding = MillimetersToPoints(0)
         End With
      Next セル数
      
      With 表
        .TopPadding = 0
        .BottomPadding = 0
        .LeftPadding = 0
        .RightPadding = 0
        .Spacing = 0
      End With
      
      With Selection.ParagraphFormat
         .LineSpacingRule = wdLineSpaceAtLeast
         .LineSpacing = 12
      End With
   Next 表
   
End Sub


Sub 参考特別処理()
 '参考部分は、太字ではなく全て細字にする。「参考」の表記は、「参    考」
 '文書の後半部分に限定して、探索
 
   If Documents(置換対象文書名).Sentences.Count > 200 Then
      開始行 = 100
   Else
      開始行 = Documents(置換対象文書名).Sentences.Count / 2
   End If
   
   '最後尾から探索
   For センテンス数 = Documents(置換対象文書名).Sentences.Count To 開始行 Step -1
   
      Documents(置換対象文書名).Sentences(センテンス数).Select
      文字列 = Documents(置換対象文書名).Sentences(センテンス数).Text
      
      If Left(文字列, 1) = "参" Then
         文字列 = Replace(文字列, " ", "")
         文字列 = Replace(文字列, " ", "")
         
         If Left(文字列, 2) = "参考" Then
            文字列 = Documents(置換対象文書名).Sentences(センテンス数).Text
            
            Documents(置換対象文書名).Sentences(センテンス数).Text = _
            "参    考" & Right(文字列, Len(文字列) - InStr(文字列, "考") - 1)
            
            For 処理行 = センテンス数 To Documents(置換対象文書名).Sentences.Count
               Documents(置換対象文書名).Sentences(処理行).Select
               Selection.Font.Bold = False
            Next 処理行
            Exit For
         End If
      End If
   Next センテンス数
   
'Stop
End Sub


Sub ヘッダーフッターをテンプレートからコピー()
   Dim テンプレート名 As String

      With Dialogs(wdDialogFileOpen)
         .Name = "*.doc*"
         If .Show = -1 Then
            テンプレート名 = .Name 'パス無しの文書ファイル名
         End If
      End With
      
      If テンプレート名 = "" Then
         Exit Sub
      End If
   
      Documents(テンプレート名).Activate

      Call ページ設定内容を全てコピー(Documents(テンプレート名).PageSetup, Documents(置換対象文書名).PageSetup)

      ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
      Selection.WholeStory
      Selection.Copy

      Documents(置換対象文書名).Activate
      ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
      Selection.WholeStory
      Selection.PasteAndFormat (wdPasteDefault)
      
      
      Documents(テンプレート名).Activate
      ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
      Selection.WholeStory
      Selection.Copy
      
      Documents(置換対象文書名).Activate
      ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
      Selection.WholeStory
      Selection.PasteAndFormat (wdPasteDefault)

      
      ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = True '先頭ページのヘッダは別物
      

      Documents(テンプレート名).Activate
      ActiveWindow.ActivePane.View.SeekView = wdSeekFirstPageHeader
      Selection.WholeStory
      Selection.Copy
      
      Documents(置換対象文書名).Activate
      ActiveWindow.ActivePane.View.SeekView = wdSeekFirstPageHeader
      Selection.WholeStory
      Selection.PasteAndFormat (wdPasteDefault)

      
      Documents(テンプレート名).Activate
      ActiveWindow.ActivePane.View.SeekView = wdSeekFirstPageFooter
      Selection.WholeStory
      Selection.Copy
      
      Documents(置換対象文書名).Activate
      ActiveWindow.ActivePane.View.SeekView = wdSeekFirstPageFooter
      Selection.WholeStory
      Selection.PasteAndFormat (wdPasteDefault)
      
      Documents(テンプレート名).Close SaveChanges:=False

      '終了時に、「クリップボードに大きなデータがあります。
      'Word を終了した後に、このデータを他のアプリケーションで利用しますか?」
      'のメッセージを出さないように、クリップ・ボードに小さいダミー・データを入れる。
      ActiveDocument.Range.Words(1).Copy

End Sub


Sub テキストボックスの余白を全て0mmにし、ボックス内の文字が全部表示されるように行間を12ptに()

'   For ボックス数 = 1 To Documents(置換対象文書名).Shapes.Count
'
'      Documents(置換対象文書名).Shapes(ボックス数).Select
'      ボックス名 = Documents(置換対象文書名).Shapes(ボックス数).Name
'      If InStr(ボックス名, "Text") > 0 Then
'         With Selection
'            With .ShapeRange.TextFrame
'               .MarginLeft = 0#
'               .MarginRight = 0#
'               .MarginTop = 0#
'               .MarginBottom = 0#
'               .AutoSize = True
'            End With
'            With .ParagraphFormat
'               .LineSpacing = 12
'               .LineSpacingRule = wdLineSpaceAtLeast
'            End With
'         End With
'      End If
'   Next ボックス数
   '↑上のコードだと、描画キャンバス上のテキスト・ボックスを操作できない。そこで、
   
   '初心者備忘録 http://www.ka-net.org/
   'の下記のコードを使わせていただいています。
   '下記のコードは、Word 2007〜で正しく動作します。

   'テキストボックス等Shapeオブジェクトのテキストのみを置換するWordマクロ
   'http://www.ka-net.org/blog/?p=859
   Dim 図形 As Shape
   Dim グループ図形 As Shape
   Dim キャンバス図形 As Shape
   Dim キャンバスグループ化図形 As Shape
   
   For Each 図形 In ActiveDocument.Shapes
      If 図形.Type = msoCanvas Then
         '描画キャンバスの場合の処理
         For Each キャンバス図形 In 図形.CanvasItems
           If キャンバス図形.Type = msoGroup Then
             For Each キャンバスグループ化図形 In キャンバス図形.GroupItems
             
               With キャンバスグループ化図形
                  With .TextFrame
                     .MarginLeft = 0#
                     .MarginRight = 0#
                     .MarginTop = 0#
                     .MarginBottom = 0#
                     .AutoSize = True
                  End With
                  With Selection.ParagraphFormat
                     .LineSpacing = 12
                     .LineSpacingRule = wdLineSpaceAtLeast
                  End With
               End With
             Next
           Else
               With キャンバス図形
                  With .TextFrame
                     .MarginLeft = 0#
                     .MarginRight = 0#
                     .MarginTop = 0#
                     .MarginBottom = 0#
                     .AutoSize = True
                  End With
                  With Selection.ParagraphFormat
                     .LineSpacing = 12
                     .LineSpacingRule = wdLineSpaceAtLeast
                  End With
               End With
           End If
         Next
      ElseIf 図形.Type = msoGroup Then
         'グループ化されている場合の処理
         For Each グループ図形 In 図形.GroupItems
            With グループ図形
               With Selection.ShapeRange.TextFrame
                  .MarginLeft = 0#
                  .MarginRight = 0#
                  .MarginTop = 0#
                  .MarginBottom = 0#
                  .AutoSize = True
               End With
               With Selection.ParagraphFormat
                  .LineSpacing = 12
                  .LineSpacingRule = wdLineSpaceAtLeast
               End With
            End With
         Next
      Else
         With 図形
            With .TextFrame
               .MarginLeft = 0#
               .MarginRight = 0#
               .MarginTop = 0#
               .MarginBottom = 0#
               .AutoSize = True
            End With
            With Selection.ParagraphFormat
               .LineSpacing = 12
               .LineSpacingRule = wdLineSpaceAtLeast
            End With
         End With
      End If
   Next
   
End Sub


Sub 細字をMS明朝に、太字をMSゴシックに統一する()
'英文の場合は、細字:Times New Roman、太字:Arial)に統一する
'(ヘッダー, フッターは除く)

   Dim 全角文字数 As Integer
   
   If Documents(置換対象文書名).Sentences.Count > 1 Then
      文字列 = Documents(置換対象文書名).Sentences(1).Text _
      & Documents(置換対象文書名).Sentences(2).Text
      
   Else
      文字列 = Documents(置換対象文書名).Paragraph(1).Text
   End If
   

   全角文字数 = LenB(StrConv(文字列, vbFromUnicode)) - Len(文字列)
   Debug.Print 文字列 & vbNewLine & 全角文字数
   '最初の2行に、全角文字が含まれていれば、日本語文書と判断

   If 全角文字数 > 0 Then      '日本語
      For 単語数 = 1 To Documents(置換対象文書名).Words.Count
      
         Documents(置換対象文書名).Words(単語数).Select
   
         If Selection.Font.Bold = False Then
            Selection.Font.Name = "MS 明朝"
         Else
            Selection.Font.Name = "MS ゴシック"
         End If
      Next 単語数
   Else                        '英語
      For 単語数 = 1 To Documents(置換対象文書名).Words.Count
      
         Documents(置換対象文書名).Words(単語数).Select
   
         If Selection.Font.Bold = False Then
            Selection.Font.Name = "Times New Roman"
         Else
            Selection.Font.Name = "Arial"
         End If
      Next 単語数
   End If
   
End Sub


Sub 文字サイズを105ptに統一()
'(ヘッダー, フッター, 表, グラフ及び図のテキストボックスは除く)

   For センテンス数 = 1 To Documents(置換対象文書名).Sentences.Count
   
      Documents(置換対象文書名).Sentences(センテンス数).Select

      If Selection.Type = wdSelectionNormal Then
         Selection.Font.Size = 10.5
      End If
   Next センテンス数

End Sub


Sub 行間を最少値間隔を18ptに()
'(表は除く)

   For センテンス数 = 1 To Documents(置換対象文書名).Sentences.Count
   
      Documents(置換対象文書名).Sentences(センテンス数).Select

      If Selection.Type = wdSelectionNormal Then
      
         With Selection.ParagraphFormat
            .LineSpacingRule = wdLineSpaceAtLeast
            .LineSpacing = 18
         End With
      End If
   Next センテンス数

End Sub


Sub リンクをすべて解除()
'マイクロソフト サポート Microsoft Word 2000 文書のメタデータを最小限にする方法
'http://support.microsoft.com/kb/237361/ja
'すべてのハイパーリンクを文書から削除

     Dim 文書の領域 As Range
     Dim ハイパーリンク As Hyperlink

'     For Each 文書の領域 In ActiveDocument.StoryRanges  'リンクの消しモレがでる

     For Each 文書の領域 In ActiveDocument.Sentences
         For Each ハイパーリンク In 文書の領域.Hyperlinks
             ハイパーリンク.Delete
         Next
     Next

End Sub


Sub 全角英数を半角に統一()
'pahoo さんのコードを使わせていただいています。
'http://q.hatena.ne.jp/1228303771
    Dim strPattern As String
    strPattern = "[" & Chr(&H824F) & "-" & Chr(&H829A) & "]{1,}"
    myconv strPattern, vbNarrow
End Sub

Sub 全角括弧を半角に統一()
'http://q.hatena.ne.jp/1228303771
    Dim strPattern As String
    strPattern = "[()[]]"
    myconv strPattern, vbNarrow
End Sub

Private Sub myconv(ByVal strPattern As String, ByVal lngCase As Long)
'http://q.hatena.ne.jp/1228303771
'英数字だけ全角半角変換処理
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = strPattern
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .MatchFuzzy = False
        .MatchWildcards = True 'ワイルドカードを使用
    End With
    Do While Selection.Find.Execute
        Selection.Text = StrConv(Selection.Text, lngCase)
        Selection.Collapse wdCollapseEnd
    Loop
End Sub


Public Sub ページ設定内容を全てコピー(ByVal コピー元 As PageSetup, ByVal コピー先 As PageSetup)
   '藤代千尋さん   2004-09-16(木) 13:36
   'http://www.gizcollabo.jp/vbtomo/boards/vbchoshoqa.php?do=spread&num=1401
   '> ブックAの各シートのPageSetupオブジェクトを保持しておき、
   '> ブックBの各シートのPageSetupオブジェクトにコピーしたい
   '
   '2)ページ設定のそれぞれの設定をコピーする

   With コピー先
        
      .PageWidth = コピー元.PageWidth
      .PageHeight = コピー元.PageHeight
      .CharsLine = コピー元.CharsLine
      .LinesPage = コピー元.LinesPage
      .LayoutMode = コピー元.LayoutMode
      .LeftMargin = コピー元.LeftMargin
      .RightMargin = コピー元.RightMargin
      .TopMargin = コピー元.TopMargin
      .BottomMargin = コピー元.BottomMargin
        
      .Orientation = コピー元.Orientation            '' 印刷の向き。
      .PaperSize = コピー元.PaperSize                '' 用紙サイズ。

    End With
End Sub


この種類の目次に戻る↑ 索引へ↓ トップページに戻る


VBA の起動ボタンを設置する方法

作成した VBA を、画面から起動するためにボタンを設置します。
ボタンを追加したい位置にカーソルを置いた上で、メニューから ActiveX コントロールのボタンを選択します。
メニューからボタンを選択
ボタンの上で、マウス右クリックして、プロパティを選択します。
設置したボタンのプロパティを選択
プロパティで、オブジェクト名と Caption を適当な名前に変更します。
とを変更
ボタンをクリックすると、VBE の画面が開いて、ボタン・クリックの Sub ができているので、ここに起動させたいコードを登録します。
コードを追加

この種類の目次に戻る↑ 索引へ↓ トップページに戻る


Selection、Range で選択する方法

ワードの VBA では、文書の部分を Selection、Range で取得して、処理をします。
この対象を指定する方法は、下記の階層になっています。

下の表は、下記サイトから転載させていただいています。
Access Home Page by pPoyWord VBA Tips by pPoy
Word VBA 基礎: 本文・段落・文・単語の範囲指定方法
http://www.nurs.or.jp/~ppoy/access/etc/wdA002.html
Documents開いている Word ファイルの文書全て
ActiveDocument作業中の文書全体
Content本文 (のストーリー、脚注やヘッダは含まない)
−−Paragraph段落 (改行マークで区切られた部分)
−−−Sentences段落内のすべての文章
−−−Sentence文 (読点(。)で区切られた部分) の1つ
−−−−Words単語と単語の直後のスペースで構成されている (Word オブジェクトはない)
−−−−−Characters1 文字ずつの文字の集まり (Character オブジェクトはない)
Shapes 文書内及び、すべてのヘッダーとフッターに含まれる すべての図形
Tables 文書内及び、すべてのヘッダーとフッターに含まれる すべての表

解説:

Document.Sentences プロパティ は、文書内のすべての文を表す Sentences コレクションを取得します。値の取得のみ可能です。
 構文
 .Sentences
    Document オブジェクトを表す変数を指定します。

 コレクションのメンバを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。

 次の使用例は、作業中の文書の最初の文をコピーします。
ActiveDocument.Sentences(1).Copy

 次の使用例は、作業中の文書の最後の文を削除します。
ActiveDocument.Sentences.Last.Delete


Sentences コレクション オブジェクト は、選択範囲、指定範囲、または文書内のすべての文を表す Range オブジェクトのコレクションです。Sentence オブジェクトはありません。

 Sentences プロパティを使用して Sentences コレクションを取得します。

次の使用例は、選択した文の数を表示します。
MsgBox Selection.Sentences.Count & " sentences are selected"

 Sentences(Index) を使用して、文を表す Range オブジェクトを取得します (Index にはインデックス番号を指定)。インデックス番号は、Sentences コレクションでの文の位置を表します。

次の使用例は、作業中の文書の最初の文に書式を設定します。
With ActiveDocument.Sentences(1)
    .Bold = True
    .Font.Size = 24
End With

 文書内のこのコレクションに Count プロパティを使用して、メイン ストーリー (文書内でほかの領域とは区別できるテキストを含む文書の領域。たとえば、文書に本文、脚注、およびヘッダーが含まれている場合は、本文ストーリー、脚注ストーリー、およびヘッダー ストーリーが含まれています。) のみに含まれる項目の数を取得します。他のストーリーに含まれる項目の数を取得するには、Range オブジェクトと共にコレクションを使用します。
 Add メソッドは Sentences コレクションでは使用できません。その代わりに、InsertAfter メソッドまたは InsertBefore メソッドを使用して、Range オブジェクトに文を追加します。

次の使用例は、作業中の文書の最初の段落の後に文を挿入します。
With ActiveDocument
    MsgBox .Sentences.Count & " sentences"
    .Paragraphs(1).Range.InsertParagraphAfter
    .Paragraphs(2).Range.InsertBefore "The house is blue."
    MsgBox .Sentences.Count & " sentences"
End With


Sentences オブジェクト メンバ
 選択範囲、指定範囲、または文書内のすべての文を表す Range オブジェクトのコレクションです。Sentence オブジェクトはありません。

メソッド
名前 説明
Item コレクション内の各 Range オブジェクトを返します。

プロパティ
名前 説明
Application Microsoft Word アプリケーションを表す Application オブジェクトを取得します。
Count コレクション内の文の数を表す長整数型 (Long) の値を取得します。値の取得のみ可能です。
Creator 指定されたオブジェクトを作成したアプリケーションを示す 32 ビットの整数を取得します。値の取得のみ可能で、長整数型 (Long) の値を使用します。
First 指定範囲、選択範囲、または文書内にある文のコレクションの最初の文を表す Range オブジェクトを返します。
Last 文書、選択範囲、または指定範囲内の最後の文を表す Range オブジェクトを取得します。
Parent 指定された Sentences オブジェクトの親オブジェクトを表すオブジェクト型 (Object) の値を取得します。


Document.Words プロパティ は、文書内のすべての単語を表す Words コレクションを取得します。値の取得のみ可能です。
 構文
 .Words
    Document オブジェクトを表す変数を指定します。

 文書の区切り記号および段落記号も、Words コレクションに含まれます。
 コレクションのメンバを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。


 次の使用例は、選択部分の単語数を表示します。段落記号、単語の一部だけが選択されているもの、区切り記号もカウントされます。
MsgBox "There are " & Selection.Words.Count & " words."

 次の使用例は、myRange (作業中の文書の先頭から選択部分の最後まで) で、"Franklin" (直後のスペースも含む) という単語が見つかったら削除します。
Set myRange = ActiveDocument.Range(Start:=0, End:=Selection.End)
For Each aWord In myRange.Words
    If aWord.Text = "Franklin " Then aWord.Delete
Next aWord


Words コレクション オブジェクト は、選択範囲、指定範囲、または文書にある単語のコレクションです。Words コレクションのメンバは、1 つの単語を表す Range オブジェクトです。Word オブジェクトはありません。

 Words プロパティを使用して Words オブジェクトを取得します。

次の使用例は、現在いくつの単語が選択されているかを表示します。
MsgBox Selection.Words.Count & " words are selected"

 Words(Index) を使用して 1 つの単語を表す Range オブジェクトを取得します (Index にはインデックス番号を指定します)。インデックス番号は Words コレクションでの単語の位置を表します。

次の使用例は、選択範囲の最初の単語を 24 ポイントの斜体として設定します。
With Selection.Words(1)
    .Italic = True
    .Font.Size = 24
End With

 Words コレクションのメンバには、単語および単語の後のスペースの両方が含まれます。末尾のスペースを削除するには、Visual Basic の RTrim(ActiveDocument.Words(1)) などの RTrim 関数を使用します。

次の使用例は、作業中の文書内の最初の単語 (および末尾のスペース) を選択します。
ActiveDocument.Words(1).Select

 カーソルの直後にスペースがある場合、Selection.Words(1) は、カーソルの前の単語を表します。カーソルの直後に文字がある場合、Selection.Words(1) は、カーソルの後ろの単語を表します。
 文書では、このコレクションの Count プロパティは、メイン テキスト ストーリーのみの項目数を返します。他のストーリーの項目を数えるには、このコレクションと共に Range オブジェクトを使用します。また、Count プロパティには、句読点および段落記号もすべて含まれます。文書の実際の単語数のみを数える場合は、[文字カウント] ダイアログ ボックスを使用します。

次の使用例は、現在の文書の単語数を取得し、その値を変数 numWords に指定します。
Set temp = Dialogs(wdDialogToolsWordCount)
' 最新のデータが表示されるようにダイアログ ボックスを更新します。
temp.Execute
numWords = temp.Words

メモ
組み込みのダイアログ ボックスを表示する方法については、「Word の組み込みのダイアログ ボックスを表示する」を参照してください。

 Add メソッドは Words コレクションには使用できません。代わりに、InsertAfter または InsertBefore メソッドを使用して、文字列を Range オブジェクトに追加します。

次の使用例は、作業中の文書の最初の単語の後に文字列を挿入します。
ActiveDocument.Range.Words(1).InsertAfter "New text "


Words オブジェクト メンバ は、選択範囲、指定範囲、または文書にある単語のコレクションです。Words コレクションのメンバは、1 つの単語を表す Range オブジェクトです。Word オブジェクトはありません。

 メソッド
名前 説明
Item コレクション内の各 Range オブジェクトを返します。

プロパティ
名前 説明
Application Microsoft Word アプリケーションを表す Application オブジェクトを取得します。
Count コレクション内の単語の数を表す長整数型 (Long) の値を取得します。値の取得のみ可能です。
Creator 指定されたオブジェクトを作成したアプリケーションを示す 32 ビットの整数を取得します。値の取得のみ可能で、長整数型 (Long) の値を使用します。
First 単語のコレクション内の最初の単語を表す Range オブジェクトを返します。
Last 単語のコレクション内の最後の単語を表す Range オブジェクトを取得します。
Parent 指定された Words オブジェクトの親オブジェクトを表すオブジェクト型 (Object) の値を取得します。


Paragraph オブジェクト は、選択範囲、指定範囲、または文書の 1 つの段落を表します。
Paragraph オブジェクトは Paragraphs コレクションのメンバです。
Paragraphs コレクションには、選択範囲、指定範囲、または文書のすべての段落が含まれます。

 Paragraphs(Index) を使用して 1 つの Paragraph オブジェクトを取得します (Index にはインデックス番号を指定)。

次の使用例は、作業中の文書の最初の段落を右揃えに配置します。
ActiveDocument.Paragraphs(1).Alignment = wdAlignParagraphRight

 AddInsertParagraphInsertParagraphAfter、または InsertParagraphBefore メソッドを使用して、新しい空の段落を文書に追加します。

次の使用例は、選択範囲の最初の段落の前に段落記号を追加します。
Selection.Paragraphs.Add Range:=Selection.Paragraphs(1).Range

 次の使用例も、選択範囲の最初の段落の前に段落記号を追加します。
Selection.Paragraphs(1).Range.InsertParagraphBefore


Paragraph オブジェクト メンバ は、選択範囲、指定範囲、または文書の 1 つの段落を表します。Paragraph オブジェクトは Paragraphs コレクションのメンバです。Paragraphs コレクションには、選択範囲、指定範囲、または文書のすべての段落が含まれます。

メソッド
名前 説明
CloseUp 指定された段落の段落前の間隔を 0 ポイントにします。
Indent 1 つまたは複数の段落にインデントを 1 レベル設定します。
IndentCharWidth 段落を指定された文字数でインデントします。
IndentFirstLine
CharWidth
1 つ以上の段落の 1 行目を指定された文字数でインデントします。
JoinList リストの段落を指定した段落の上または下で最も近い位置にあるリストに結合します。
ListAdvanceTo リスト内の段落に対してリスト レベルを設定します。
Next 次の段落を表す Paragraph オブジェクトを返します。
OpenOrCloseUp 段落前の間隔を切り替えます。
OpenUp 指定された段落の段落前の間隔を 12 ポイントに設定します。
Outdent 1 つまたは複数の段落のインデントを 1 レベル解除します。
OutlineDemote 指定された段落に、1 つ下のレベルの見出しスタイル ([見出し 1] 〜 [見出し 8]) を設定します。
OutlineDemoteToBody [標準] スタイルを設定して、指定された段落のレベルを下げて本文にします。
OutlinePromote 指定された段落に 1 つ上のレベルの見出しスタイル ([見出し 1] 〜 [見出し 8]) を設定します。
Previous 前の段落を Paragraph オブジェクトとして返します。
Reset 手動で設定した文字書式 (スタイルを使わずに設定した書式) を削除します。
ResetAdvanceTo ユーザー設定のリスト レベルを使用している段落を元のレベル設定に戻します。
SelectNumber 箇条書きの段落番号または行頭文字を選択します。
SeparateList 1 つのリストを 2 つのリストに分割します。段落番号の場合、新しいリストは開始番号 (通常 1) から番号付けが再開されます。
Space1 指定された段落の行間を 1 行に設定します。
Space15 指定された段落の行間を 1.5 行に設定します。
Space2 指定された段落の行間を 2 行にします。
TabHangingIndent 指定されたタブ位置にぶら下げインデントを設定します。
TabIndent 指定された段落の左インデントを指定されたタブ位置に設定します。

プロパティ
名前 説明
AddSpaceBetween
FarEastAndAlpha
True に設定すると、指定した段落の日本語と英字の間隔が自動的に調整されます。
指定した段落の一部に対してのみ True に設定されていると、wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
AddSpaceBetween
FarEastAndDigit
True に設定すると、指定した段落の日本語と数字の間隔が自動的に調整されます。
指定した段落の一部に対してのみ True が設定されていると、このプロパティは wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
Alignment 指定した段落の配置を表す WdParagraphAlignment クラスの定数を設定します。値の取得および設定が可能です。
Application Microsoft Word アプリケーションを表す Application オブジェクトを取得します。
AutoAdjustRightIndent True に設定すると、1 行の文字数が指定されている場合に、指定した段落の右のインデント幅が自動調整されます。
指定した段落の一部に対してのみ AutoAdjustRightIndent プロパティが True に設定されていると、wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
BaseLineAlignment フォントの垂直方向の配置を表す WdBaselineAlignment クラスの定数を設定します。値の取得および設定が可能です。
Borders 指定された段落のすべての罫線を表す Borders コレクションを返します。
CharacterUnit
FirstLineIndent
指定された段落の最初の行のインデントまたはぶら下げインデントの値 (文字単位) を設定します。
最初の行のインデントを設定するには正の値を使用し、ぶら下げインデントを設定するには負の値を使用します。
値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
CharacterUnitLeftIndent 指定された段落の左のインデント値 (文字単位) を設定します。値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
CharacterUnitRightIndent 指定された段落の右のインデント値 (文字単位) を設定します。値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
Creator 指定されたオブジェクトを作成したアプリケーションを示す 32 ビットの整数を取得します。値の取得のみ可能で、長整数型 (Long) の値を使用します。
DisableLineHeightGrid True に設定すると、1 ページの行数が指定されている場合、指定した段落の文字列が行グリッドに配置されます。
指定した段落の一部に対してのみ DisableLineHeightGrid プロパティが True に設定されていると、wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
DropCap 指定した段落のドロップ キャップを表す DropCap オブジェクトを取得します。値の取得のみ可能です。
FarEastLineBreakControl True に設定すると、指定した段落に東アジアの改行規則が適用されます。
指定した段落の一部に対してのみ FarEastLineBreakControl プロパティが True に設定されていると、wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
FirstLineIndent 段落の最初の行のインデント幅またはぶら下げインデント幅の値 (ポイント数) を設定します。
最初の行のインデントの場合は正の値を設定し、ぶら下げインデントの場合は負の値を設定します。
値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
Format 指定された段落の書式を表す ParagraphFormat オブジェクトを設定します。値の取得および設定が可能です。
HalfWidthPunctuation
OnTopOfLine
True に設定すると、指定した段落の行頭の記号が 1/2 の幅の文字に変更されます。
指定した段落の一部に対してのみ True が設定されていると、このプロパティは wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
HangingPunctuation True に設定すると、指定した段落の句読点のぶら下げが有効になります。
指定した段落の一部に対してのみ True が設定されていると、このプロパティは wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
Hyphenation True に設定すると、指定した段落が自動ハイフネーションの対象に含まれます。
False に設定すると、指定した段落が自動ハイフネーションの対象から除外されます。
値の取得および設定が可能で、長整数型 (Long) の値を使用します。
ID 現在の文書を Web ページとして保存するときに、指定したオブジェクトを識別するラベルを取得または設定します。
値の取得および設定が可能で、文字列型 (String) の値を使用します。
IsStyleSeparator 異なる段落スタイルを持つ段落が結合しているように表示する、特殊な隠し段落記号が段落に含まれている場合、このプロパティの値は True です。
値の取得のみ可能です。ブール型 (Boolean) の値を使用します。
KeepTogether True に設定すると、改ページ位置の自動調整が行われるとき、指定した段落は分割されずに同じページになります。
値の取得および設定が可能で、長整数型 (Long) の値を使用します。
KeepWithNext True に設定すると、改ページの自動修正が行われるとき、指定した段落が次の段落と同じページになります。
値の取得および設定が可能で、長整数型 (Long) の値を使用します。
LeftIndent 指定した段落の左インデント幅 (ポイント単位) を表す単精度浮動小数点型 (Single) の値を取得または設定します。値の取得および設定が可能です。
LineSpacing 指定した段落の行間をポイント単位で設定します。値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
LineSpacingRule 指定した段落の行間を取得または設定します。値の取得および設定が可能で、WdLineSpacing クラスの定数を使用します。
LineUnitAfter 指定した段落の後の間隔 (グリッド線単位) を取得または設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
LineUnitBefore 指定した段落の前の間隔 (グリッド線単位) を設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
ListNumberOriginal 段落の元のリスト レベルを表す整数型 (Integer) の値を取得します。値の取得のみ可能です。
MirrorIndents 左右のインデントがそれぞれ同じ幅であるかどうかを表す長整数型 (Long) の値を取得または設定します。
使用できる値は、 True、 False、定数 wdUndefined のいずれかです。値の取得および設定が可能です。
NoLineNumber True に設定すると、指定した段落に行番号が追加されなくなります。値の取得および設定が可能で、長整数型 (Long) の値を使用します。
OutlineLevel 指定した段落のアウトライン レベルを取得または設定します。
値の取得および設定が可能で、WdOutlineLevel クラスの定数を使用します。
PageBreakBefore True に設定すると、指定した段落の前に強制的に改ページが挿入されます。値の取得および設定が可能で、長整数型 (Long) の値を使用します。
Parent 指定された Paragraph オブジェクトの親オブジェクトを表すオブジェクト型 (Object) の値を取得します。
Range 指定した段落に含まれる文書の一部を表す Range オブジェクトを取得します。
ReadingOrder 指定した段落の読み取り順序を、配置を変更せずに取得または設定します。値の取得および設定が可能で、WdReadingOrder クラスの定数を使用します。
RightIndent 指定した段落の右インデント幅の値 (ポイント単位) を取得または設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
Shading 指定した段落の網かけ書式を参照する Shading オブジェクトを取得します。
SpaceAfter 指定した段落または段組みの後の間隔をポイント単位で取得または設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
SpaceAfterAuto True に設定すると、指定した段落の後の間隔が自動的に設定されます。値の取得および設定が可能で、長整数型 (Long) の値を使用します。
SpaceBefore 指定した段落の段落前の間隔をポイント単位で取得または設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
SpaceBeforeAuto True に設定すると、指定した段落の前の間隔が自動的に設定されます。値の取得および設定が可能で、長整数型 (Long) の値を使用します。
Style 指定したオブジェクトのスタイルを取得または設定します。値の取得および設定が可能で、バリアント型 (Variant) の値を使用します。
TabStops 指定した段落のすべてのユーザー設定のタブ位置を表す TabStops コレクションを取得または設定します。値の取得および設定が可能です。
TextboxTightWrap 図形またはテキスト ボックスの周囲で文字列を折り返す狭さを表す WdTextboxTightWrap 定数を設定します。 値の取得および設定が可能です。
WidowControl True に設定すると、改ページ位置の自動調整が行われたとき、ページの先頭または末尾に 1 行だけ残して段落が区切られないように設定します。値の取得および設定が可能で、長整数型 (Long) の値を使用します。
WordWrap True に設定すると、指定した段落またはレイアウト枠内の単語が途中で折り返されます。値の取得および設定が可能で、長整数型 (Long) の値を使用します。


Paragraphs コレクション オブジェクト は、選択範囲、指定範囲、または文書内の Paragraph オブジェクトのコレクションです。

 Paragraphs プロパティを使用して Paragraphs コレクションを取得します。

次の使用例は、選択された段落を 2 行の行間で右揃えに配置するように設定します。
With Selection.Paragraphs
    .Alignment = wdAlignParagraphRight
    .LineSpacingRule = wdLineSpaceDouble
End With

 AddInsertParagraphInsertParagraphAfter、または InsertParagraphBefore メソッドを使用して、新しい段落を文書に追加します。

次の使用例は、選択範囲の最初の段落の前に新しい段落を追加します。
Selection.Paragraphs.Add Range:=Selection.Paragraphs(1).Range

 次の使用例も、選択範囲の最初の段落の前に段落を追加します。
Selection.Paragraphs(1).Range.InsertParagraphBefore
 Paragraphs(Index) を使用して 1 つの Paragraph オブジェクトを取得します (Index にはインデックス番号を指定)。

次の使用例は、作業中の文書の最初の段落を右揃えに配置します。
ActiveDocument.Paragraphs(1).Alignment = wdAlignParagraphRight
 文書内のこのコレクションに Count プロパティを使用して、メイン ストーリー (本文) のみに含まれる項目の数を取得します。他のストーリーに含まれる項目の数を取得するには、Range オブジェクトと共にコレクションを使用します。


Paragraphs オブジェクト メンバ は、選択範囲、指定範囲、または文書内の Paragraph オブジェクトのコレクションです。

メソッド
名前 説明
Add 文書に追加する新しい段落を表す Paragraph オブジェクトを返します。
CloseUp 選択された段落の段落前の間隔を 0 ポイントにします。
DecreaseSpacing 段落の前後の間隔を 6 ポイントずつ減少します。
IncreaseSpacing 段落の前後の間隔を 6 ポイントずつ増やします。
Indent 1 つまたは複数の段落にインデントを 1 レベル設定します。
IndentCharWidth 1 つ以上の段落を指定された文字数でインデントします。
IndentFirstLineCharWidth 1 つ以上の段落の 1 行目を指定された文字数でインデントします。
Item コレクション内の各 Paragraph オブジェクトを返します。
OpenOrCloseUp 段落前の間隔を切り替えます。
OpenUp 指定された段落の段落前の間隔を 12 ポイントに設定します。
Outdent 1 つまたは複数の段落のインデントを 1 レベル解除します。
OutlineDemote 指定された段落に、1 つ下のレベルの見出しスタイル ([見出し 1] 〜 [見出し 8]) を設定します。
OutlineDemoteToBody [標準] スタイルを設定して、指定された段落のレベルを下げて本文にします。
OutlinePromote 指定された段落に 1 つ上のレベルの見出しスタイル ([見出し 1] 〜 [見出し 8]) を設定します。
Reset 手動で設定した文字書式 (スタイルを使わずに設定した書式) を削除します。
Space1 指定された段落の行間を 1 行に設定します。
Space15 指定された段落の行間を 1.5 行に設定します。
Space2 指定された段落の行間を 2 行にします。
TabHangingIndent 指定されたタブ位置にぶら下げインデントを設定します。
TabIndent 指定された段落の左インデントを指定されたタブ位置に設定します。
プロパティ
名前 説明
AddSpaceBetween
FarEastAndAlpha
True に設定すると、指定した段落の日本語と英字の間隔が自動的に調整されます。
指定した段落の一部に対してのみ True に設定されていると、wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
AddSpaceBetween
FarEastAndDigit
True に設定すると、指定した段落の日本語と数字の間隔が自動的に調整されます。
指定した段落の一部に対してのみ True が設定されていると、このプロパティは wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
Alignment 指定した段落の配置を表す WdParagraphAlignment クラスの定数を設定します。値の取得および設定が可能です。
Application Microsoft Word アプリケーションを表す Application オブジェクトを取得します。
AutoAdjustRightIndent True に設定すると、1 行の文字数が指定されている場合に、指定した段落の右のインデント幅が自動調整されます。
指定した段落の一部に対してのみ AutoAdjustRightIndent プロパティが True に設定されていると、wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
BaseLineAlignment フォントの垂直方向の配置を表す WdBaselineAlignment クラスの定数を設定します。値の取得および設定が可能です。
Borders 指定されたオブジェクトのすべての罫線を表す Borders コレクションを返します。
CharacterUnit
FirstLineIndent
指定された段落の最初の行のインデントまたはぶら下げインデントの値 (文字単位) を設定します。
最初の行のインデントを設定するには正の値を使用し、ぶら下げインデントを設定するには負の値を使用します。
値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
CharacterUnitLeftIndent 指定された段落の左のインデント値 (文字単位) を設定します。値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
CharacterUnitRightIndent 指定された段落の右のインデント値 (文字単位) を設定します。値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
Count コレクション内の段落の数を表す長整数型 (Long) の値を取得します。値の取得のみ可能です。
Creator 指定されたオブジェクトを作成したアプリケーションを示す 32 ビットの整数を取得します。値の取得のみ可能で、長整数型 (Long) の値を使用します。
DisableLineHeightGrid True に設定すると、1 ページの行数が指定されている場合、指定した段落の文字列が行グリッドに配置されます。
指定した段落の一部に対してのみ DisableLineHeightGrid プロパティが True に設定されていると、wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
FarEastLineBreakControl True に設定すると、指定した段落に東アジアの改行規則が適用されます。
指定した段落の一部に対してのみ FarEastLineBreakControl プロパティが True に設定されていると、wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
First Paragraphs コレクション内の最初の項目を表す Paragraph オブジェクトを返します。
FirstLineIndent 段落の最初の行のインデント幅またはぶら下げインデント幅の値 (ポイント数) を設定します。
最初の行のインデントの場合は正の値を設定し、ぶら下げインデントの場合は負の値を設定します。
値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
Format 指定された段落の書式を表す ParagraphFormat オブジェクトを設定します。値の取得および設定が可能です。
HalfWidthPunctuation
OnTopOfLine
True に設定すると、指定した段落の行頭の記号が 1/2 の幅の文字に変更されます。
指定した段落の一部に対してのみ True が設定されていると、このプロパティは wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
HangingPunctuation True に設定すると、指定した段落の句読点のぶら下げが有効になります。
指定した段落の一部に対してのみ True が設定されていると、このプロパティは wdUndefined を返します。
値の取得および設定が可能です。長整数型 (Long) の値を使用します。
Hyphenation True に設定すると、指定した各段落が自動ハイフネーションの対象に含まれます。
False に設定すると、指定した段落が自動ハイフネーションの対象から除外されます。
値の取得および設定が可能で、長整数型 (Long) の値を使用します。
KeepTogether True に設定すると、改ページ位置の自動調整が行われるとき、指定した各段落は分割されずに同じページになります。
値の取得および設定が可能で、長整数型 (Long) の値を使用します。
KeepWithNext True に設定すると、改ページの自動修正が行われるとき、指定した各段落が次の段落と同じページになります。
値の取得および設定が可能で、長整数型 (Long) の値を使用します。
Last 段落のコレクション内にある最後のオブジェクトを表す Paragraph オブジェクトを取得します。
LeftIndent 指定した各段落の左インデント幅 (ポイント単位) を表す単精度浮動小数点型 (Single) の値を取得または設定します。値の取得および設定が可能です。
LineSpacing 指定した段落の行間をポイント単位で設定します。値の取得および設定が可能です。単精度浮動小数点型 (Single) の値を使用します。
LineSpacingRule 指定した各段落の行間を取得または設定します。値の取得および設定が可能で、WdLineSpacing クラスの定数を使用します。
LineUnitAfter 指定した各段落の後の間隔 (グリッド線単位) を取得または設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
LineUnitBefore 指定した各段落の前の間隔 (グリッド線単位) を取得または設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
NoLineNumber True に設定すると、指定した各段落に行番号が追加されなくなります。
使用できる値は、True、False、定数 wdUndefined のいずれかです。
値の取得および設定が可能で、長整数型 (Long) の値を使用します。
OutlineLevel 指定した各段落のアウトライン レベルを取得または設定します。値の取得および設定が可能で、WdOutlineLevel クラスの定数を使用します。
PageBreakBefore True に設定すると、指定した各段落の前に強制的に改ページが挿入されます。
使用できる値は、True、False、定数 wdUndefined のいずれかです。
値の取得および設定が可能で、長整数型 (Long) の値を使用します。
Parent 指定された Paragraphs オブジェクトの親オブジェクトを表すオブジェクト型 (Object) の値を取得します。
ReadingOrder 指定した各段落の読み取り順序を、配置を変更せずに取得または設定します。値の取得および設定が可能で、WdReadingOrder クラスの定数を使用します。
RightIndent 指定した各段落の右インデント幅の値 (ポイント単位) を取得または設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
Shading 指定した各段落の網かけ書式を参照する Shading オブジェクトを取得します。
SpaceAfter 指定した段落または段組みの後の間隔をポイント単位で取得または設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
SpaceAfterAuto True に設定すると、指定した各段落の後の間隔が自動的に設定されます。値の取得および設定が可能で、長整数型 (Long) の値を使用します。
SpaceBefore 指定した各段落の段落前の間隔をポイント単位で取得または設定します。値の取得および設定が可能で、単精度浮動小数点型 (Single) の値を使用します。
SpaceBeforeAuto True に設定すると、指定した各段落の前の間隔が自動的に設定されます。値の取得および設定が可能で、長整数型 (Long) の値を使用します。
Style 指定した各段落のスタイルを取得または設定します。値の取得および設定が可能で、バリアント型 (Variant) の値を使用します。
TabStops 指定した各段落のすべてのユーザー設定のタブ位置を表す TabStops コレクションを取得または設定します。値の取得および設定が可能です。
WidowControl True に設定すると、改ページ位置の自動調整が行われたとき、ページの先頭または末尾に 1 行だけ残して段落が区切られないように設定します。
使用できる値は、True、False、定数 wdUndefined のいずれかです。
値の取得および設定が可能で、長整数型 (Long) の値を使用します。
WordWrap True に設定すると、指定した各段落の単語が途中で折り返されます。値の取得および設定が可能で、長整数型 (Long) の値を使用します。


Paragraphs プロパティ は、指定範囲、選択範囲、または文書内のすべての段落を表す Paragraphs コレクションを取得します。値の取得のみ可能です。
コレクションのメンバーを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。

次の使用例は、作業中の文書の最初のセクションに含まれるすべての段落で、行間を 1 行に設定します。
ActiveDocument.Sections(1).Range.Paragraphs.LineSpacingRule = _ 
    wdLineSpaceSingle

次の使用例は、選択範囲内の最初の段落の行間を 2 行に設定します。
Selection.Paragraphs(1).LineSpacingRule = wdLineSpaceDouble


Document.Shapes プロパティ は、指定した文書内のすべての Shape オブジェクトを表す Shapes コレクションを取得します。値の取得のみ可能です。

 構文
 .Shapes
    Document オブジェクトを表す変数を指定します。

 このコレクションには、描画、図形、図、OLE オブジェクト、ActiveX コントロール、テキスト オブジェクト、および吹き出しを含めることができます。コレクションのメンバを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。
 Shapes プロパティを文書に適用すると、ヘッダーとフッターを除き、文書の本文にあるすべての Shape オブジェクトを取得できます。


 次の使用例は、新しい文書を作成し、それに幅 100 ポイント、高さ 50 ポイントの四角形を追加し、四角形の左上隅をページの左端から 5 ポイント、上端から 25 ポイントに配置します。
Set myDoc = Documents.Add
myDoc.Shapes.AddShape msoShapeRectangle, 5, 25, 100, 50

 次の使用例は、作業中の文書にあるすべての図形に対して、塗りつぶしのテクスチャを設定します。
For each s in ActiveDocument.Shapes
    s.Fill.PresetTextured msoTextureOak
Next s

 次の使用例は、作業中の文書の最初の図形に影を追加します。
Set myShape = ActiveDocument.Shapes(1)
myShape.Shadow.Type = msoShadow6


Shapes コレクション オブジェクト は、Shape オブジェクトのコレクションであり、文書内のすべての図形、または文書内のすべてのヘッダーとフッターに含まれるすべての図形を表します。
Shape オブジェクトは、オートシェイプ、フリーフォーム、OLE オブジェクト、画像などの描画レイヤのオブジェクトを表します。

 文書のオートシェイプだけに特定の操作を行ったり、選択された図形だけに特定の操作を行うなど、文書の図形の部分集合に対して操作を行う場合は、ShapeRange コレクションに操作を行う図形を含める必要があります。
 Shapes コレクションを取得するには、Shapes プロパティを使用します。

次の使用例は、作業中の文書のすべての図形を選択します。
ActiveDocument.Shapes.SelectAll

文書のすべての図形に対して、削除やプロパティの設定などの特定の操作を同時に行う場合、Range メソッドを使用して Shapes コレクションのすべての図形を含む ShapeRange オブジェクトを作成します。
次に、ShapeRange オブジェクトに対して適切なプロパティまたはメソッドを使用します。

 文書に図形を追加し、新しく作成された図形を表す Shape オブジェクトを取得するには、Shapes コレクションの AddCalloutAddCurveAddLabelAddLineAddOleControlAddOleObjectAddPolylineAddShapeAddTextboxAddTextEffect、または BuildFreeForm のいずれかのメソッドを使用します。

次の使用例は、作業中の文書に四角形を追加します。
ActiveDocument.Shapes.AddShape msoShapeRectangle, 50, 50, 100, 200

 1 つの Shape オブジェクトを取得するには、Shapes(Index) を使用します (Index には、名前またはインデックス番号を指定)。

次の使用例は、作業中の文書の最初の図形を左右に反転します。
ActiveDocument.Shapes(1).Flip msoFlipHorizontal

 次の使用例は、作業中の文書の "Rectangle 1" という名前の図形を左右に反転します。
ActiveDocument.Shapes("Rectangle 1").Flip msoFlipHorizontal

 各図形には、作成したときに、既定の名前が付けられます。
たとえば、文書に 3 つの異なる図形を追加すると、"四角形 2"、"テキスト ボックス 3"、"楕円 4" ("Rectangle 2"、"TextBox 3"、"Oval 4") のように名前が付けられます。
図形にわかりやすい名前を付けるには、Name プロパティを使用します。

 Shapes コレクションには、InlineShape オブジェクトは含まれません。
InlineShape オブジェクトは、文字と同じように扱われ、本文の行の中に文字として配置されます。
Shape オブジェクトは、文字列範囲にアンカーが配置されていますが、位置が固定されていないので、そのページの中のどこにでも配置することができます。
位置を固定した図形を位置を固定しない図形 (またはその逆) に変換するには、ConvertToInlineShape メソッドと ConvertToShape メソッドを使用します。
位置を固定した図形に変換できるのは、図、OLE オブジェクト、および ActiveX コントロールだけです。

 文書の Shapes コレクションの Count プロパティを使用すると、本文だけに含まれている図形の数を取得できます。
すべてのヘッダーとフッターに含まれている図形の数を取得するには、いずれかの HeaderFooter オブジェクトで Shapes コレクションを使用します。


Shape オブジェクト は、オートシェイプ、フリーフォーム、OLE オブジェクト、ActiveX コントロール、図などの描画レイヤに含まれるオブジェクトを表します。
Shape オブジェクトは、Shapes コレクションのメンバであり、このコレクションには、文書の本文に含まれるすべての図形、または文書のすべてのヘッダーとフッターに含まれるすべての図形が含まれます。

 図形は常に、アンカーが配置された範囲に対応付けられています。
アンカーを含むページのどこにでも、図形を配置することができます。
図形を表すオブジェクトには 3 種類あります。
1 つ目は文書のすべての図形を表す Shapes コレクションであり、2 つ目は文書の図形の部分集合を表す ShapeRange オブジェクト (たとえば、ShapeRange オブジェクトで文書の 1 番目と 4 番目の図形や、文書の選択されたすべての図形を表すことが可能) であり、3 つ目は文書の 1 つの図形を表す Shape オブジェクトです。
複数の図形や選択範囲内にある図形で同時に作業する場合は、ShapeRange コレクションを使用します。
 1 つの Shape オブジェクトを取得するには、Shapes(Index) を使用します (Index には、名前またはインデックス番号を指定)。

次の使用例は、作業中の文書の最初の図形を左右に反転します。
ActiveDocument.Shapes(1).Flip msoFlipHorizontal

 次の使用例は、作業中の文書の "Rectangle 1" という名前の図形を左右に反転します。
ActiveDocument.Shapes("Rectangle 1").Flip msoFlipHorizontal

 各図形には、作成したときに、既定の名前が付けられます。
たとえば、文書に 3 つの異なる図形を追加すると、"四角形 2"、"テキスト ボックス 3"、"楕円 4" ("Rectangle 2"、"TextBox 3"、"Oval 4") のように名前が付けられます。
図形にわかりやすい名前を付けるには、Name プロパティを使用します。
 ShapeRange(Index) を使用して、選択範囲内の図形を表す Shape オブジェクトを取得します (Index には、名前またはインデックス番号を指定)。

次の使用例は、選択範囲に少なくとも 1 つの図形が含まれている場合、選択範囲の最初の図形に塗りつぶしを設定します。
Selection.ShapeRange(1).Fill.ForeColor.RGB = RGB(255, 0, 0)

 次の使用例は、選択範囲に少なくとも 1 つの図形が含まれている場合、選択範囲内のすべての図形に塗りつぶしを設定します。
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 0, 0)

 指定した文書の図形のコレクションに Shape オブジェクトを追加し、新しく作成した図形を表す Shape オブジェクトを取得するには、次の Shapes コレクションのメソッドのいずれかを使用します。
つまり、AddCalloutAddCurveAddLabelAddLineAddOleControlAddOleObjectAddPolylineAddShapeAddTextboxAddTextEffectBuildFreeForm のいずれかのメソッドです。

次の使用例は、作業中の文書に四角形を追加します。
ActiveDocument.Shapes.AddShape msoShapeRectangle, 50, 50, 100, 200

 グループ化された図形の中の 1 つの図形を表す Shape オブジェクトを取得するには、GroupItems(Index) を使用します (Index には、図形の名前またはグループ内のインデックス番号を指定)。
 指定した図形範囲をグループ化し、新しくグループ化された図形のグループを表す 1 つの Shape オブジェクトを取得するには、Group メソッドまたは Regroup メソッドを使用します。
グループ化した図形は、他の図形で作業する場合と同様の方法で、グループで作業することができます。

 すべての Shape オブジェクトでは、文字列範囲にアンカーが配置されます。
図形は、アンカーが配置された範囲の含まれる最初の段落に対応付けられます。その図形は、必ずアンカーのあるページと同じページに配置されます。
 アンカーを表示するには、ShowObjectAnchors プロパティを True に設定します。その図形の Top および Left プロパティによって、図形の横位置および縦位置が決まります。RelativeHorizontalPosition および RelativeVerticalPosition プロパティによって、アンカーの配置された段落、アンカーの配置された段落を含む段、余白、または用紙の端のどれを配置の基準にするかが決まります。
 図形の LockAnchor プロパティが True に設定されている場合、アンカーをページ上のアンカーの位置からドラッグして移動することはできません。

 閉じた図形の塗りつぶしの書式を設定するすべてのプロパティとメソッドを含む FillFormat オブジェクトを取得するには、Fill プロパティを使用します。
Shadow プロパティは、影の書式設定に使用する ShadowFormat オブジェクトを取得します。
直線と矢印の書式を設定するプロパティとメソッドを含む LineFormat オブジェクトを取得するには、Line プロパティを使用します。
ワードアートの書式設定に使用する TextEffectFormat オブジェクトを取得するには、TextEffect プロパティを使用します。
線吹き出しの書式設定に使用する CalloutFormat オブジェクトを取得するには、Callout プロパティを使用します。
図形の周囲で文字列が折り返す方法の設定に使用する WrapFormat オブジェクトを取得するには、WrapFormat プロパティを使用します。
3-D 図形の作成に使用する ThreeDFormat オブジェクトを取得するには、ThreeD プロパティを使用します。
特定の図形の書式を他の図形にコピーするには、PickUp メソッドおよび Apply メソッドを使用します。

 文書の既定の図形の書式を設定するには、Shape オブジェクトの SetShapesDefaultProperties メソッドを使用します。
新しく図形を作成すると、その図形は既定の図形から大部分の属性を継承します。

 図形の種類 (フリーフォーム、オートシェイプ、OLE オブジェクト、吹き出し、リンクされた図など) を指定するには、Type プロパティを使用します。オートシェイプの種類 (楕円、四角形、吹き出しなど) を指定するには、AutoShapeType プロパティを使用します。
 図形の大きさを指定するには、Width プロパティと Height プロパティを使用します。

 TextFrame プロパティは、図形に文字列を追加したり、レイアウト枠の文字列をリンクするためのすべてのプロパティとメソッドを含む TextFrame オブジェクトを取得します。
 Shape オブジェクトは、文字列範囲にアンカーが配置されていますが、位置が固定されていないので、そのページの中のどこにでも配置することができます。
InlineShape オブジェクトは、文字と同じように扱われ、本文の行の中に文字として配置されます。
位置を固定した図形を位置を固定しない図形 (またはその逆) に変換するには、ConvertToInlineShape メソッドと ConvertToShape メソッドを使用します。
位置を固定した図形に変換できるのは、図、OLE オブジェクト、および ActiveX コントロールだけです。


Tables プロパティ は、指定したセル、文書、指定範囲、選択範囲、または表内のすべての表を表す Tables コレクションを取得します。値の取得のみ可能です。
コレクションのメンバーを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。

次の使用例は、作業中の文書に 5 列 5 行の表を作成し、あらかじめ定義されている書式をこの表に設定します。
Selection.Collapse Direction:=wdCollapseStart
Set myTable = ActiveDocument.Tables.Add(Range:=Selection.Range, _
NumRows:=5, NumColumns:=5)
myTable.AutoFormat Format:=wdTableFormatClassic2

次の使用例は、作業中の文書の最初の表の先頭列に数値と文字列を挿入します。
num = 90
For Each acell In ActiveDocument.Tables(1).Columns(1).Cells
    acell.Range.Text = num & " Sales"
    num = num + 1
Next acell


Tables コレクション オブジェクト は、選択範囲、指定範囲、または文書の表を表す Table オブジェクトのコレクションです。

Tables プロパティを使用して Tables コレクションを取得します。

次の使用例は、作業中の文書の各表の周囲に罫線を適用します。
For Each aTable In ActiveDocument.Tables
    aTable.Borders.OutsideLineStyle = wdLineStyleSingle
    aTable.Borders.OutsideLineWidth = wdLineWidth025pt
    aTable.Borders.InsideLineStyle = wdLineStyleNone
Next aTable

Add メソッドを使用して指定範囲に表を追加します。

次の使用例は、作業中の文書の先頭に 4 列 3 行の表を追加します。
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
ActiveDocument.Tables.Add Range:=myRange, NumRows:=3, NumColumns:=4

Tables(index) を使用して 1 つの Table オブジェクトを取得します。
index にはインデックス番号を指定します。
インデックス番号は、選択範囲、指定範囲、または文書での表の位置を表します。

次の使用例は、作業中の文書の最初の表を文字列に変換します。
ActiveDocument.Tables(1).ConvertToText Separator:=wdSeparateByTabs

文書内のこのコレクションに Count プロパティを使用して、メイン テキスト ストーリーに含まれる項目の数を取得します。
ほかのストーリーに含まれる項目の数を取得するには、Range オブジェクトと共にコレクションを使用します。

この種類の目次に戻る↑ 索引へ↓ トップページに戻る


表を使用する

表の作成、文字列の挿入、書式の設定

次の使用例は、文書の先頭に 4 列 3 行の表を挿入します。
For Each...Next 構造を使用して、表の中の各セルを順に参照します。
For Each...Next 構造の中では、InsertAfter メソッドを使用して表のセルに文字列 (セル 1、セル 2 など) を追加します。
Sub CreateNewTable()
    Dim docActive As Document
    Dim tblNew As Table
    Dim celTable As Cell
    Dim intCount As Integer

    Set docActive = ActiveDocument
    Set tblNew = docActive.Tables.Add( _
        Range:=docActive.Range(Start:=0, End:=0), NumRows:=3, _
        NumColumns:=4)
    intCount = 1

    For Each celTable In tblNew.Range.Cells
        celTable.Range.InsertAfter "セル " & intCount
        intCount = intCount + 1
    Next celTable

    tblNew.AutoFormat Format:=wdTableFormatColorful2, _
        ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True
End Sub

表のセルに文字列を挿入する

次の使用例は、作業中の文書に含まれる最初の表の 1 番目のセルに、文字列を挿入します。
Cell メソッドは Cell オブジェクトを取得します。
Range プロパティは Range オブジェクトを取得します。
Delete メソッドで既存の文字列を削除し、InsertAfter メソッドで "セル 1,1" という文字列を挿入します。
Sub InsertTextInCell()
    If ActiveDocument.Tables.Count >= 1 Then
        With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range
            .Delete
            .InsertAfter Text:="セル 1,1"
        End With
    End If
End Sub

表のセルから、文字列のみ (セル区切り記号を除く) を取得する

次の使用例は、作業中の文書に含まれる最初の表の先頭行の内容を取得し、表示します。
Sub ReturnTableText()
    Dim tblOne As Table
    Dim celTable As Cell
    Dim rngTable As Range

    Set tblOne = ActiveDocument.Tables(1)
    For Each celTable In tblOne.Rows(1).Cells
        Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _
            End:=celTable.Range.End - 1)
        MsgBox rngTable.Text
    Next celTable
End Sub

Sub ReturnCellText()
    Dim tblOne As Table
    Dim celTable As Cell
    Dim rngTable As Range

    Set tblOne = ActiveDocument.Tables(1)
    For Each celTable In tblOne.Rows(1).Cells
        Set rngTable = celTable.Range
        rngTable.MoveEnd Unit:=wdCharacter, Count:=-1
        MsgBox rngTable.Text
    Next celTable
End Sub

既存の文字列を表に変換する

次の使用例は、作業中の文書の先頭にタブで区切られた文字列を挿入し、その文字列を表に変換します。
Sub ConvertExistingText()
    With Documents.Add.Content
        .InsertBefore "1" & vbTab & "2" & vbTab & "3" & vbCr
        .ConvertToTable Separator:=Chr(9), NumRows:=1, NumColumns:=3
    End With
End Sub

表の各セルの内容を取得する

次の使用例は、文書の最初の表に含まれるセル数に等しい配列を定義します (Option Base 1 を仮定します)。
For Each...Next 構造を使用して、表の各セルの内容を取得し、その文字列を対応する配列要素に代入します。
Sub ReturnCellContentsToArray()
    Dim intCells As Integer
    Dim celTable As Cell
    Dim strCells() As String
    Dim intCount As Integer
    Dim rngText As Range

    If ActiveDocument.Tables.Count >= 1 Then
        With ActiveDocument.Tables(1).Range
            intCells = .Cells.Count
            ReDim strCells(intCells)
            intCount = 1
            For Each celTable In .Cells
                Set rngText = celTable.Range
                rngText.MoveEnd Unit:=wdCharacter, Count:=-1
                strCells(intCount) = rngText
                intCount = intCount + 1
            Next celTable
        End With
    End If
End Sub

作業中の文書内のすべての表を新しい文書にコピーする

次の使用例は、作業中の文書の表を新しい文書にコピーします。
Sub CopyTablesToNewDoc()
    Dim docOld As Document
    Dim rngDoc As Range
    Dim tblDoc As Table

    If ActiveDocument.Tables.Count >= 1 Then
        Set docOld = ActiveDocument
        Set rngDoc = Documents.Add.Range(Start:=0, End:=0)
        For Each tblDoc In docOld.Tables
            tblDoc.Range.Copy
            With rngDoc
                .Paste
                .Collapse Direction:=wdCollapseEnd
                .InsertParagraphAfter
                .Collapse Direction:=wdCollapseEnd
            End With
        Next
    End If
End Sub


表の列や行へのアクセス エラー
表の中の行または列に個別にアクセスする場合、表が均一でないと、実行時エラーが発生する可能性があります。
たとえば、作業中の文書に含まれる最初の表の各列の行数が等しくない場合、次の命令を実行するとエラーが発生します。
Sub RemoveTableBorders()
    ActiveDocument.Tables(1).Rows(1).Borders.Enable = False
End Sub

SelectColumn または SelectRow メソッドを使用して、列または行内のセルを最初に選択しておくと、このエラーの発生を防ぐことができます。
選択範囲を作成した後で、Selection オブジェクトに対して Cells プロパティを使用します。

次の使用例は、文書内の最初の表の先頭行を選択します。
Cells プロパティを使用して、選択されたセル (先頭行のすべてのセル) にアクセスするため、罫線を削除できます。
Sub RemoveTableBorders()
    ActiveDocument.Tables(1).Cell(1, 1).Select
    With Selection
        .SelectRow
        .Cells.Borders.Enable = False
    End With
End Sub

次の使用例は、文書の最初の表の先頭列を選択します。
For Each...Next ループを使用して、選択範囲 (先頭列のすべてのセル) 内の各セルに文字列を追加します。
Sub AddTextToTableCells()
    Dim intCell As Integer
    Dim oCell As Cell

    ActiveDocument.Tables(1).Cell(1, 1).Select
    Selection.SelectColumn
    intCell = 1

    For Each oCell In Selection.Cells
        oCell.Range.Text = "セル " & intCell
        intCell = intCell + 1
    Next oCell
End Sub


Cell オブジェクト は、表のセルを表します。Cell オブジェクトは Cells コレクションのメンバーです。
Cells コレクションは指定されたオブジェクトのすべてのセルを表します。

Cell(row, column) を使用して Cell オブジェクトを取得します。
引数 row には行番号を、引数 column には列番号を指定します。

次の使用例は、先頭行の 2 番目のセルに網かけを設定します。
Set myCell = ActiveDocument.Tables(1).Cell(Row:=1, Column:=2)
myCell.Shading.Texture = wdTexture20Percent

次の使用例は、先頭行の 1 番目のセルに網かけを設定します。
ActiveDocument.Tables(1).Rows(1).Cells(1).Shading _
    .Texture = wdTexture20Percent

Add メソッドを使用して、Cell オブジェクトを Cells コレクションに追加します。
また、Selection オブジェクトの InsertCells メソッドを使用して、新しいセルを挿入します。

次の使用例は、myTable の左上隅のセルの左側にセルを追加します。
Set myTable = ActiveDocument.Tables(1)
myTable.Range.Cells.Add BeforeCell:=myTable.Cell(1, 1)

次の使用例は、最初の表の左上の 2 つのセルを参照する範囲 (myRange) を設定します。
範囲を設定し、Merge メソッドを使ってセルを結合します。
Set myTable = ActiveDocument.Tables(1)
Set myRange = ActiveDocument.Range(myTable.Cell(1, 1) _
    .Range.Start, myTable.Cell(1, 2).Range.End)
myRange.Cells.Merge

Rows または Columns コレクションに対して Add メソッドを使用して、セルの行または列を追加します。
Selection オブジェクトに対して Information プロパティを使用して、現在の行および列番号を取得します。

次の使用例は、選択範囲の最初のセルの幅を変更し、セルの行番号および列番号を表示します。
If Selection.Information(wdWithInTable) = True Then
    With Selection
        .Cells(1).Width = 22
        MsgBox "セル " & .Information(wdStartOfRangeRowNumber) _
            & "," & .Information(wdStartOfRangeColumnNumber)
    End With
End If


ShapeRange コレクション オブジェクト は、文書の図形の集合である図形範囲を表します。
図形範囲には、文書内の 1 つの図形を含めたり、文書内のすべての図形を含めることができます。
 文書内のすべての図形、または選択範囲内の図形の中から特定の図形を選択して、図形範囲を構成できます。
 たとえば、文書内の最初の 3 つの図形、文書内で選択されたすべての図形、または文書内のすべてのフリーフォームを ShapeRange コレクションに含めることができます。
メモ
Shape オブジェクトに対して行うほとんどの操作は、図形を 1 つだけ含む ShapeRange オブジェクトに対しても行えます。
操作によっては、複数の図形を含む ShapeRange オブジェクトに対して行うと、エラーが発生する場合があります。

名前またはインデックス番号を指定して図形の集合を取得する

 Shapes.Range(index) を使用して、文書内の図形の集合を表す ShapeRange コレクションを取得します。
引数 index には、図形の名前またはインデックス番号、あるいは図形の名前またはインデックス番号のいずれかを含む配列を指定します。
Visual Basic の Array 関数を使用して、名前またはインデックス番号の配列を作成できます。

次の使用例は、現在の文書内の 1 番目と 3 番目の図形に塗りつぶしのパターンを設定します。
ActiveDocument.Shapes.Range(Array(1, 3)).Fill.Patterned _
    msoPatternHorizontalBrick

 次の使用例は、作業中の文書の "楕円 4" と "四角形 5" という名前の図形を選択します。
ActiveDocument.Shapes.Range(Array("楕円 4", "四角形 5")).Select

 Range メソッドを使用して、必要な数の図形を取得することができますが、コレクションのメンバーを 1 つだけ取得する場合は、Item メソッドを使用した方が簡単です。
たとえば、Shapes.Range(1) よりも Shapes(1) の方が記述が簡単になります。

選択範囲または指定範囲に含まれる ShapeRange コレクションを取得する

 Selection.ShapeRange(index) を使用して、選択範囲内の図形を表す Shape オブジェクトを取得します。
引数 index には、名前またはインデックス番号を指定します。

次の使用例は、選択範囲に少なくとも 1 つの図形が含まれている場合、選択範囲の最初の図形に塗りつぶしを設定します。
Selection.ShapeRange(1).Fill.ForeColor.RGB = RGB(255, 0, 0)

 次の使用例は、作業中の文書の最初のセクションのすべての図形を選択します。
Set myRange = ActiveDocument.Sections(1).Range
myRange.ShapeRange.Select

ShapeRange オブジェクトの図形を配置、整列、およびグループ化する

 図形の集合の位置を図形どうしの相対位置または文書を基準にして決めるには、AlignDistribute、または ZOrder メソッドを使用します。
 図形範囲を基にして形成される単一の図形を作成して操作するには、GroupRegroup、または UnGroup メソッドを使用します。
Shape オブジェクトの GroupItems プロパティは、単一の図形を形成するためにグループ化されたすべての図形を表す GroupShapes オブジェクトを返します。

 図形での操作をマクロに記録する場合は、常に ShapeRange プロパティが使用されます。
 ShapeRange オブジェクトには、InlineShape オブジェクトは含まれません。


CanvasShapes コレクション は、描画キャンバスの図形を表します。

 Shape オブジェクトまたは ShapeRange オブジェクトのいずれかの CanvasItemsプロパティを使用して、CanvasShapes コレクションを取得します。
図形を描画キャンバスに追加するには、CanvasShapes コレクションのメソッドである AddCalloutAddConnectorAddCurveAddLabelAddLineAddPictureAddPolylineAddShapeAddTextboxAddTextEffect、または BuildFreeForm を使用します。

次の使用例は、現在の文書に描画キャンバスを追加し、その描画キャンバスに 3 つの図形を追加します。
Sub AddCanvasShapes()
    Dim shpCanvas As Shape
    Dim shpCanvasShapes As CanvasShapes
    Dim shpCnvItem As Shape

    ' 新しいキャンバスを文書に追加します。
    Set shpCanvas = ActiveDocument.Shapes _
        .AddCanvas(Left:=100, Top:=75, _
        Width:=50, Height:=75)
    Set shpCanvasShapes = shpCanvas.CanvasItems

    ' 図形を CanvasShapes コレクションに追加します。
    With shpCanvasShapes
        .AddShape Type:=msoShapeRectangle, _
            Left:=0, Top:=0, Width:=50, Height:=50
        .AddShape Type:=msoShapeOval, _
            Left:=5, Top:=5, Width:=40, Height:=40
        .AddShape Type:=msoShapeIsoscelesTriangle, _
            Left:=0, Top:=25, Width:=50, Height:=50
    End With
End Sub

 CanvasItems(index) を使用して、CanvasShapes コレクション内の単一の図形を取得します。
引数 index には名前またはインデックス番号を指定します。

次の使用例は、Line プロパティおよび Fill プロパティを設定し、描画キャンバス内の 3 番目の図形を垂直方向に反転します。
Sub CanvasShapeThree()
    With ActiveDocument.Shapes(1).CanvasItems(3)
        .Line.ForeColor.RGB = RGB(50, 0, 255)
        .Fill.ForeColor.RGB = RGB(50, 0, 255)
        .Flip msoFlipVertical
    End With
End Sub

 各図形には、作成時に既定の名前が付けられます。
たとえば、文書に 3 つの異なる図形を追加すると、"Rectangle 2"、"Text Box 3"、"Oval 4" のように名前が付けられます。
既定の名前を参照する、または図形にわかりやすい名前を付けるには、Name プロパティを使用します。


MsoShapeType 列挙 は、図形の種類または範囲を指定します。
名前説明
msoAutoShape1オートシェイプ
msoCallout2引き出し線
msoCanvas20キャンバス
msoChart3グラフ
msoComment4コメント
msoDiagram21ダイアグラム
msoEmbeddedOLEObject7埋め込み OLE オブジェクト
msoFormControl8フォーム コントロール
msoFreeform5フリーフォーム
msoGroup6グループ
msoIgxGraphic24SmartArt グラフィック
msoInk22インク
msoInkComment23インク コメント
msoLine9直線
msoLinkedOLEObject10リンク OLE オブジェクト
msoLinkedPicture11リンク画像
msoMedia16メディア
msoOLEControlObject12OLE コントロール オブジェクト
msoPicture13画像
msoPlaceholder14プレースホルダ
msoScriptAnchor18スクリプト アンカー
msoShapeTypeMixed-2図形の種類の組み合わせ
msoTable19テーブル
msoTextBox17テキスト ボックス
msoTextEffect15テキスト効果


Shape.TextFrame プロパティ は、指定した図形の文字列が含まれる TextFrame オブジェクトを取得します。
構文
.TextFrame
   Shape オブジェクトを表す変数を指定します。

次の使用例は、myDocument に四角形を追加し、それに文字列を追加し、レイアウト枠の余白を設定します。
Set myDocument = ActiveDocument
With myDocument.Shapes.AddShape(msoShapeRectangle, _
        0, 0, 250, 140).TextFrame
    .TextRange.Text = "Here is some test text"
    .MarginBottom = 0
    .MarginLeft = 100
    .MarginRight = 0
    .MarginTop = 20
End With


StoryRanges プロパティ は、指定された文書のすべてのストーリーを表す StoryRanges コレクションを取得します。値の取得のみ可能です。
コレクションのメンバーを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。

次の使用例は、StoryRanges コレクションのメンバーを 1 つずつ調べ、偶数ページ フッター ストーリー (定数 wdPrimaryFooterStory) が StoryRanges コレクションに含まれているかどうかを確認します。
For Each aStory In ActiveDocument.StoryRanges
    If aStory.StoryType = wdEvenPagesFooterStory Then 
        MsgBox "Document includes an even page footer"
    End If
Next aStory

次の使用例は、プライマリ ヘッダー ストーリーに文字列を追加し、この文字列を表示します。
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range _
    .Text = "Header text"
MsgBox ActiveDocument.StoryRanges(wdPrimaryHeaderStory).Text


StoryRanges コレクション オブジェクト は、文書のストーリーを表す Range オブジェクトのコレクションです。

StoryRanges プロパティを使用して StoryRanges コレクションを取得します。

次の使用例は、作業中の文書でメイン テキスト ストーリー以外のすべてのストーリーの文字列から、ユーザーが設定した文字書式を削除します。
For Each aStory In ActiveDocument.StoryRanges
    If aStory.StoryType <> wdMainTextStory Then aStory.Font.Reset
Next aStory

Add メソッドは StoryRanges コレクションでは使用できません。
StoryRanges コレクションのストーリーの数には制限はありません。
StoryRanges(index) を使用して、1 つのストーリーを Range オブジェクトとして取得します。
index には wdStoryType クラスの定数を指定します。

次の使用例は、文字列をプライマリ ヘッダー ストーリーに追加し、この文字列を表示します。
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range _
    .Text = "ヘッダー文字列"
MsgBox ActiveDocument.StoryRanges(wdPrimaryHeaderStory).Text

次の使用例は、作業中の文書の脚注の文字列を新しい文書にコピーします。
If ActiveDocument.Footnotes.Count >= 1 Then
    ActiveDocument.StoryRanges(wdFootnotesStory).Copy
    Documents.Add.Content.Paste
End If

指定された文書で使用できないストーリーを取得しようとすると、エラーになります。

次の使用例は、作業中の文書で脚注ストーリーを使用できるかどうかを調べます。
On Error GoTo errhandler
Set MyRange = ActiveDocument.StoryRanges(wdFootnotesStory)
errhandler:
If Err = 5941 Then MsgBox "脚注ストーリーは使用できません。"

NextStoryRange プロパティを使用して文書のすべてのストーリーを参照します。

次の使用例は、作業中の各ストーリーで "Microsoft Word" という文字列を検索します。文字列が見つかると、文字列に斜体の書式を設定します。
For Each myStoryRange In ActiveDocument.StoryRanges
    myStoryRange.Find.Execute _
        FindText:="Microsoft Word", Forward:=True
    While myStoryRange.Find.Found
        myStoryRange.Italic = True
        myStoryRange.Find.Execute _
            FindText:="Microsoft Word", Forward:=True
    Wend
    While Not (myStoryRange.NextStoryRange Is Nothing)
        Set myStoryRange = myStoryRange.NextStoryRange
        myStoryRange.Find.Execute _
            FindText:="Microsoft Word", Forward:=True
        While myStoryRange.Find.Found
            myStoryRange.Italic = True
            myStoryRange.Find.Execute _
                FindText:="Microsoft Word", Forward:=True
        Wend
    Wend
Next myStoryRange

この種類の目次に戻る↑ 索引へ↓ トップページに戻る


ホームページのトップに戻る