EXCEL.EXEの場所はOSやOfficeのバージョンによって異なる

VBAでEXCEL.EXEの場所を直接必要な場合がたまにあります。すぐに思いつくのはExcelの起動スイッチを含めて起動したい場合です。起動スイッチとは、Excelの起動方法を制御するためにExcel.exeに引数として渡す設定値のことです。

例えば以下のようなコマンドラインを実行すると、対象のブックが起動スイッチ「/r」によって読み取り専用で開きます。

起動スイッチのうち利用する機会がありそうなものを挙げるとすると以下のような物があります。

スイッチ 説明
/r 指定したブックを読み取り専用で開きます。
/x 新規でExcelアプリケーションを起動します。
/x /r 新規Excelアプリケーションで指定したブックを読み取り専用で開きます。

これらの起動スイッチはEXCEL.EXEの正確なパスに引数として渡す必要があるのですが、問題なのがそのEXCEL.EXEが置いてある場所です。OSの種類や32bitと64bitの違いやOfficeのバージョンによってフォルダの場所が変わってきます。そのため過去に書いたVBAのコードのEXCEL.EXEのパスが新しいPCでは動かないことが十分にあり得ます。

そこで、このようなPC環境による違いによって書き分けをしなくてもいいように書く方法を紹介します。

Application.PathでEXCEL.EXEのパスが取得できる

PC環境の違いに関わらず、EXCEL.EXEの場所はApplication.Pathで取得することが出来ます。取得できるのはEXCEL.EXEが存在しているフォルダへのパス文字列で、右端には\マークは付与されません。

実際のEXCEL.EXEのパスが「C:\Program Files\Microsoft Office\Office14\EXCEL.EXE」であれば「C:\Program Files\Microsoft Office\Office14」を取得できます。そのためEXCEL.EXEまでのパスを取得するのであれば”\EXCEL.EXE”を付与する必要があります。

自分が使うPCとは異なる他のOSやOfficeのバージョンが異なるPCでApplication.Pathを実行すれば、そのPCに応じたパスを取得することが出来ます。

EXCEL.EXEのパスを取得するコード

先に書いたようにEXCEL.EXE自体のパスを取得する場合には、Application.Pathと”\EXCEL.EXE”を連結させた文字列が必要になります。

しかし都度それを書いているとコードが冗長化するため、EXCEL.EXEのフルパスを取得する関数を用意します。

使い方

GetExcelFullPath関数の使い方は以下のようになります。呼び出して変数に代入しているだけです。

実行結果
C:\Program Files\Microsoft Office\Office14\EXCEL.EXE

実行すると上記のように実行したPC環境に応じたEXCEL.EXEのパス文字列が返ります。

起動スイッチを使う場合

EXCEL.EXEのフルパスは上記のコードで取得できますが、Excelの起動スイッチを設定する場合は注意が必要です。

注意する点はそのEXCEL.EXEまでのフルパスに空白が含まれている点です。空白文字はアプリケーションと引数の区切りに使われます。「Program Files」フォルダは空白文字が含まれているため、パスとして途切れてしまいます。そこでフルパスを明示するためにダブルクォーテーションで囲い、「”C:\Program Files\Microsoft Office\Office14\EXCEL.EXE”」のように書きます。

起動スイッチはダブルクォーテーションで囲ったあとに付与します。そして起動スイッチの後ろに空白文字を加えて対象のファイルを指定します。対象のファイルもEXCEL.EXEと同様にダブルクォーテーションで囲います。
C:\Program Files\Microsoft Office\Office14\EXCEL.EXE /r C:\abc def\a.xlsx

これで正しく動作する形になります。