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

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

対象: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()
 With ActiveDocument.Range(0, 5).Characters
  Dim i As Long
  For i = 1 To .Count
   MsgBox .Item(i).Text
  Next
 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
 For Each chr In ActiveDocument.Range(0, 5).Characters
  MsgBox chr.Text
 Next
End Sub

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

最終更新日時:2022-09-22 16:14

[スポンサードリンク]

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

「Word.Rangeオブジェクト」の記事一覧

検索


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

.