Excel VBAでオブジェクト指向プログラミング(Word VBA編)

2024-01-05

■Word VBAのオブジェクトについて

MicrosoftからWordの機能を利用するためのオブジェクト群が提供されていますが、下位オブジェクト(サブクラス)の種類が非常に多いため、ApplicationオブジェクトとDocumentオブジェクトを中心とする、各オブジェクトの階層構造(依存関係)を掲載します。
⇒詳細はMicrosoftのサイト(Office VBA リファレンス(Word))を参照して下さい。

Word関連オブジェクト群の階層構造

Word関連オブジェクト群の中で、最上位に位置するものがApplicationオブジェクトであり、最も重要かつ頻繁に利用されるものがDocumentオブジェクトです。
下表はApplicationオブジェクトとDocumentオブジェクトの下位オブジェクト(サブクラス)を一覧化したもの(※)で、Word関連オブジェクト群のオブジェクトの大半が含まれています。

(※)Visual Basic Editor(VBE)に搭載されているオブジェクトブラウザで、ApplicationオブジェクトとDocumentオブジェクトのメソッドおよびプロパティの定義情報を参照し、取得可能なオブジェクトをExcelにコピペして、自作のExcelツールで成形したものです。

Applicationオブジェクト
AddInsコレクション
AnswerWizardオブジェクト
Assistantオブジェクト
AutoCaptionsコレクション
AutoCorrectオブジェクト
Bibliographyオブジェクト
Browserオブジェクト
CaptionLabelsコレクション
COMAddInsコレクション
CommandBarsコレクション
DefaultWebOptionsコレクション
Dialogsコレクション
Dictionariesコレクション
Documentオブジェクト
Bibliographyオブジェクト
Bookmarksコレクション
Charactersコレクション
CommandBarsコレクション
Commentsコレクション
ContentControlsコレクション
CustomXMLPartsコレクション
DocumentInspectorsコレクション
DocumentLibraryVersionsコレクション
Emailオブジェクト
Endnotesコレクション
Envelopeオブジェクト
Fieldsコレクション
Footnotesコレクション
FormFieldsコレクション
Framesコレクション
Framesetオブジェクト
HTMLDivisionsコレクション
Hyperlinksコレクション
Indexesコレクション
InlineShapesコレクション
LetterContentオブジェクト
ListParagraphsコレクション
Listsコレクション
ListTemplatesコレクション
Mailerオブジェクト
MailMergeオブジェクト
MetaPropertiesコレクション
MsoEncodingオブジェクト
MsoEnvelopeオブジェクト
OfficeThemeオブジェクト
OMathsコレクション
PageSetupオブジェクト
Paragraphsコレクション
Permissionオブジェクト
ProofreadingErrorsコレクション
Rangeオブジェクト
ReadabilityStatisticsコレクション
Researchオブジェクト
Revisionsコレクション
Scriptsコレクション
Sectionsコレクション
Sentencesコレクション
ServerPolicyオブジェクト
Shapeオブジェクト
Shapesコレクション
SharedWorkspaceオブジェクト
SignatureSetオブジェクト
SmartDocumentオブジェクト
SmartTagsコレクション
StoryRangesコレクション
Stylesコレクション
StyleSheetsコレクション
Subdocumentsコレクション
Documentsコレクション
EmailOptionsコレクション
FileConvertersコレクション
FileDialogオブジェクト
FontNamesコレクション
HangulHanjaConversionDictionariesコレクション
IAssistanceオブジェクト
KeyBindingオブジェクト
KeyBindingsコレクション
KeysBoundToオブジェクト
Languagesコレクション
LanguageSettingsコレクション
ListGalleriesコレクション
MailingLabelオブジェクト
MailMessageオブジェクト
MsoAutomationSecurityオブジェクト
MsoFeatureInstallオブジェクト
MsoLanguageIDオブジェクト
NewFileオブジェクト
OMathAutoCorrectオブジェクト
Optionsコレクション
RecentFilesコレクション
Selectionオブジェクト
SmartTagRecognizersコレクション
SmartTagTypesコレクション
SpellingSuggestionsコレクション
SynonymInfoオブジェクト
Systemオブジェクト
TaskPanesコレクション
Tasksコレクション
Templateオブジェクト
Templatesコレクション
VBEオブジェクト
WdAlertLevelオブジェクト
WdEnableCancelKeyオブジェクト
WdMailSystemオブジェクト
WdWindowStateオブジェクト
Windowオブジェクト
Windowsコレクション
XMLNamespacesコレクション

