Home » ワードマクロ・Word VBAの使い方 » 文・センテンス » Word VBAで文・センテンスごとに配列変数に文字列を格納する

Word VBAで文・センテンスごとに配列変数に文字列を格納する

対象:Word2007, Word2010, Word2013

「ワード 配列 vba センテンスごと」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

Word文書から、センテンス(文)ごとに配列変数にデータを格納する、VBA(Visual Basic for Applications)のコードを探している方による検索です。

センテンスごとに配列に格納する必要が、本当にあるのか、疑問が生じる検索キーワードでもあります。

Word VBAには、文書の全センテンスを表す、Sentencesコレクションオブジェクトが存在していて、

文・センテンスごとに配列変数に文字列を格納するWordマクロ

そのデフォルトメンバーであるItemメソッドで、

文・センテンスごとに配列変数に文字列を格納するWordマクロ

個々のセンテンスを表すRangeオブジェクトを取得できるからです。
(ちなみに、Sentenceオブジェクトが返されると誤解してしまう方もいらっしゃると思いますが、オブジェクトブラウザーで確認するとわかるように、上図のとおりSentences.Itemメソッドで返されるのはSentenceオブジェクトではなくRangeオブジェクトです。[完全に一致する単語だけを検索する]設定にして「sentence」を検索しても下図のとおり「該当項目が見つかりません。」となり、Sentenceという名前のオブジェクトは存在しないことが確認できます。)

文・センテンスごとに配列変数に文字列を格納するWordマクロ

ループ処理でセンテンスごとに配列にデータを格納するサンプルマクロ

「ワード 配列 vba センテンスごと」
という検索キーワードだけでは、以上のような疑問は残りますが、とりあえず、参考になりそうな、センテンスごとに配列にデータを格納するマクロをご紹介しておきます。

Sub センテンスごとに配列に格納する()

 Dim str() As String
 Dim cnt As Long, i As Long

 With ActiveDocument.Sentences
  cnt = .Count
  ReDim str(1 To cnt)
  For i = 1 To cnt
   str(i) = .Item(i).Text
  Next
 End With

 Stop

End Sub

上記のマクロを実行すると、End Subの直前、Stop文の箇所でステップ実行モードになります。

そこで、VBE(Visual Basic Editor)のメニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すれば、配列変数・str()に文字列が格納されていることを確認できるでしょう。

サンプルマクロの解説

アクティブな文書のセンテンスの数を、SentencesコレクションオブジェクトのCountプロパティで取得して、
 With ActiveDocument.Sentences
  cnt = .Count

配列のサイズを決めます。
  ReDim str(1 To cnt)

Sentences.Countプロパティで取得した、センテンスの数だけループを回して、
  For i = 1 To cnt

配列に文字列を格納しています。
   str(i) = .Item(i).Text

最終更新日時:2022-07-21 14:46

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » 文・センテンス » Word VBAで文・センテンスごとに配列変数に文字列を格納する

「文・センテンス」の記事一覧

検索


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

.