すぐマク YNxv918 Home | Search | Contents | Gallery | Introduction | Service | Support | What's New!
ドライブ指定を簡単に変えれないか?
Question 33.1 開始終了 Previous Next
このホームページの更新をいつも楽しみにしています。おかげさまで、マクロがほんの少しですが理解できるようになりました。
Cドライブで使用していたファイルを、別のパソコンのAドライブ等に移動した場合などでは、アドレスを書き換えなければいけないのでしょうか?
何かよい方法があれば教えていただけませんか。
Answer  Excel 97以上 Copyright (C) 2000.10.26 Yoshioh Nagai
ハードディスクの起動ドライブの名は、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
'=========================================================================================
以上のほかにも色々な方法があるでしょう。パソコン環境は、職場によりユーザーにより様々ですから、フィットする方法を考案しましょう。これも楽しみかも知れませんね。
http://www.geocities.jp/happy_ngi/ Home | Contents | Gallery | Introduction | Service | Support | What's New!