Excel でブックを開くプロセスを統合するメリット

Last Update:

(※ 2017 年 1 月 13 日に Japan Office Developer Support Blog に公開した情報のアーカイブです。)

こんにちは、Office 開発 サポート チームです。

今回は、前回の投稿3-1. ブックが開かれるプロセス で説明した動作に関連して、複数のブックを 1 つのプロセスで開くことのメリットについて記載します。

前回の投稿の通り、Excel 2013 以降のバージョンでは Excel 2010 までは新規プロセスを起動していたスタートメニューなどからの起動シナリオで、既存プロセスが使用されるように変更されました。 これは、Excel アプリケーションが MDI から SDI に変更された影響でもありますが、Excel 動作上のメリットもあります。以下に、主なメリットについて、いくつかご案内したいと思います。

目次

1. Excel 機能上のメリット
2. リソース上のメリット
3. プログラム上のメリット

1. Excel 機能上のメリット

Excel には、ブックをまたがって実行することができるいくつかの機能がありますが、これらの機能が動作するためには、ブックを開いているプロセスが同じであることが条件となります。Excel 2013 以降のバージョンで新しいブックを開いたときに既存プロセスが利用されるようになると、ユーザーは、現在のブックが開かれているプロセスをこれまでより意識することなく、これらの機能を利用することができます。

以下が、同一プロセス内のブック間で利用できる主な機能です。

外部参照 (リンク)
セルに “=[ブック名]シート!セル” のように設定して別ブックのセルに設定された値を参照する機能です。新規作成や、参照先セルの変更に伴って外部参照式が入力されたセルの値を更新するためには、同じプロセスでブックを開く必要があります。

関連情報)
タイトル : 外部参照 (リンク) の更新方法を制御する
アドレス : https://support.office.com/ja-JP/article/21E995B5-BAB1-4328-8AB3-DD357FE0E653

形式を選択して貼り付け
ブック間でセルの情報をコピー&貼り付けするとき、別プロセスで開いているブック間では、[形式を選択して貼り付け] で値や数式などの属性を貼り付けることはできません。これについては、以下の資料で詳細を公開しています。

タイトル : 異なるインスタンスの Excel ブックに属性を貼り付けられない
アドレス : https://support.microsoft.com/ja-jp/kb/917637

ワークシートの [移動またはコピー]
ワークシートを別のブックに移動またはコピーする場合、 別プロセスで開いているブック間では、移動やコピーを行うことができません。この動作については、以下の公開資料にも記載されています。

タイトル : ワークシートまたはワークシートのデータを移動またはコピーする
アドレス : https://support.office.com/ja-JP/article/47207967-bbb2-4e95-9b5c-3c174aa69328

ウィンドウの比較や切り替え
[表示] タブの [ウィンドウ] セクションにある [整列] / [並べて比較] / [ウィンドウの切り替え] などの機能は、別プロセスで開いているブック間では利用することができません。

関連情報)
タイトル : 複数のワークシートを同時に表示する
アドレス : https://support.office.com/ja-JP/article/1deed3da-a297-4260-98aa-a7b2d90c81ab

2. リソース上のメリット

Excel アプリケーションを起動すると、初期化処理で様々なモジュールや内部情報がメモリ上に展開されます。ブック毎に異なる Excel プロセスを起動すると、これらのアプリケーション レベルの情報が、プロセスごとにメモリに展開されます。一方、複数ブックを同じ Excel プロセスで開くと、アプリケーション レベルの情報などはブック毎に保持する必要はないため、結果的にリソースの節約になります。

昨今の PC では Excel アプリケーションが初期状態で保持するメモリ サイズが大きな支障となることは少ないですが、多くのユーザーがリモートデスクトップ接続して利用するような構成などでは、このような節約が役に立つこともあります。

3. プログラム上のメリット

プログラムから複数のブックを操作するとき、1 つのプロセスで開いておくと、Workbooks コレクションから全てのブックに容易にアクセスできます。

例えば、Excel のアドインでリボンに独自ボタンを登録し、このボタンをクリックすると現在開いているブック全てに対してある処理を行う、というシナリオを想定します。このシナリオで、ユーザーがそれぞれのブックを開くのにスタートメニューから Excel を起動したケースを想定して、Excel 2010 までの動作と Excel 2013 以降の動作を比較してみます。

Excel 2010

現在のプロセスで開かれているブックにのみ、処理が行われます。 今回想定するケースでは、ユーザーは全てのブックを別プロセスで開いているので、ユーザーはブック毎にボタンをクリックしなければなりません。 また、ユーザーは通常プロセスを意識しないので、ブックをエクスプローラからダブルクリックして開いたり、Excel メニューの [開く] でファイルを開く場合 (これらの場合は、既存プロセスでブックを開きます) は 1 度のクリックで全ブックに処理が行われる一方で、今回はブック毎にクリックが必要という動作から、アドインの使い方について混乱を招くことが懸念されます。

Excel 2013

全てのブックに対して処理が行われます。 今回想定するケースにおいても、ユーザーは 1 度のボタン クリックのみで処理を完了できます。 また、一般的なユーザー操作によるブックを開く方法のほとんどで既存プロセスが使われるため、アドインの動作に一貫性があります。

この例のように、特にアドインのようなユーザーが任意の操作手順で利用するようなプログラムにおいては、Excel 2013 以降の動作は、プログラムから扱いやすく幅広い処理を実現することができ、また、ユーザーにも利用しやすい動作であると言えます。

プログラム開発においては、以前のバージョンと動作を統一したいなどの理由で、あえて別プロセスでブックを開くような状況も生じるかと思いますが、Excel 2013 以降の変更によって既存プロセスを利用することで、これらのメリットがより享受しやすくなったという点もぜひ考慮頂ければ幸いです。

また、起動ショートカットの変更等でExcel 起動時に常に新規プロセスでブックを開くような対応を行う場合には、その環境で利用する Excel アドインやツールなどで、既定の動作を期待して、上記のような同一プロセスでのみ利用できる機能を内部的に利用している可能性にも十分にご留意ください。

今回の投稿は以上です。

本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。