Wordマクロの例とVBAチュートリアル

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 5月 23, 2022

Word VBA / Macros メガガイドへようこそ!

このページの内容は以下の通りです。

    1. Word VBAチュートリアルPDF(無料ダウンロード)
    2. 最もよく使われるWord VBAのコードスニペットのリストを含むWord VBA “チートシート”
    3. 完全なWord VBA /マクロのチュートリアル
    4. 私たちのすべてのWord VBAのマクロのチュートリアルの検索可能なリスト

Excel VBAチュートリアルにもご興味があるかもしれません。 Excel VBAに特化した例題や演習もありますが、多くの内容はすべてのVBAに共通しており、If文ループMessageBoxなどの概念を学ぶのに役立つと思われます。


VBA PDF (無料ダウンロード)

Microsoft Word VBAチュートリアルを無料でダウンロードできます。または他のOfficeプログラムのVBAチュートリアル!

word vba tutorial pdf

ダウンロード


Word VBAの例 “CheatSheet” (チートシート)

以下では、Microsoft Wordで作業するための簡単なVBAコードの例を紹介します。

選択/移動

説明
VBAコード
バックスペース
Selection.TypeBackspace
文書全体選択
Selection.HomeKey Unit:=wdStory
Selection.Extend
コピー
Selection.Copy
削除
Selection.Delete Unit:=wdCharacter, Count:=1
後に挿入
Selection.InsertAfter “text”
行頭へ移動
Selection.HomeKey Unit:=wdLine
行末へ移動
Selection.EndKey Unit:=wdLine
貼り付け
Selection.Paste
すべてを選択
Selection.WholeStory
行全体を選択
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
段落を上へ移動
Selection.MoveUp Unit:=wdParagraph, Count:=1
右に1文字移動
Selection.MoveRight Unit:=wdCharacter, Count:=1
テーブルのセルを右に1つ移動
Selection.MoveRight Unit:=wdCell
ドキュメントの先頭に移動
Selection.HomeKey Unit:=wdStory
資料の最後に移動
Selection.EndKey Unit:=wdStory
ページ1へ移動
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=”1″
ページの先頭に移動
Selection.GoTo What:=wdGoToBookmark、Name:=”\Page” Selection.MoveLeft Unit:=wdCharacter, Count:=1

先頭に戻る

ブックマーク

説明
VBAコード
追加
With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:=”Name”
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
カウント
Dim n as Integer
n = ActiveDocument.Bookmarks.Count
削除
ActiveDocument.Bookmarks(“ブックマーク名”).Delete
存在するか?
If ActiveDocument.Bookmarks.Exists(“ブックマーク名”)= True Then
‘任意の処理
End If
移動
Selection.GoTo What:=wdGoToBookmark, Name:=”ブックマーク名”
選択する
ActiveDocument.Bookmarks(“ブックマーク名”).Select
テキストを置換
Selection.GoTo What:=wdGoToBookmark, Name:=”ブックマーク名”
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.InsertAfter “新しい テキスト”
ActiveDocument.Bookmarks.Add Range:=Selection.Range, _
Name:=”ブックマーク名”

先頭に戻る

ドキュメント

説明
VBAコード
アクティブ化
Documents(“Example.doc”).Activate
変数に追加
Dim doc As Document
Set doc = Documents.Add
追加
Documents.Add
追加(別のDocファイルから)
Documents.Add Template:=”C:\FormsFormsDoc.doc”, _
NewTemplate:=False
閉じる
Documents(“Example.doc”).Close
閉じる – 変更を保存
Documents(“Example.doc”).Close SaveChanges:=wdSaveChanges
閉じる – 保存しない
Documents(“Example.doc”).Close SaveChanges:=wdDoNotSaveChanges
閉じる – 確認プロンプト
Documents(“Example.doc”).Close SaveChanges:=wdPromptToSaveChanges

先頭に戻る

コラム

説明
VBAコード
名前を付けて保存
Documents(“Example.doc”).SaveAs (“C:\ExampleExample.doc”)
保存
Documents(“Example.doc”).Save
ファイルを保護
Documents(“Example.doc”).Protect Password:=”password”
ファイルの保護を解除
Documents(“Example.doc”).UnProtect Password:=”password”
ページ数
Dim varNumberPages as Variant
varNumberPages = _
ActiveDocument.Content.Information(wdActiveEndAdjustedPageNumber)
プリント
Documents(“Example.doc”).Print