■Wordのオブジェクトを使用するための事前準備

Wordのオブジェクトを使用するための事前準備は、以下の3ステップです。
⇒オブジェクトを使用するための事前準備とオブジェクトブラウザによる調査方法については、Excel VBAでオブジェクト指向プログラミング(事前準備編)を参照して下さい。

①ライブラリの参照設定
Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでMicrosoft Word x.x Object Libraryのチェックボックスにチェックを入れ、[OK]ボタンを押下。

②オブジェクト変数の定義
プログラムの宣言部でオブジェクト変数を定義。

  1. Dim wd As Object

③インスタンスの生成
プログラムの処理部でインスタンスを生成。

  1. Set wd = New Word.Application
  2. 'ここにWordを使用した処理を記述
  3. Set wd = Nothing

(参考)「Set wd = New Word.Application」の部分を「Set wd = CreateObject(“Word.Application")」と記述すれば、ステップ①(ライブラリの参照設定)は不要です。

■ExcelのアジェンダからWordの議事録を作成する処理

定例会議の議事録を作成する際、予めアジェンダから議事録のひな型を作成し、議事録の作成を効率化するためのExcelツールです。
以下で説明するサンプル・プログラムは、下図のアジェンダ(↓)を読み込み、

下図の議事録(↓)を作成するツールです。

処理の概要

処理の流れは以下の通りです。
①Excelのアジェンダを読み込んで議事録に貼り付けるテキストを準備
②Wordを起動して新規文書を作成し、準備したテキストを貼り付け
③先頭行と最終行に書式を設定
⇒作成したWord文書には文章を追記する必要があるため、ファイルを閉じずに開いたままにしてあります。

サンプル・プログラム

行番号6でアジェンダを開き、行番号8~16で議事録に貼り付けるテキストを作成しています。
行番号18~19でWordを起動しています(行番号18でWordを起動し、行番号19で目に見えるようにしています)。
行番号20で新規文書を開き、行番号21で準備したテキストを貼り付けています。
行番号22で先頭行を中央揃えにし、行番号23で文字サイズを14ポイントに設定。行番号24で二重下線を引いています。
行番号25で最終行を右詰めにしています。

(補足)このサンプル・プログラムでは新規文書にテキストを貼り付けていますので、「doc.Paragraphs(行番号)」「doc.Sentences(行番号)」という形式でテキストの各行を取扱うことができています。

  1. Dim sht, wd, doc As Object
  2. Dim wstr As String
  3. Dim i As Integer
  4. Private Sub Sample1()
  5.     Workbooks.Open (“C:\work\アジェンダ.xlsx")
  6.     Set sht = ActiveSheet
  7.     wstr = sht.Cells(1, 2) & “ 議事録" & vbCrLf & vbCrLf
  8.     wstr = wstr & “1." & sht.Cells(5, 2) & “   " & sht.Cells(5, 4) & vbCrLf & vbCrLf
  9.     wstr = wstr & “2." & sht.Cells(7, 2) & “   " & sht.Cells(7, 4) & vbCrLf & vbCrLf
  10.     wstr = wstr & “3." & sht.Cells(9, 2) & “   " & sht.Cells(9, 4) & vbCrLf & vbCrLf
  11.     wstr = wstr & “4." & sht.Cells(11, 2) & vbCrLf
  12.     For i = 16 To sht.Cells(sht.Rows.Count, 2).End(xlUp).Row
  13.         wstr = wstr & " (" & sht.Cells(i, 2) & “)" & sht.Cells(i, 3) & “(説明者:" & sht.Cells(i, 9) & “)" & vbCrLf & vbCrLf & vbCrLf & vbCrLf
  14.     Next i
  15.     wstr = wstr & vbCrLf & “以上"
  16.     Set wd = New Word.Application
  17.     wd.Visible = True
  18.     Set doc = wd.Documents.Add
  19.     wd.Selection.TypeText wstr
  20.     doc.Paragraphs(1).Alignment = wdAlignParagraphCenter
  21.     doc.Sentences(1).Font.Size = 14
  22.     doc.Sentences(1).Font.Underline = wdUnderlineDouble
  23.     doc.Paragraphs(doc.Paragraphs.Count).Alignment = wdAlignParagraphRight
  24. End Sub

