「word vba range 一文字ずつ取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
WordのRangeオブジェクトから、
VBA(Visual Basic for Applications)で、文字を一文字ずつ取得するには、どのようなコードを書けばいいのかを探していらしたのでしょう。
参考になりそうなマクロを二つご紹介しておきます。
For~Nextループを使ったマクロと、For Each~Nextループ使ったマクロの二つです。
For~Nextループを使ってWord.Rangeオブジェクトから一文字ずつ取得するサンプルマクロ
以下のマクロを実行すると、アクティブな文書の、本文の先頭5文字が、順番にメッセージボックスに表示されます。
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コレクションを取得して、
CharactersコレクションオブジェクトのItemメソッドを使って、
一文字ずつ順番に取得し、メッセージボックスに表示しています。
For Each~Nextループを使ってWord.Rangeオブジェクトから一文字ずつ取得するサンプルマクロ
Charactesコレクションオブジェクトに含まれるすべての単一オブジェクトに対するループ処理ですから、以下のように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型で宣言するところがポイントでしょうか。
- 『Excel VBAユーザーのためのWord VBA入門(1)』出ました。
- 『Word VBA入門』に登場するオブジェクトごとのプロパティ一覧
- 『Word VBA入門』に登場するオブジェクトごとのメソッド一覧
最終更新日時:2022-09-22 16:14
- Newer:VBAのParentとは
- Older:ActiveSheet.でインテリセンスを使う・自動メンバー表示させる裏技
Home » ワードマクロ・Word VBAの使い方 » Word.Rangeオブジェクト » Word.Rangeオブジェクトから一文字ずつ取得する-Characters