先頭に戻る

フォント

説明
VBAコード
サイズ
Selection.Font.Size = 12
太字
Selection.Font.Bold = True
斜体
Selection.Font.Italic = True
下線
Selection.Font.Underline = wdUnderlineSingle
すべて大文字
Selection.Font.AllCaps = True
Selection.Font.TextColor = vbRed
名前
Selection.Font.Name = “Abadi”
下付き文字
Selection.Font.Subscript = True
上付き文字
Selection.Font.Superscript = True
ハイライトの色
Selection.Range.HighlightColorIndex = wdYellow
スタイル
Selection.Style = ActiveDocument.Styles(“Normal”)

先頭へ戻る

インサート

説明
VBAコード
オートテキストを挿入する
Selection.TypeText Text:=”a3″
Selection.InsertAutoText
日付コード挿入
ファイル挿入
Selection.InsertFile (“C:\Docs\Something.doc”)
改ページを挿入する
Selection.InsertBreak Type:=wdPageBreak
段落記号の挿入
Selection.TypeText Text:=Chr$(182)
タブの挿入
Selection.TypeText Text:=vbTab
テキストの挿入
Selection.TypeText Text:=”任意のテキスト”
タイプパラグラフの挿入
Selection.TypeParagraph
段落の挿入
Selection.InsertParagraph

トップページに戻る

ループ

説明
VBAコード
ドキュメントの最後まで実行
Do Until ActiveDocument.Bookmarks(“\Sel”) = ActiveDocument.Bookmarks(“\EndOfDoc”)
‘任意の処理
Loop
複数のdocファイルをループ
Dim doc As Document
For Each doc In Documents
‘任意の処理
Next doc
段落をループ
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.Count
For i = 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i

先頭に戻る

パラグラフ

説明
VBAコード
行をそろえる
Selection.ParagraphFormat.KeepTogether= True
次を維持
Selection.ParagraphFormat.KeepWithNext=True
スペースアフター
Selection.ParagraphFormat.SpaceAfter = 12
スペース前
Selection.ParagraphFormat.SpaceBefore = 0
中央揃え
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
右揃え
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
左揃え
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
左インデント
Selection.ParagraphFormat.LeftIndent = InchesToPoints(3.75)
右インデント
Selection.ParagraphFormat.RightIndent = InchesToPoints(1)
行間スペース
With Selection.ParagraphFormat
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
End WIth
すべての段落をループする
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.Count
For i = 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i

先頭へ戻る

Word VBAマクロチュートリアル

これは、Microsoft WordでVBAを使用するためのチュートリアルです。このチュートリアルでは、簡単なマクロの書き方と、ドキュメント、範囲、選択範囲、および段落とのやり取りを学びます。

注:マクロ/VBAが初めての方は、こちらの記事もご参照ください。VBAマクロをゼロから作成する方法

VBAは、Word、Excel、Outlook、PowerPoint、AccessなどのMicrosoft Officeプログラムを自動化するために使用されるプログラミング言語です。

マクロは、特定のタスクを実行するVBAコードのブロックです。

マクロを記録するを実行すると、VBAコードがマクロに書き込まれ、操作を繰り返すことができるようになります。利用可能なすべてのマクロのリストは、「表示」→「マクロ」から確認できます。

word macros view

マクロを記録した後は、マクロの一覧から編集することができます。

word vba macros list

[編集] をクリックすると、VBA エディタが開きます。VBA エディタを使用すると、記録したマクロを編集したり、Word マクロを一から作成することができます。VBAエディタにアクセスするには、ショートカット ALT + F11をクリックするか、「開発」リボンからVisual Basic」をクリックします。

word vba editor

簡単なWordマクロの例

これは、Word VBAマクロの簡単な例です。このマクロは、次のタスクを実行します。

  • Word文書を開く
  • 文書に書き込む
  • Word文書を閉じ、保存します。
Sub WordMacroExample()

    'ドキュメントを開き、変数に代入する
    Dim oDoc As Document
    Set oDoc = Documents.Open("c:\Users\someoneNewDocument.docx")
    
    'Write To Doc
    Selection.TypeText "www.automateexcel.com"
    Selection.TypeParagraph
    
    'ドキュメントを保存して閉じる
    oDoc.Save
    oDoc.Close
    
