「Sample.docx」という文章を入力したWordファイルを用意しておく。フォルダーは、このサンプルでは、「K:\Excel_Word_VBA_Tips」というフォルダーに配置しているが、このフォルダーは各自のフォルダーと読み替えて試してほしい。
今回読み込む「Sample.docx」の文章は図6のような内容だ。文章は太宰治作の『斜陽』一部を表示している。
先ほど使用した、「K:\Excel_Word_VBA_Tips\Excel_Word連携.xslm」ファイルをダブルクリックして開き、「Wordの文書データをExcelに取り込む」というシートを作成する。そのシートの中で「A1」のセルの幅を広くしておく。
マウスの右クリックで表示されるメニューから、「セルの書式設定」を選択し、「配置」タブを選択して、「縦位置」に「上詰め」、「文字の制御」に「折り返して全体を表示する」にチェックを付けておく。
また「書体」にはExcelのメニューから「Meiryo UI」を設定しておいた。文字サイズには「12」を指定した。(図7)。
もちろんVBAでも設定はできるのだが、何でもかんでもVBAで設定する必要はない。決まったセルの書式の設定などは、あらかじめExcelのメニューから設定しておいた方が、効率が良い。VBAで文字の書式などを設定するには、「セルの数値、フォント、文字位置、背景色、けい線など表示形式/書式設定の使い方」を参考にするといいだろう。
次に、Excelに「WordのデータをExcelに読み込む」シートを追加する。そのシートの中に、Excelメニューの「挿入」→「図形」と選択して、「角丸四角形」を配置し、これを選択して、マウスの右クリックで表示されるメニューから、「テキストの編集」を選択して、「Word文書の読み込み」と指定する。
「フォント」には、「Meiryo UI」、「フォントサイズ」には「14」、「フォント太さ」には「太字」、「文字位置」は「中央揃え」を指定しておく(図8)。
次に、Excelメニューの「開発」メニューをクリックして、左端に表示される「Visual Basic」を選択してVBEを起動する。プロジェクト内にすでにModule1が追加されているので、この中にリスト2のコードを記述する。
Sub Wordの文書データをExcelに読み込む() Dim myWord As Object Dim myWordDoc As Object Dim wordPara As Object Dim i As Long Set myWord = CreateObject("Word.Application") Set myWordDoc = myWord.Documents.Open("K:\Excel_Word_VBA_Tips\Sample.docx") i = 0 For Each wordPara In myWordDoc.Content.Paragraphs With ActiveSheet i = i + 1 .Cells(i, 1).Value = wordPara.Range.Text End With Next myWordDoc.Close False myWord.Quit End Sub
Object型の変数、myWordと、同じくObject型のmyWordDoc、wordParaを宣言しておく(2〜4行目)。Long型の変数iを宣言しておく(5行目)。この変数iは行番号を表す変数だ。
CreateObject関数で「Word.Application」への参照を作成し、変数myWordにセットしておく(6行目)。Documents.Openで「K:\Excel_Word_VBA_Tips\Sample.docx」ファイルを開き、myWordDocにセットしておく(7行目)。
変数iを0で初期化し(9行目)、読み込んだ「Sample.docx」ファイルの段落内のデータ(Content.Paragraphsコレクション)を、繰り返し変数wordParaで取得していく(10〜15行目)。
変数iを1ずつ増加し、Excelのアクティブなシートである、i行目の1列目のセルに、読み込んだ段落の内容を表示する。
今回は、1段落しか読み込ませていないが、後ほど2段落の文章を読み込ませたら、どのようになるか、説明しておこう。
Document.CloseメソッドでmyWordDocを閉じる。ここで第1引数をfalseにすると、変更が保存されない(16行目)。
Application.Quitメソッドで読み込んでおいた「Sample.docx」を終了させる(17行目)。
リスト2を図8のボタンに関連付け実行すると、図9のように表示される。
では、ここで、Wordの文書が図10のように2段落あった場合の表示はどうなるか見てみよう。
この図10の文章をExcelに読み込ませると、図11のような表示になる。
図11を見ると分かるように、段落ごとに別なセルに表示されている。1段落目が「A1」、2段落目が「A2」に表示されている。もちろん、「A2」にも事前に「A1」に設定したセルの書式を設定している。3段落あれば「A3」に、4段落あれば「A4」に……というふうに表示される。
Excelの表をWordに貼り付けるには、Excelの表の範囲を指定して、コピーし、Wordに貼り付ける方法を採っている。引数の「WordFomatting」には、Falseを指定しているので、Excelで指定した書式が、そのままWordに適用されている。このように、Excelの表をWordに貼り付けるには、意外と簡単な方法で貼り付けることができる。
Wordの文書データをExcelに取り込む方法の注意点は、「sample.docx」をすでに開いた状態で、Excelの「Word文書を読み込む」ボタンをクリックしてはならないことだ。「Sample.docx」を開いた状態で、Excelのボタンをクリックすると、Excelが一瞬ハングアップしたような状態になるので、注意してほしい。こうなると、「タスクの終了」でExcelを終わらす以外に方法がなくなる。
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Microsoft MVP for Development Platforms - Windows Platform Development (Oct 2014-Sep 2015)。
Copyright © ITmedia, Inc. All Rights Reserved.