Wordマクロの例とVBAチュートリアル
In this Article
Word VBA / Macros メガガイドへようこそ!
このページの内容は以下の通りです。
-
- Word VBAチュートリアルPDF(無料ダウンロード)
- 最もよく使われるWord VBAのコードスニペットのリストを含むWord VBA “チートシート”
- 完全なWord VBA /マクロのチュートリアル
- 私たちのすべてのWord VBAのマクロのチュートリアルの検索可能なリスト
Excel VBAチュートリアルにもご興味があるかもしれません。 Excel VBAに特化した例題や演習もありますが、多くの内容はすべてのVBAに共通しており、If文、ループ、MessageBoxなどの概念を学ぶのに役立つと思われます。
VBA PDF (無料ダウンロード)
Microsoft Word VBAチュートリアルを無料でダウンロードできます。または他のOfficeプログラムのVBAチュートリアル!
Word VBAの例 “CheatSheet” (チートシート)
以下では、Microsoft Wordで作業するための簡単なVBAコードの例を紹介します。
選択/移動
Selection.Extend
ブックマーク
.Add Range:=Selection.Range, Name:=”Name”
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
n = ActiveDocument.Bookmarks.Count
‘任意の処理
End If
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.InsertAfter “新しい テキスト”
ActiveDocument.Bookmarks.Add Range:=Selection.Range, _
Name:=”ブックマーク名”
ドキュメント
Set doc = Documents.Add
NewTemplate:=False
コラム
varNumberPages = _
ActiveDocument.Content.Information(wdActiveEndAdjustedPageNumber)
フォント
インサート
Selection.InsertAutoText
ループ
‘任意の処理
Loop
For Each doc In Documents
‘任意の処理
Next doc
iParCount = ActiveDocument.Paragraphs.Count
For i = 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i
パラグラフ
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
End WIth
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コードがマクロに書き込まれ、操作を繰り返すことができるようになります。利用可能なすべてのマクロのリストは、「表示」→「マクロ」から確認できます。
マクロを記録した後は、マクロの一覧から編集することができます。
[編集] をクリックすると、VBA エディタが開きます。VBA エディタを使用すると、記録したマクロを編集したり、Word マクロを一から作成することができます。VBAエディタにアクセスするには、ショートカット ALT + F11をクリックするか、「開発」リボンから「Visual Basic」をクリックします。
簡単な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を追加します。
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
Rangeと Selectionは、おそらく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 のみを扱う場合、SelectionはRange よりも扱いが簡単なため、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 を押してマクロを実行するだけです。