End Sub

Wordマクロの基本

VBAのコードはすべて、このようなプロシージャの中に格納する必要があります。VBAでプロシージャを作成するには、「Sub WordMacroExample」(ここで「WordMacroExample」は希望のマクロ名)と入力して ENTERキーを押します。VBAは自動的に括弧とEnd Subを追加します。

learn word vba

Word文書オブジェクト

VBAでMicrosoft Wordを操作する場合、頻繁にWordの「オブジェクト」を参照することになります。最も一般的なオブジェクトは、以下の通りです。

Applicationオブジェクト – Microsoft Wordそれ自体

Documentオブジェクト – Word文書

Rangeオブジェクト – Word ドキュメントの一部分

Selectionオブジェクト – 選択された範囲またはカーソルの位置

Applicationオブジェクト

アプリケーションは、最上位の階層のオブジェクトです。Wordの他のすべてのオブジェクトは、このオブジェクトを介して到達することができます。

他のWordオブジェクトにアクセスするだけでなく、アプリケーションそのものに対して設定することもあります。

Application.Options.AllowDragAndDrop = True

これは、「Windows(1)」の「Selection」に、「Application」内でアクセスする例です。

Application.Windows(1).Selection.Characters.Count

しかし、通常のWordオブジェクトは、完全な階層を入力することなく、直接アクセスすることができます。そのため、次のように入力することもできます。

Selection.Characters.Count

Documentsオブジェクト

ActiveDocument

Word で複数の文書を開いている場合、どの文書とやり取りするかを指定する必要があります。このような場合、ActiveDocumentを使用することで文書を指定することができます。例えば

ActiveDocument.PrintOut

は、ActiveDocumentを印刷します。ActiveDocumentとは、Wordで “フォーカスされている “文書のことです。 ActiveDocumentを切り替えるには、Activateコマンドを使用します。

Documents("Example.docx").Activate

ThisDocument

ActiveDocument を使ってアクティブなドキュメントを参照する代わりに、ThisDocument を使ってマクロが保存されているドキュメントを参照することができます。ThisDocument は決して変更されません。

ThisDocument.PrintOut

ドキュメント変数

しかし、より複雑なマクロの場合、Active Documentを把握するのが難しい場合があります。また、ドキュメント間の切り替えにイライラすることもあります。 そこで、文書変数を使用することができます。 このマクロでは、ActiveDocumentを変数に代入し、その変数を用いてドキュメントを印刷します。

Sub VarExample()
    Dim oDoc As Document
    Set oDoc = ActiveDocument
    oDoc.PrintOut
End Sub

Documentメソッド

ドキュメントを開く

Wordドキュメントを開くには、以下のようにします。

Documents.Open "c:\Users\SomeOne\Desktop\Test PM.docx"

ドキュメントを開く際は、必ず変数に代入することをお勧めします。

Dim oDoc as Document
Set oDoc = Documents.Open("c:\Users\SomeOne\Desktop\Test PM.docx")

新規ドキュメントの作成

新しい Word ドキュメントを作成します。

Documents.Add

テンプレートを元に新しいドキュメントを作成するようにWordに指示することができます。

Documents.Add Template:="C:\Program Files\Microsoft Office\Templates\MyTemplate.dotx"

いつものように、ドキュメントを作成または開くときに変数に割り当てることは便利であり、大きな問題を回避することにも繋がります。

Dim oDoc as Document
Set oDoc = Documents.Add (Template:="C:♪Program Files ♪Microsoft Office ♪Templates ♪MyTemplate.dotx")を実行します。

ドキュメントを保存する

ドキュメントを保存するには

ActiveDocument.Save

またはSaveAsを使用します。

ActiveDocument.SaveAs FileName:="C:\Users\SomeOne\Desktop/test2.docx", FileFormat:=wdFormatDocument

ドキュメントを閉じる

ドキュメントの変更を保存して閉じるには、以下のようにします。

ActiveDocument.Close wdSaveChanges

変更を保存せずに閉じる場合は、以下のようにします。

ActiveDocument.Close wdDoNotSaveChanges

ドキュメントを印刷する

アクティブなDocumentを印刷します。

ActiveDocument.PrintOut

Range, Selection, Paragraphs

RangeSelectionは、おそらくWord VBAで最も重要なオブジェクトであり、最も使用されています。

