ドライブ指定を簡単に変えれないか?

Question 33.1   Previous Next
このホームページの更新をいつも楽しみにしています。おかげさまで、マクロがほんの少しですが理解できるようになりました。
Cドライブで使用していたファイルを、別のパソコンのAドライブ等に移動した場合などでは、アドレスを書き換えなければいけないのでしょうか?
何かよい方法があれば教えていただけませんか。
Answer   Copyright (C) 2000.10.26 永井善王
ハードディスクの起動ドライブの名は、DOS/V機では通常 'C' ですが絶対ではありません。一部メーカーのパソコンでは、 'A' になる場合があります。また、パーティションを切っていたり、サーバーを使っていたりして、データを別のドライブに保存している場合は、'D' や 'E' になる場合もあるでしょう。このことは、私達マクロを組む者にとっては、少々わずらわしい問題ですが仕方ありませんね。

(注) DOS/V機においても、異なるOS(例えば WindowsMeと Windows2000)をダブルインストールしている場合など、'C' ドライブ以外が起動ドライブになることがありますし、Excelを OSとは別のドライブにインストールしている場合もあり得ます。

マクロの中で別のファイルを開いたり、新しいファイルを保存したりする場合は、必要によりドライブ名・フォルダー名・ファイル名・拡張子などを指定するコードを記述します。例えば、次のとおりです。
10  ChDrive "C"                                 'カレントドライブを変更する
20  ChDir "\My Documents"                       'カレントフォルダーを変更する
30  Workbooks.Open Filename:="Book1.xls"        'ブックを開く
ご質問は、上記サンプルの10行目の "C" の部分を書き換えなければいけないかどうかを お尋ねと思います。回答としては、上記のようにマクロコードを固定的表現で記述している場合は、書き換えが必要になります。

愛想のない回答になってしまいましたので、 『ドライブ名が変ってもマクロを書き換えなくてよい方法』を考えてみましょう。

A案: 変数で指定する方法
まず、10行目の "C" の部分を変数で指定するように、下記のように変えます。次に 8行目として、変数「ドライブ」に "C" をセットするコードを追加します。
8   ドライブ = "C"                              '変数「ドライブ」に値をセットする
10  ChDrive ドライブ                            'カレントドライブを変更する
大して変らないように思えるかも知れませんが、この方法はマクロに柔軟性を持たせるための基本です。
その理由は、
(1) 10行目と同じ記述がマクロ全体のあちこちにある場合でも、8行目だけ書き換えれば済みます。
(2) 8行目の変数「ドライブ」に、自動的に値をセットする方法へ発展できます。

B案: ドライブ名を入力してもらう方法
ユーザーにドライブ名を入力してもらう方法です。マクロは簡単に済みますが、ユーザーに負担が掛かります。8行目を次のように書きます。
8   ドライブ = InputBox("ドライブ名を入力してください")
10  ChDrive ドライブ                            'カレントドライブを変更する
C案: EXCELへのパスを利用する方法
現在のアプリケーション(Excel)へのパスを取得して、その中のドライブ名でセットします。Excelがインストールされているドライブと、データ用のドライブが同じならば、この方法が使えます。
Sub EXCELへのパスでカレントドライブを設定する()
    絶対パス = Application.Path                 '現在のアプリへのパスを取得する
    ドライブ = Left(絶対パス, 1)                'ドライブ名を取り出す
    ChDrive ドライブ                            'カレントドライブを変更する
End Sub
D案: アクティブブックのパスを利用する方法
アクティブブックのパスを取得して、その中のドライブ名でセットします。マクロの最初で次のマクロを実行するようにしておきます。なぜ最初かと言うと、アクティブブックのパスは、ブックを開くたびに変る場合があるからです。

なお、ユーザーがブックを開く方法には色々あります。 1) オフィスツールのマイドキュメントから開く、2) Excelを立ち上げておいてから Excelで開く、3) デスクトップのマイコンピュータアイコンから開く、4) エクスプローラから開く、5) [スタート]メニューの[ファイル名を指定して実行]から開く、6) マクロで開くなどですが、いずれの場合でも、次のマクロで正しく処理されるはずです。
Sub アクティブブックのパスでカレントドライブを設定する()
    絶対パス = ActiveWorkbook.Path              '現在開いているブックのパスを取得する
    ドライブ = Left(絶対パス, 1)                'ドライブ名を取り出す
    ChDrive ドライブ                            'カレントドライブを変更する
End Sub
以上のほかにも色々な方法があるでしょう。パソコン環境は、職場によりユーザーにより様々ですから、フィットする方法を考案しましょう。これも楽しみかも知れませんね。

 

Excel VBA Macro