Home » ワードマクロ・Word VBAの使い方 » Word.Rangeオブジェクトから一文字ずつ取得する

Word.Rangeオブジェクトから一文字ずつ取得する

対象:Word2007, Word2010, Word2013, Windows版Word2016

「word vba range 一文字ずつ取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

WordのRangeオブジェクトから、

Word.Rangeオブジェクトから一文字ずつ取得する

VBA(Visual Basic for Applications)で、文字を一文字ずつ取得するには、どのようなコードを書けばいいのかを探していらしたのでしょう。

[スポンサードリンク]

参考になりそうなマクロを二つご紹介しておきます。
For~Nextループを使ったマクロと、For Each~Nextループ使ったマクロの二つです。

For~Nextループを使ってWord.Rangeオブジェクトから一文字ずつ取得するサンプルマクロ

以下のマクロを実行すると、アクティブな文書の、本文の先頭5文字が、順番にメッセージボックスに表示されます。


Sub Rangeから一文字ずつ取得_For_Next()

 Dim i As Long

 With ActiveDocument.Range(0, 5).Characters
  For i = 1 To .Count
   MsgBox .Item(i).Text
  Next i
 End With

End Sub

「ActiveDocument.Range(0, 5)」というオブジェクト式で、アクティブな文書の、本文の先頭5文字を表すRangeオブジェクトを取得し、RangeオブジェクトのCharactersプロパティで、その範囲内の文字を表すCharactersコレクションを取得して、

Word.Rangeオブジェクトから一文字ずつ取得する

CharactersコレクションオブジェクトのItemメソッドを使って、

Word.Rangeオブジェクトから一文字ずつ取得する

一文字ずつ順番に取得し、メッセージボックスに表示しています。

For Each~Nextループを使ってWord.Rangeオブジェクトから一文字ずつ取得するサンプルマクロ

Charactesコレクションオブジェクトに含まれるすべての単一オブジェクトに対するループ処理ですから、以下のようにFor Each~Nextループを使っても書けます。


Sub Rangeから一文字ずつ取得_For_Each_Next()

 Dim chr As Range ' Characters.Item

 For Each chr _
 In ActiveDocument.Range(0, 5).Characters
  MsgBox chr.Text
 Next chr

End Sub

構造としては、VBAでよく見かけるコレクションに対するFor Each~Nextループですが、Charactersコレクションオブジェクトの単一オブジェクトが、個々の文字を表すRangeオブジェクトなので(Characterオブジェクトではありません)、For Each~Nextループで単一オブジェクトを受ける変数をRange型で宣言するところがポイントでしょうか。

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Word.Rangeオブジェクトから一文字ずつ取得する

TrackBack:0

TrackBack URL
[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Word.Rangeオブジェクトから一文字ずつ取得する

「ワードマクロ・Word VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.