Rangeは文書の一部を指し、通常はテキストですが、必ずしもテキストでなくてもかまいません。

Selectionは、選択されたテキスト(または画像などの他のオブジェクト)、または何も選択されていない場合は、挿入ポイントを指します。

Paragraphsは、文書内の段落を表します。段落のテキストに直接アクセスすることはできないので、それほど重要ではありません。(修正を加えるには、特定の段落範囲にアクセスする必要があります。)

Range

Rangeには、ドキュメント全体を含む、ドキュメントの任意の部分を指定することができます。

Dim oRange As Range
Set oRange = ActiveDocument.Content

または、1文字でも可能です。 別の例として、この範囲はドキュメントの最初の単語を参照します。

Dim oRange As Range
Set oRange = ActiveDocument.Range.Words(1)

通常、ドキュメントの特定の部分を参照している範囲を取得し、それを変更したいと思うでしょう。 次の例では、2段落目の最初の単語を太字にします。

Dim oRange As Range
Set oRange = ActiveDocument.Paragraphs(2).Range.Words(1)
oRange.Bold = True

Rangeのテキストを設定する

Rangeのテキスト値を設定します。

Dim oRange As Range
Set oRange = ActiveDocument.Paragraphs(2).Range.Words(1)
oRange.Text = "Hello "

(Tip: “Hello”の後にあるスペースに注意してください。単語オブジェクトは単語の後にスペースを含むので、”hello” だけだと “Hellonext word” になってしまいます)

Rangeを使ってできることは何百とあります。いくつかの例を挙げてみましょう。(これらは、すでにオブジェクト変数 oRange が設定されているものとします。)

フォントを変更する

oRange.Font.Name = "Arial"

特定の範囲に含まれる文字の数をメッセージボックスに表示する

MsgBox oRange.Characters.Count

テキストを前に挿入する

oRange.InsertBefore "これは挿入されたテキストです "

範囲に脚注を追加する

ActiveDocument.Footnotes.Add Range:=oRange, _
Text:="詳しくは automateexcel.com をご覧ください。 "

クリップボードにコピーする

oRange.Copy

多くの場合、ドキュメントの操作には特定の範囲を参照しておく必要がありますので、あらかじめ開始位置と終了位置を指定することができます。

oRange.Start = 5
oRange.End = 50

上記のコードを実行すると、oRangeはドキュメント内の5番目の文字で始まり、50番目の文字で終わるテキストを参照するようになります。

Selection

マクロが ActiveDocument のみを扱う場合、SelectionRange よりも扱いが簡単なため、Range よりも広く使用されています。

まず、文書内の必要な部分を選択します。 たとえば、アクティブなドキュメントの2番目の段落を選択します。

ActiveDocument.Paragraphs(2).Range.Select

次に、Selectionオブジェクトを使用してテキストを入力します。

Selection.TypeText "あるテキスト"

“あるテキスト”の下に段落を入力することができます。

Selection.TypeText "いくつかのテキスト"
Selection.TypeParagraph

テキストが選択されているのか、それとも単にカーソルがある挿入ポイント(Insertion Point)を示しているだけなのかを知りたい場合がよくあります。

If Selection.Type <> wdSelectionIP Then
    Selection.Font.Bold = True
Else
    MsgBox "テキストを選択する必要があります。"
End If

Selectionオブジェクトを操作するとき、挿入ポイントを特定の場所に置き、そのポイントを起点にコマンドを発行したい場合はこのようにします。

ドキュメントの先頭:

Selection.HomeKey Unit:=wdStory, Extend:=wdMove

現在行の先頭:

Selection.HomeKey Unit:=wdLine, Extend:=wdMove

Extend パラメータ wdMove は、挿入ポイントを移動させます。代わりに、wdExtend を使用すると、現在の挿入ポイントの間のすべてのテキストを選択することができます。

Selection.HomeKey Unit:=wdLine、Extend:=wdExtend。

Selectionを移動する

挿入ポイントの位置を変更する最も便利な方法は、移動です。Selectionを2文字分前進させるには、次のようにします。

Selection.Move Unit:=wdCharacter, Count:=2

逆方向に移動させる場合は、Countパラメータに負の数を使用します。

Selection.Move Unit:=wdCharacter, Count:=-2

Unitパラメータには、wdCharacter、wdWord、wdLine、その他を指定できます。(Word VBAのヘルプで、その他のパラメータを確認できます。)

