第0回で配布しました汎用プロシージャのコードの紹介と簡単な解説をやっていきたいと思います!
以下のリンクから .bas ファイルをダウンロードできます(zipファイル)
今回ご紹介するプロシージャは
プロシージャ名 | 概要 |
---|---|
OpenFolder | フォルダを開く(cmd経由) |
OpenFile | ファイルを開く(cmd経由) |
になります。VBA始めたてだった頃に「え、Excelから他のファイル開けるの?!」って驚きましたね(笑)
そしてVBAで他のファイルやフォルダを開く方法はいくつか存在し調べてみると結構まどろっこしかったりします。
今回はコマンドプロンプト(cmd)を経由するという方法を採りました。この方法のメリットとしては動作が軽いこととファイルであれば既定のアプリで開くことができるという点が挙げられます、その汎用性の高さから採用しました。
他にもExcelファイルであれば
Workbooks.Open "Excelファイルのフルパス"
でしたり、
ShellExecute 0, "open", "フルパス"
CreateObject("Shell.Application").Open ("フルパス")
などがあります。詳細は「VBA ファイル フォルダ 開き方」などで検索してみてください!
OpenFolder
Sub OpenFolder(folderPath As String)
'------------------------------------------------------------------------------------------------------------------------------
' 概要 |指定したフォルダを開く
'------------------------------------------------------------------------------------------------------------------------------
' 引数1 |folderPath - フォルダの絶対パス(String型)
' |※非同期処理であることに注意
'------------------------------------------------------------------------------------------------------------------------------
' 実装 |Ver.1.0.0(2025/04/20:新規)
'------------------------------------------------------------------------------------------------------------------------------
If folderPath = "" Then Exit Sub
If Dir(folderPath, vbDirectory) = "" Then
MsgBox "指定されたフォルダは存在しません。", vbExclamation
Exit Sub
End If
'コマンドプロンプトを経由して開く
shell "explorer.exe """ & folderPath & """", vbNormalFocus
End Sub
引数に開きたいフォルダのフルパスを指定して実行するとエクスプローラーが開いてくれます。例えばですがシート上にボタンを用意し、そこに指定フォルダを開くプロシージャを設定していただくとボタンクリックでエクスプローラーが開いてくれます。これを多数用意していただくことでExcelをウィジェットアプリのような使い方ができます。
昔Excel上でフォルダツリーを表示するアプリを作り、イベント処理(BeforeDoubleClick)と組み合わせてフォルダのパスが表示されているセルをダブルクリックすることでエクスプローラーを表示させておりました。
OpenFile
Sub OpenFile(filePath As String)
'------------------------------------------------------------------------------------------------------------------------------
' 概要 |指定したファイルを開く
'------------------------------------------------------------------------------------------------------------------------------
' 引数1 |filePath - ファイルの絶対パス(String型)
' |※非同期処理であることに注意
'------------------------------------------------------------------------------------------------------------------------------
' 実装 |Ver.1.0.0(2025/04/20:新規)
'------------------------------------------------------------------------------------------------------------------------------
If filePath = "" Then Exit Sub
If Dir(filePath) = "" Then
MsgBox "指定されたファイルは存在しません。", vbExclamation
Exit Sub
End If
'コマンドプロンプトを経由して開く
shell "cmd /c start """" """ & filePath & """", vbHide
End Sub
OpenFolder同様、開きたいファイルのフルパス指定して実行することで任意のファイルをその既定のアプリで開くことができます。汎用性の高さが強みではありますが弱点もありまして、コマンドプロンプトを経由しExcelとは非同期で処理(コマンドプロンプトに命令を出した後、コマンドプロンプトがファイルを開く処理をしつつもExcelはVBAの処理を続ける)のため、.xlsxや.csvなどのファイルにおいてセルの内容を取得したい場合は処理が上手くいかない可能性が高いです。そういった場合は上で紹介しましたWorkbooks.Openを使ってください。
実は奥が深いファイル・フォルダ操作の世界、用途に合わせて適切な方法を使ってファイル操作マスターしてください!
直感!VBAシリーズ記事一覧
もしよろしければ他の記事もご覧ください!