ファイル操作

【VBA】カレントドライブ名の取得と変更するコード

更新日:2024/01/18

VBAでカレントドライブの文字列を取得する方法とコードを紹介します。

 

カレントドライブ名を取得する方法

VBAはカレントフォルダを取得する関数があるのでカレントドライブを取得する関数もありそうですが、残念ながら用意されていません。
そのため、自分で関数を作成する必要があります。

今回は、次の二つの方法を紹介します。

CurDir関数の方が簡潔なコードになります。

FileSystemObjectオブジェクトを他の目的で利用している時でなければ、CurDir関数を使用した方が良さそうです。

CurDir関数からカレントドライブ名を取得

CurDir関数を実行するとカレントフォルダのパスを返すので、ドライブを抜き出します。

Function CurDrive() As String
    CurDrive = Split(CurDir, ":")(0)
End Function

":"で分割して、最初の要素を返すだけです。

作成した関数の確認のために、次のコードを実行してみます。

Sub CurDriveTest()
    Debug.Print CurDrive()
    ChDrive ("d")
    Debug.Print CurDrive()
End Sub

イミディエイトウィンドウに、次のように表示されます。
ただし、Dドライブが存在しないときは、エラーになります。

C
D

FileSystemObjectからカレントドライブ名を取得

FileSystemObjectオブジェクトGetAbsolutePathNameメソッドは相対パスを絶対パスに変換してくれます。

そこで相対パスに"."を指定することで、カレントフォルダを取得できます。

取得した結果から、ドライブを抜き出します。

Function CurDriveFSO() As String
    Dim current As String
    
    current = CreateObject("Scripting.FileSystemObject") _
                            .GetAbsolutePathName(".")
    
    CurDriveFSO = Split(current, ":")(0)
End Function

前項のCurDirGetAbsolutePathNameメソッドに置き換わっただけですね。

作成した関数の確認のために、次のコードを実行してみます。

Sub CurDriveTest()
    Debug.Print CurDriveFSO()
    ChDrive ("d")
    Debug.Print CurDriveFSO()
End Sub

結果は、前項のCurDirと同じです。

C
D

 

カレントドライブを変更する方法

カレントドライブの変更は、ChDriveステートメントで行います。

次のコードは、現在のパスを表示後にDドライブに変更して、再度現在のパスを表示しています。

Sub ChDriveTest()

    Debug.Print "【変更前】" & CurDrive
    ChDrive ("d")
    Debug.Print "【変更後】" & CurDrive
    
End Sub

コード中のCurDriveは、このページのCurDir関数からカレントドライブ名を取得で紹介した関数です。

変更前のドライブがCのとき、コードの実行結果は次のようになります。

【変更前】C
【変更後】D

更新日:2024/01/18

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。