16
Excel データを Word 2011 ドキュメントに取り込む

Office 2011のVisual Basic for Applications(VBA)でできることの中でも、最も便利なことの一つは、2つの異なるOfficeアプリ間でデータを共有することです。例えば、Wordで作成している売上レポートにExcelのデータを埋め込みたいとします。VBAは、それを実現するのに最適なツールです。

具体的には、この例ではVBAはWord文書内のテキストに基づいて現在の月を自動的に特定し、Excelスプレッドシート内でその月の売上データを検索し、そのデータをWord文書に貼り付けることができます。この特定のプロジェクトを再現する必要がない場合でも、VBAで使用されるスクリプトは、多くの作業や専門知識を必要とせずにVBAで何ができるかを示す優れた例です。

Wordで単語を検索する

VBAには、Word文書内の文字列を検索するためのツールがいくつかあります。この例では、売上レポートの1行目が常にSales Report for June「または」でSales Report for July、4行目が常に月名であるとします。この4行目の単語を抽出する2行のVBAコードを以下に示します。

Dim Month As StringMonth = ActiveDocument.Words(4).Text

1行目は という文字列変数を作成しますMonth。2行目は文書内の4番目の単語を検索し、その値をその変数に代入します。文書の1行目が の場合Sales Report for June、Month 変数に格納される文字列は になりますJune

データを取得する

次に、Word文書の月文字列に基づいてExcelからデータを取得します。VBAのSelect Caseステートメントはこれに最適です。実質的に、「6月の場合はこれを実行する。7月の場合はあれを実行する」というように指定できます。基本的な構造は次のようになります。

Case Month を選択 Case Is ="June" Excelから6月のデータを取得 Case Is ="July" Excelから7月のデータを取得End Select

ここで注意すべき点が 1 つあります。検索する単語が文の途中にあり、その後にスペースがある場合は、そのスペースも文字Case Is列に含める必要があります。

次に、データが含まれているExcelブックを特定し、アクセスする必要があります。必要なのはたった1行だけです。

xlSheet = GetObject("Macintosh_ HD:Users:chris:Documents:Monthly Sales Report.xlsx") を設定します。

括弧内の引用符で囲まれたテキストは、ファイルへのフルパスです。GetObject() メソッドは、Excel シートが開いているか閉じているかを考慮に入れません。ただし、このスクリプトの実行時にシートが閉じていて、シートにマクロが含まれている場合は、マクロを有効にするかどうかを尋ねるダイアログボックスが表示されます。マクロを有効または無効にするか選択できますが、マクロは引き続き動作します。

レンジにホームイン

次に、Excelシートのどの部分を使用するかを指定する必要があります。例えば、「Monthly Sales Report.xlsx」内の必要なデータが「Sales」という名前のワークシート(タブ)にあり、以下のようになっているとします。

Excel 2011 の名前付き範囲
2 月の範囲を選択すると、その名前が Excel の名前ボックス (左上) に表示されます。

Excelでセル範囲を簡潔に識別する最も良い方法は、その範囲に名前を付けることです。例えば、「Feb」列の4つのセルをすべて選択し、Feb数式バーの左端にあるExcelの名前ボックスに名前を入力します。(名前にはスペースを入れないでください。)

月次売上レポート ワークシートの各月に対してこれを行うと、レポートのデータを簡単に識別してコピーできるようになります。次のようなステートメントで名前付き範囲にアクセスできます。

xlSheet.Worksheet(“売上”).Range(“1月”)

このステートメントの左から右に移動すると、xlSheetExcel ドキュメントを指すオブジェクトが作成され、Worksheet(“sales”)Excel ブックの売上タブが参照され、Range(“Jan”)1 月の名前付き範囲が参照されます。

Rangeオブジェクトには便利なCopyメソッドがあり、これを参照の末尾に追加できます。xlSheet.Worksheets(“sales”).Range(“Jan”).Copyこのメソッドはデータをクリップボードにコピーし、Wordレポートに貼り付けることができます。VBAを使ってある文書から別の文書にデータを移動する方法は他にもありますが、コピー&ペーストが最も簡単かもしれません。

Wordで貼り付けを行うには、 オブジェクトを使用しますSelection。このオブジェクトは文書内の選択されているテキストを参照し、何も選択されていない場合は挿入ポイントを参照します。つまり、 を使ってクリップボードの内容をレポートの挿入ポイントに貼り付けることができますSelection.Paste。Pasteメソッドは、Excelのセルを表のセルとしてWordレポートに貼り付けます。1つのセルの内容だけをコピーした場合は、そのセルがテキストとして文書に貼り付けられます。

すべてをまとめると

これらの個々の行を組み合わせると、サブルーチンは次のようになります。

Sub GetMonthlySalesData() Dim Month As String Month = ActiveDocument.Words(4).Text Set xlSheet = GetObject("Macintosh_HD:Users:chris:Documents:Monthly Sales Report.xlsx") Select Case Month Case Is = "January" xlSheet.Worksheets("Sales").Range("Jan").Copy Case Is = "February" xlSheet.Worksheets("Sales").Range("Feb").Copy Case Is = "March" xlSheet.Worksheets("Sales").Range("Mar").Copy End Select Selection.PasteEnd Sub

Case Is(これらの記述は、その年の他の月についても繰り返すことができます。)

このマクロを自分で作成するには、Wordで「ツール」→「マクロ」→「マクロ」を選択します。表示されるマクロウィンドウで、マクロ名(「月次売上データの挿入」など)を入力し、「作成」をクリックします。VBAはサブルーチンの最初と最後のステートメントを自動的に生成し、その間にカーソルを配置します。これで入力(またはコピーした内容を貼り付け)できるようになります。完了したら、「Word」→「閉じる」を選択してマクロエディターを閉じ、Wordに戻ります。

このスクリプトを実行するには、もう一度「ツール」→「マクロ」→「マクロ」を開き、「月次売上データの挿入」を選択して「実行」をクリックします。または、「表示」→「ツールバー」→「ツールバーとメニューのカスタマイズ」を選択して、マクロをツールバーまたはメニューに追加することもできます。