「ワード 配列 vba センテンスごと」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
Word文書から、センテンス(文)ごとに配列変数にデータを格納する、VBA(Visual Basic for Applications)のコードを探している方による検索です。
センテンスごとに配列に格納する必要が、本当にあるのか、疑問が生じる検索キーワードでもあります。
Word VBAには、文書の全センテンスを表す、Sentencesコレクションオブジェクトが存在していて、
そのデフォルトメンバーであるItemメソッドで、
個々のセンテンスを表すRangeオブジェクトを取得できるからです。
(ちなみに、Sentenceオブジェクトが返されると誤解してしまう方もいらっしゃると思いますが、オブジェクトブラウザーで確認するとわかるように、上図のとおりSentences.Itemメソッドで返されるのはSentenceオブジェクトではなくRangeオブジェクトです。[完全に一致する単語だけを検索する]設定にして「sentence」を検索しても下図のとおり「該当項目が見つかりません。」となり、Sentenceという名前のオブジェクトは存在しないことが確認できます。)
ループ処理でセンテンスごとに配列にデータを格納するサンプルマクロ
「ワード 配列 vba センテンスごと」
という検索キーワードだけでは、以上のような疑問は残りますが、とりあえず、参考になりそうな、センテンスごとに配列にデータを格納するマクロをご紹介しておきます。
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で文・センテンスごとに配列変数に文字列を格納する