0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

第5回 直感!スグに使える業務向けVBA汎用プロシージャ(ファイル・フォルダ操作)

Last updated at Posted at 2025-04-28

第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シリーズ記事一覧

もしよろしければ他の記事もご覧ください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?