Range オブジェクトを使用する
Visual Basic を使用する場合の一般的なタスクは、ドキュメント内の領域を指定してから、テキストの挿入や書式設定の適用など、それを使用して何かを行うことです。 たとえば、文書の一部内で単語や語句を検索するマクロを記述できます。 文書の部分は Range オブジェクトで表すことができます。 Range オブジェクトを識別した後、Range オブジェクトのメソッドとプロパティを適用して、範囲の内容を変更できます。
Range オブジェクトは、文書内の連続する領域を参照します。 各 Range オブジェクトは、指定範囲の開始位置と終了位置で定義されます。 文書のブックマークと同じように、Visual Basic プロシージャの中で Range オブジェクトを使用し、文書の特定の範囲を指定します。 Range オブジェクトで指定する範囲は、カーソル位置でも、文書全体でもかまいません。 ただし、ブックマークとは異なり、 Range オブジェクトは、これを定義するプロシージャが実行されている間のみ有効です。
Start、End、StoryType の各プロパティは、Range オブジェクトを一意に識別します。 Start および End プロパティでは、 Range オブジェクトの指定範囲の開始と終了の文字の位置をそれぞれ設定したり、取得することができます。 文書の先頭の文字の位置は 0 (ゼロ) で、その次が 1、以降は順に続きます。 StoryType プロパティの WdStoryType 定数で表されるストーリー型がいくつかあります。
注:
Range オブジェクトは、選択範囲とは別のものです。 つまり、現在の選択範囲を変更することなく、特定の指定範囲を定義および変更できます。 文書のウィンドウ枠の選択範囲は 1 つだけですが、文書内には複数の指定範囲を定義できます。
Range メソッドの使い方
Document オブジェクトの Range メソッドを使用して、メイン ストーリーに配置され、指定された開始とエンドポイントを持つ Range オブジェクトを作成します。 次の使用例は、先頭の文字から 10 番目の文字までの Range オブジェクトを作成します。
Sub SetNewRange()
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
End Sub
Range オブジェクトにプロパティまたはメソッドを適用すると、Range オブジェクトが作成されることがわかります。 次の使用例は、現在の文書の先頭の 10 文字に太字を設定します。
Sub SetBoldRange()
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
rngDoc.Bold = True
End Sub
Range オブジェクトを何度も参照する必要がある場合は、Set ステートメントを使用して Range オブジェクトを変数に格納します。 ただし、 Range オブジェクトに対して 1 つのアクションのみを実行する必要がある場合は、オブジェクトを変数に格納する必要はありません。 コードで一度だけ指定範囲を識別し、 Bold プロパティを変更しても結果は同じです。
Sub BoldRange()
ActiveDocument.Range(Start:=0, End:=10).Bold = True
End Sub
指定範囲には、ブックマークと同じように、複数の文字を指定することも、文書内の特定の位置を指定することもできます。 次の使用例では、Range オブジェクトの指定範囲の開始位置と終了位置に、同じ値が指定されています。 つまり、指定範囲には文字列が含まれません。 次の使用例は、作業中の文書の先頭に文字列を挿入します。
Sub InsertTextBeforeRange()
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=0)
rngDoc.InsertBefore "Hello "
End Sub
上に示すように、文字の位置番号を使用して範囲の開始と終点を定義したり、Selection、Bookmark、Range オブジェクトなどのオブジェクトで Start プロパティと End プロパティを使用したりできます。 次の例では、2 番目の段落の先頭から始まり、3 番目の段落の後で終わる Range オブジェクトを作成します。
Sub NewRange()
Dim doc As Document
Dim rngDoc As Range
Set doc = ActiveDocument
Set rngDoc = doc.Range(Start:=doc.Paragraphs(2).Range.Start, _
End:=doc.Paragraphs(3).Range.End)
End Sub
詳細と例については、 Range メソッドを参照してください。
Range プロパティの使い方
Range プロパティは、Paragraph、Bookmark、Cell などの複数のオブジェクトに表示され、Range オブジェクトを返すために使用されます。 次の使用例は、現在の文書内の最初の段落を参照する Range オブジェクトを取得します。
Sub SetParagraphRange()
Dim rngParagraph As Range
Set rngParagraph = ActiveDocument.Paragraphs(1).Range
End Sub
Range オブジェクトを取得したら、そのプロパティまたはメソッドを使用して、Range オブジェクトを変更できます。 次の使用例は、現在の文書の 2 番目の段落を選択し、選択範囲を中央揃えにします。
Sub FormatRange()
ActiveDocument.Paragraphs(2).Range.Select
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
End Sub
同じ Range オブジェクトに複数のプロパティまたはメソッドを適用する必要がある場合は、With…End With 構造を使用できます。 次の使用例は、現在の文書内の最初の段落の文字列に書式を設定します。
Sub FormatFirstParagraph()
Dim rngParagraph As Range
Set rngParagraph = ActiveDocument.Paragraphs(1).Range
With rngParagraph
.Bold = True
.ParagraphFormat.Alignment = wdAlignParagraphCenter
With .Font
.Name = "Stencil"
.Size = 15
End With
End With
End Sub
詳細と例については、 Range プロパティのトピックを参照してください。
Range オブジェクトを再定義する
SetRange メソッドを使用して、既存の Range オブジェクトを再定義します。 次の使用例は、指定範囲を現在の選択範囲として定義します。 次に、 SetRange メソッドを使用して、現在の選択範囲に続く 10 文字も参照するように指定範囲を再定義します。
Sub ExpandRange()
Dim rngParagraph As Range
Set rngParagraph = Selection.Range
rngParagraph.SetRange Start:=rngParagraph.Start, _
End:=rngParagraph.End + 10
End Sub
詳細と例については、ドキュメントの Range メソッドを参照してください。
注:
マクロをデバッグするときは、 Select メソッドを使用して 、Range オブジェクトが正しいテキスト範囲を参照していることを確認できます。 たとえば、次の使用例は、現在の文書内の 2 番目および 3 番目の段落を参照する Range オブジェクトを選択し、その選択範囲のフォントを設定します。
Sub SelectRange()
Dim rngParagraph As Range
Set rngParagraph = ActiveDocument.Paragraphs(2).Range
rngParagraph.SetRange Start:=rngParagraph.Start, _
End:=ActiveDocument.Paragraphs(3).Range.End
rngParagraph.Select
Selection.Font.Italic = True
End Sub
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。