代わりに単語を移動させるには以下のようにします。

Selection.Move unit:=wdWord, Count:=2

Selectionは、Wordを使うロボットのようなもので、人間のユーザーの動作を模倣しており、(Rangeを使用するのに比べて)簡単に操作できます。挿入ポイントがあるところで、何らかのアクションが行われます。しかし、これは、挿入ポイントがどこにあるか、常に気を配らなければならにということであり、さらに、コードが多くなってくると簡単ではなくなってしまいます。へたをすると、Wordは意図しない場所にテキストを変更してしまうでしょう。

もし、Selectionオブジェクトにないプロパティやメソッドが必要な場合は、Selectionオブジェクトに関連する範囲を簡単に取得することができます。

oRange = Selection.Range

ヒント: Selection使用する のは、Rangeを使用するよりも簡単ですが、速度が遅くなります。(大きな文書を扱う場合には重要です。)

Paragraphs

テキストを変更するために、直接Paragraphsオブジェクトを使用することはできません。

ActiveDocument.Paragraphs(1).Text = "No, it wouldn't work"

上記は実際にはうまくいかず、エラーが発生します。まず、特定の段落に関連するRangeオブジェクトを取得する必要があります。

ActiveDocument.Paragraphs(1).Range.Text = "It works now :)"

しかし、そのスタイルを直接変更することはできます。

ActiveDocument.Paragraphs(1).Style = "Normal"

また、その段落レベルの書式を変更することもできます。

ActiveDocument.Paragraphs(1).LeftIndent = 10

さらに、この段落を次の段落と同じ行にすることもできます。

ActiveDocument.Paragraphs(1).KeepWithNext = True

段落を中央揃えにします。

ActiveDocument.Paragraphs(1).Alignment = wdAlignParagraphCenter

オブジェクト変数に特定の段落を割り当てることは非常に便利です。 特定の段落を変数に代入すれば、1つ前に段落を挿入したからといって、最初の段落が2つ目になるというようなことを心配する必要がありません。

dim oPara as Paragraph
Set oPara = Selection.Paragraphs(1) 'ここでは、現在の選択範囲の最初の段落を変数に代入している

次の例では、最初の段落の上に段落を挿入していますが、変数に代入されているため、もともと指定していた最初の段落を参照し続けています。

Sub ParagraphExample()
    Dim oPara As Paragraph
    SEt oPara = ActiveDocument.Paragraphs(1)
    MsgBox oPara.Range.Text
    oPara.Range.InsertParagraphBefore '段落を挿入する
    MsgBox oPara.Range.Text
End Sub

Paragraphオブジェクトは、ループの中で非常によく使われます。

Sub LoopThroughParagraphs()

    Dim oPara As Paragraph
    For Each oPara In ActiveDocument.Paragraphs
        'そのスタイルが"見出し4"の場合、段落テキストを表示する
        If oPara.Style = "Heading 4" Then
            MsgBox oPara.Range.Text
        End If
    Next oPara

End Sub

Word VBAチュートリアル おわりに

このチュートリアルでは、Word VBAの基本を説明しました。VBAが初めての方は、変数、ループ、MessageBox、設定、条件論理など、VBAの一般的なチュートリアルもご覧ください。

Wordマクロの例

[テーブル id=19 /]

Word VBAのよくある質問

Wordのマクロとは何ですか?

マクロとは、タスクを自動化するためのプログラミング命令のセットを指す一般的な用語です。Wordマクロは、プログラミング言語VBAを使用してWordのタスクを自動化します。

WordにはVBAがありますか?

はい、Microsoft WordにはVBAエディターが付属しています。ALT + F11キーを押すか、リボンメニューから「開発」>「Visual Basic」の順にクリックすると、VBAエディタを表示させることができます。

WordでVBAを使うにはどすればよいですか?

1.  VBA Editorを開きます。(ALT + F11、または「Developer」>「Visual Basic」)
2. [挿入] > [モジュール]を選択してコードモジュールを作成します。
3. Sub HelloWorld’と入力し、Enterキーを押します。
4. Sub HelloWorld’ と ‘End Sub’ の行の間に ‘MsgBox “Hello World!” と入力します。
5. これでマクロは出来上がりです
6. あとはF5 を押してマクロを実行するだけです。

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples