
Visual Basic for Applications は、タスクの自動化を可能にする Office アプリの基盤となる言語です。しかし、Word で VBA を使用するには課題があります。まず、テキスト、画像、表など、さまざまな種類のコンテンツが含まれるため、文書内を自由に移動する必要があります。このチュートリアルでは、移動するための簡単な VBA プロシージャを 2 つ紹介します。1 つは Word 文書の先頭を識別し、もう 1 つは文書の末尾を識別します。
Windows 10 64ビット版でMicrosoft 365を使用していますが、以前のバージョンでもご利用いただけます。デモファイルはここからアクセスできます。Web版WordはVBAをサポートしていません。
参照: Google Workspace vs. Microsoft 365: チェックリスト付き比較分析(TechRepublic Premium)
Microsoft Word VBAのActiveDocumentについて
どちらの手順でも使用する主要なVBAコンポーネントは、ActiveDocumentプロパティです。このプロパティは、アクティブドキュメントを表すDocumentオブジェクトを返します。つまり、ドキュメント全体を開きます。WordのすべてのVBA手順でこのプロパティが必要になるわけではありませんが、ドキュメントの「一部」を参照する必要がある場合には必要になります。
Word文書が開かれていない場合、このプロパティはエラーを返します。ExcelまたはPowerPoint内からこのプロパティを使用する場合は、このような状況に対応するエラー処理を組み込む必要があります。
このプロパティは次の形式を使用します。
expression.ActiveDocument
ここでexpression
、 はApplication オブジェクト(Word)を表す変数です。幸いなことに、Wordではこれが暗黙的に使用されます。
次に使用するVBAはRangeメソッドです。これは次の形式を使用します。
expression.Range(start, end)
Rangeオブジェクトを返します。このメソッドを使ってドキュメントの領域を特定します。
「先頭へ移動」や「末尾へ移動」といったメソッドは存在しないため、start引数とend引数を使って両方を識別します。どちらの引数もオプションで、ご想像のとおり、start
それぞれ先頭の文字位置とend
末尾の文字位置を指定します。
それでは、実際の VBA 手順に移りましょう。
VBAを使ってWord文書の先頭を見つける方法
VBAを使ってWord文書の先頭にカーソルを移動するのは驚くほど簡単です。リストAに手順を示します。まず、この手順では範囲オブジェクトを宣言・定義し、文書の先頭を0で指定します。0を2つ指定すると、カーソルはアクティブ文書内のどのコンテンツよりも前に配置されます。2行目ではテキストを追加し、vbNewLine
定数で改行します。
リストA
Sub GoToStart()
'Move cursor to the beginning of the active document.
'Add a short text phrase to show it worked.
Dim rBegin As Range
Set rBegin = ActiveDocument.Range(0, 0)
rBegin.Text = "This is the beginning of this document." & vbNewLine
End Sub
次に、カーソルをドキュメントの末尾に移動する 2 番目の手順を見てみましょう。
VBAを使ってWord文書の末尾を見つける方法
前述の通り、「末尾まで移動」するメソッドは存在しないため、最後の文字を検索することで強制的に処理する必要があります。リストBに示すように、これは少し複雑ですが、難しくはありません。この手順は最初の手順と似ていますが、CharactersオブジェクトのLastプロパティを使用して、ドキュメントの末尾にあるテキストを入力します。
今回はvbNewLine
定数をテキストの前に配置しました。
リストB
Sub GoToEnd()
'Move cursor to the end of the active document.
'Add a short text phrase to show it worked.
Dim rEnd As Range
Set rEnd = ActiveDocument.Range.Characters.Last
rEnd.Text = vbNewLine & "This is the end of this document."
End Sub
Word文書にVBAプロシージャを入力して実行する方法
次に、両方の手順をWord文書に入力します。図Aに示す2ページの短いWord文書を使用しています。この文書には、マクロが有効になったWordファイルとして保存された様々なコンテンツが含まれています。リボンバージョンをご利用の場合は、VBAを実行するためにWord文書をマクロが有効になったファイルとして保存する必要があります。メニューバージョンをご利用の場合は、この手順を省略できます。
図A

VBA プロシージャを入力するには、Alt + F11 キーを押して Visual Basic Editor (VBE) を開きます。左側のプロジェクト エクスプローラーで「ThisDocument」を選択します。コードを手動で入力するか、ダウンロード可能な .cls ファイルをインポートできます。また、プロシージャはダウンロード可能な .docm ファイルと .doc ファイルにも含まれています。コードを手動で入力する場合は、この Web ページから貼り付けないでください。代わりに、コードをテキスト エディタにコピーし、そのコードを ThisDocument モジュールに貼り付けてください。これにより、エラーの原因となる可能性のある Web 上の文字が削除されます。
次に、次の手順を実行してみましょう。
- [開発]タブをクリックします。
- コード グループでマクロを選択します。
- 表示されるダイアログで、[GoToStart] (図 B ) を選択します。
- [実行]をクリックします。
図Cに示すように、この手順によりWord文書の先頭にテキストと改行が挿入されます。今度は同じ手順を繰り返し、「GoToEnd」(図B )を選択します。この手順により、図Dに示すように、Word文書の末尾に改行と短いテキストが挿入されます。
図B

図C

図D

挿入された2つの文が異なる書式を使用していることにお気づきかもしれません。これらの文は、他の文と同様に、指定された書式を使用します。挿入されたテキストに特定の書式を使用したい場合は、この点を覚えておくと便利です。
おそらく、このマクロを実行するためにこれらの手順をすべて実行するのは面倒でしょう。クイックアクセスツールバーまたはカスタムグループに追加することをお勧めします。その方法については、「クイックアクセスツールバーにOfficeマクロを追加してクイックアクセスする方法」をご覧ください。
乞うご期待
どちらのVBAプロシージャも、プロシージャ自体も、そしてそれらが実行するタスクもシンプルです。この記事の目的は、VBAを使って両方の場所へ移動する方法をご紹介することです。今後数ヶ月にわたり、Microsoft Word文書におけるVBAのナビゲーション機能について、さらに詳しく解説する記事をいくつか掲載していく予定です。