■Excelシートに入力された漢字と読み仮名を基にルビ付のWord文書を作成する処理

予めExcelシートに入力しておいた漢字と読み仮名から、ルビ付のWord文書を作成するためのExcelツールです。

用途がわからないと思いますので、少し補足します。
筆者が観音経(←「妙法蓮華経 観世音菩薩普門品第二十五」のことです)にはまっていた頃、好みの読み仮名を振った観音経のテキストを作る(※)ため、Excelシートに漢字と好みの読み仮名を記入(下図参照)し、このサンプル・プログラムでルビ付のWord文書を作成を作成しました。

(※)下図の例で言うと、通常の読み仮名は「せそんみょうそうぐ がこんじゅうもんぴ」ですが、実際の読み方に合せて「せーそんみょうそうぐー がーこんじゅうもんぴー」にしてあります。

処理の概要

処理の流れは以下の通りです。
①Wordを起動して新規文書を作成
②Excelシートの漢字をWord文書に転記し、読み仮名をルビとして設定
③Word文書を保存し、Wordを終了

サンプル・プログラム

行番号6~7でWordを起動しています(行番号6でWordを起動し、行番号7で目に見えるようにしています)。
行番号8で新規文書を開き、行番号9で縦書きの設定をしています。
行番号14で漢字を転記し、行番号15~17でルビを設定しています。
行番号20~21でWord文書を保存して閉じ、行番号22~23でWordを終了しています。

  1. Dim sht, wd, doc As Object
  2. Dim i As Integer
  3. Private Sub Sample2()
  4.     Set sht = ActiveSheet
  5.     Set wd = New Word.Application
  6.     wd.Visible = True
  7.     Set doc = wd.Documents.Add
  8.     doc.Content.Orientation = wdTextOrientationVerticalFarEast
  9.     For i = 1 To sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
  10.         If sht.Cells(i, 1) = “" Then
  11.             doc.Bookmarks(“\EndOfDoc").Range.InsertAfter Text:=" "
  12.         Else
  13.             doc.Bookmarks(“\EndOfDoc").Range.InsertAfter Text:=sht.Cells(i, 1)
  14.             pos = doc.Characters.Count – 1
  15.             doc.Characters(pos).PhoneticGuide “"
  16.             doc.Characters(pos).PhoneticGuide (sht.Cells(i, 2))
  17.         End If
  18.     Next i
  19.     doc.SaveAs (“C:\work\観音経.docx")
  20.     doc.Close
  21.     wd.Quit
  22.     Set wd = Nothing
  23. End Sub

実行結果(観音経)

①実行結果
サンプル・プログラムを実行すると、以下のような文書ができあがります。
観音経.pdf

②おまけ(その1)
サンプル・プログラムの実行結果(↑)は、偈(げ)の部分だけですが、全量だと以下のようになります。
⇒A4版の紙に4 in 1両面で刷り出し、冊子のように閉じられるようにしてあります。
観音経(4in1両面、冊子(用紙サイズ:A5、出力用紙:A4、向き:縦、1枚あたりの頁数:2、頁の順序:縦(右から左)、両面印刷:長辺とじ)).pdf

③おまけ(その2)
「読み仮名なんかいらない」という方には、読み仮名抜きのバージョンも用意してあります。
⇒A4版の紙に2 in 1両面(または4 in 1片面)で刷り出すようにしてあります。
観音経_ルビなし_.pdf

国本温子(著),緑川吉行(著),できるシリーズ編集部(著)
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ

大村あつし(著),古川順平(著)
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ

高橋宣成(著)
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