業務効率化したい人向けのワードマクロ初心者講座(ファイル選択フォーム, キー操作保存, 単語置換, 連想配列, テーブル情報読み込み)の第4回講座です。
前回までで、単語変換マクロは完成していますが、変換する単語を変更するときに、マクロコードを変更する必要があります。
最終回の今回は、マクロファイルのテーブル(表)に、変換する単語の情報を書いておき、マクロからテーブルに書いた設定を読み出すことで、マクロコードを変更することなく、変換する単語を変更することができるようにします。
それでは始めましょう。
手順1. Wordのマクロファイルにテーブルを作成する
まず、マクロを書いているマクロ付きWordファイル、今回の講座では「単語変換マクロ第4回.docm」ですが、そのファイルにテーブル(表)を作成します。
手順1-1:マクロファイルにテーブルを追加
まず、テーブルを追加します。
下図のようにメニュー「挿入→表」をクリックし、出てくるサブウィンドウで、6行2列になる四角をクリックします。
すると、本文にテーブルが追加されました。
手順1-2:テーブルに単語変換情報を記述
ここに、変換する単語の情報を記述していきます。
一行目は、説明文としましょう。私は下図の用な感じで記述してきましょう。
一行目が説明文だとわかりやすくするために、セルに色をつけておきましょう。
①マウスで左クリックしながら、上の1行の2つのセルの文字を選択
②メニュー「ホーム→テーマの色」ですきな色を選択
わかりやすくなりましたね。
手順1-3:テーブルにタイトルを付ける
マクロコードから表を区別するために、表にタイトルをつけます。
表の中で右クリックし、「表のプロパティ」をクリックします。
「表のプロパティ」ウィンドウで、「代替テキスト」タブを選び、タイトルに「単語設定」と入力します。入力後「OK」をクリックして確定します。
以上でテーブルの準備はできました。
手順2. テーブル情報を読み取るするマクロを作成
手順2-1:マクロが記述してあるワードファイル文書のテーブルを検査
まずは、手順1で作ったWordファイルのテーブルをチェックするテストコードを書いてみましょう。
下図のコードを、標準モジュール「Module1」に書いてみてください。
1 2 3 4 5 6 7 8 9 10 11 |
'テーブル読み込みのテスト Public Sub テーブル読み込み() Dim tbl As Table 'テーブルオブジェクト型の変数を宣言 For Each tbl In ThisDocument.Tables '文書中のテーブルを一つづつ処理 'ThisDocumentは、この文書(マクロが書かれているワード文書) 'とりあえず、テーブルのタイトルと、行数、列数を表示 MsgBox "文書中のテーブル:" & tbl.Title & vbCrLf & _ "行数:" & tbl.Rows.Count & " 列数:" & tbl.Columns.Count Next End Sub |
書いた後は下図のようになります。
このコードはマクロとして実行可能です。
ワードのメニュー「開発→マクロ」と進み、マクロ名を選んで「実行」ボタンをクリックしてみてください。
下図のように、タイトルと、行数、列数を表示するメッセージボックスが開いたら成功です。
コードの説明は、コード中のコメントで書いておきます。
手順2-2:情報を連想配列に追加していく
次にテーブル内の情報を読み取っていきましょう。
手順2-1のコードに情報を追加するコードを追加すると、下のようなコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
'テーブル読み込みのテスト Public Sub テーブル読み込み() '連想配列を使用 Dim cnv_dic As Object Set cnv_dic = CreateObject("Scripting.Dictionary") Dim tbl As Table 'テーブルオブジェクト型の変数を宣言 For Each tbl In ThisDocument.Tables '文書中のテーブルを一つづつ処理 'ThisDocumentはこのマクロが書かれているワード文書 'タイトルが「単語設定」のものだけ処理。2列であることもチェック If tbl.Title = "単語設定" And tbl.Columns.Count = 2 Then Dim idx As Integer '行をFor文で見ていくためのインデックス変数 For idx = 2 To tbl.Rows.Count '一行目は説明のため2行目から取得 Dim str_mae As String '変換前単語を入れる変数 str_mae = tbl.Cell(idx, 1).Range.Text '変換前単語を代入 '表のセルには勝手に改行コードが入っているため削除 str_mae = Replace(str_mae, Chr(13) & Chr(7), "") Dim str_ato As String '変換後単語を入れる変数 str_ato = tbl.Cell(idx, 2).Range.Text '変換後単語 str_ato = Replace(str_ato, Chr(13) & Chr(7), "") '同様に改行コードを削除 If str_mae <> "" Then '変換前単語が空白以外のときだけ処理 '連想配列に追加 cnv_dic.Add str_mae, str_ato End If Next End If Next '読み取った情報を表示 Dim str_hyoji As String '表示用文字列 Dim cnv_key As Variant '連想配列のキー代入用 For Each cnv_key In cnv_dic.keys '連想配列のキー全てに対して処理 '文字列に情報を追記 str_hyoji = str_hyoji & cnv_key & " → " & cnv_dic(cnv_key) & vbCrLf Next '文字列を表示 MsgBox "連想配列:変換前単語 と 変換後単語(" & cnv_dic.Count & "個)" & vbCrLf & str_hyoji End Sub |
コード中にコードの説明は書いてありますが、少し追加して説明しますね。
For Next構文
For文については、記事「ワードマクロ:For Nextループによる繰り返し」で説明しています。ここでは、idx に 2から順に テーブルの最終行までを代入して、繰り返し処理を行います。
変換前単語の取得
str_mae という変数を定義して、変換前単語を代入してます。
しかし、表には下図のように、すべてのセルに改行コードが入ってしまってます。
これを削除するために、str_mae の中の改行コードである Chr(13) & Chr(7) を空文字列「””」に変換しています。変換には Replace というサブルーチンを使っています。
変換後単語も同様の処理をしています。
テストコードの実行
では、このコードを先ほどと同じ様に実行してみましょう。
すると下図のように、テーブル内の情報を表示するメッセージボックが表示されます。
情報の取得については以上になります。
手順3. 単語変換マクロへ組み込む
いよいよ、手順2までで作ったテーブル情報の読み込み処理を、単語変換マクロへ組み込みます。
手順3-1:テーブル読み込みマクロの修正
実は手順2で作った「テーブル読み込み」サブルーチンは、ほぼそのまま、単語変換マクロへ組み込むことができます。
変更しなければいけないところは以下の2点だけです。
- 連想配列を引数渡しにする
- 連想配列の表示処理を削除
早速やっていきましょう。
連想配列を引数渡しにする
まず、一行目を、Privateで修飾、引数に cnv_dic を Object型で追加します。
のようになります。
連想配列の表示処理を削除
これは、バッサリ削除するだけです。
「テーブル読み込み」サブルーチンの後半の以下の部分を削除してください。
1 2 3 4 5 6 7 8 9 10 |
'読み取った情報を表示 Dim str_hyoji As String '表示用文字列 Dim cnv_key As Variant '連想配列のキー代入用 For Each cnv_key In cnv_dic.keys '連想配列のキー全てに対して処理 '文字列に情報を追記 str_hyoji = str_hyoji & cnv_key & " → " & cnv_dic(cnv_key) & vbCrLf Next '文字列を表示 MsgBox "連想配列:変換前単語 と 変換後単語(" & cnv_dic.Count & "個)" & vbCrLf & str_hyoji |
以上になります。変更後の「テーブル読み込み」サブルーチンは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
'テーブル読み込みのテスト Private Sub テーブル読み込み(cnv_dic As Object) Dim tbl As Table 'テーブルオブジェクト型の変数を宣言 For Each tbl In ThisDocument.Tables '文書中のテーブルを一つづつ処理 'ThisDocumentはこのマクロが書かれているワード文書 'タイトルが「単語設定」のものだけ処理。2列であることもチェック If tbl.Title = "単語設定" And tbl.Columns.Count = 2 Then Dim idx As Integer '行をFor文で見ていくためのインデックス変数 For idx = 2 To tbl.Rows.Count '一行目は説明のため2行目から取得 Dim str_mae As String '変換前単語を入れる変数 str_mae = tbl.Cell(idx, 1).Range.Text '変換前単語を代入 '表のセルには勝手に改行コードが入っているため削除 str_mae = Replace(str_mae, Chr(13) & Chr(7), "") Dim str_ato As String '変換後単語を入れる変数 str_ato = tbl.Cell(idx, 2).Range.Text '変換後単語 str_ato = Replace(str_ato, Chr(13) & Chr(7), "") '同様に改行コードを削除 If str_mae <> "" Then '変換前単語が空白以外のときだけ処理 '連想配列に追加 cnv_dic.Add str_mae, str_ato End If Next End If Next End Sub |
手順3-2:マクロ本体から呼び出し処理追加
さて、最後の変更になります。
「マクロ本体」サブルーチンの中で、下図の「単語を追加」する処理を変更しましょう。
下図のように「テーブル読み込み」サブルーチンを呼び出す処理に変更します。
これで、cnv_dic に、テーブルから読み出した単語の情報が追加されます。
変更後の「マクロ本体」のコードは下図のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
'マクロ本体 Public Sub マクロ本体(doc As Document) If MsgBox(doc.Name & " を処理します。", vbOKCancel, "単語変換マクロ") = vbCancel Then Exit Sub End If 'ここから処理を書いていきます。 '連想配列を使用 Dim cnv_dic As Object Set cnv_dic = CreateObject("Scripting.Dictionary") '連想配列に単語を追加 テーブル読み込み cnv_dic Dim str_hyoji As String '表示用文字列 Dim cnv_key As Variant '連想配列のキー代入用 For Each cnv_key In cnv_dic.keys '連想配列のキー全てに対して処理 str_hyoji = str_hyoji & cnv_key & " → " & cnv_dic(cnv_key) & vbCrLf 単語変換処理 doc, cnv_key, cnv_dic(cnv_key) '変換処理の呼び出しを追加 Next MsgBox "入力ファイル: " & doc.Name & vbCrLf & _ "変換前単語 と 変換後単語" & vbCrLf & str_hyoji End Sub |
動かしてみよう
さて、では、最後に動かしてみましょう。
いつもどおり、マクロ実行ウィンドウから「単語変換マクロGUI」を選択して「実行」しましょう。
単語変換マクロのウィンドウで、ファイルを選択し「実行」しましょう。
すると、
のように、変換終了のメッセージボックスが表示されます。
そして、
のような文書が、
のように単語変換されたら成功です。
最後に
これまで4回に渡って、今までマクロを使ったことがない人を対象に、ワードマクロ初心者講座を行ってきましたが、いかがだったでしょうか?
この講座で使った方法を使えば、今まで手作業で繰り返し行っていたような作業を、自動でおこない、業務の効率アップができるんじゃないかと思います。
特に、別ワードファイルを処理する方法、キー操作を保存してそれを改良してマクロに組み込む方法など、そのまま使える部分は、どんどん使って応用してほしいと思います。
とはいえ、説明が不親切なところや、足りないところなどあると思います。そんなときは円料なく質問してくださいね。
ワードマクロ初心者講座:
業務効率化したい人向けのワードマクロ初心者講座(ファイル選択フォーム, キー操作保存, 単語置換, 連想配列, テーブル情報読み込み)
第1回:ワードマクロでファイル選択フォームをつくろう(フォーム, ファイルダイアログの使い方)
第2回:添字に文字列を使える連想配列で対になった情報を管理しよう
第3回:キー操作の保存からマクロを作成し単語の置換処理を作ろう
第4回(最終回):ワードマクロでテーブル(表)に書いた単語変換マクロの設定を読み取ろう
コメント