HOME技術ExcelExcel VBA:フォルダを開く

Excel VBA:フォルダを開く

Excelでボタンをクリックしたらフォルダを開くようにするVBAです。

Shell EXPLORERPATH & OPENFOLDER , vbNormalFocus

EXPLORERPATH…エクスプローラーのパス
OPENFOLDER…開きたいフォルダのパス

エクスプローラーのパスには、以下を指定します。

C:\Windows\explorer.exe

現在のExcelファイルのあるフォルダを開く

現在のExcelファイルのあるフォルダを開くには、以下のように書きます。

Shell “C:\Windows\explorer.exe ” & ActiveWorkbook.Path , vbNormalFocus

※注意としては、explorer.exe “の部分は、”の前に半角のスペースが入ることです。

フォルダパスを任意の場所にする

Excelファイルのあるフォルダとは別のフォルダを指定したい場合もあるので、パスを「参照」ボタンを押して指定できるようにします。

まず、ワークシート上に「参照」ボタンを配置します。ここでは名前をSelectFolderとします。

Private Sub SelectFolder_Click()
Dim InitialFolder As String
If Worksheets(SHEETNAME).Range(FOLDER) <> “” Then
InitialFolder = Worksheets(SHEETNAME).Range(FOLDER)
Else
InitialFolder = ThisWorkbook.Path
End If
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = InitialFolder & “\”
If .Show = True Then
Worksheets(SHEETNAME).Range(FOLDER) = .SelectedItems(1)
End If
End With
End Sub

SHEETNAME…任意のワークシート名。
FOLDER…任意のセル名(A1など)。
このワークシートのセルに、開きたいフォルダのパスが入力されていれば、そのフォルダを開き、何も入力されていなければ、実行しているEXCELファイルの場所を開きます。

3~7行目までのIf文の処理は、「参照」ボタンを押したときに最初に開くパスを指定する処理です。
「参照」ボタンを押したときに、開くフォルダのパスが空欄だった場合には、現在のExcelファイルの場所を設定します。
なお、パスが間違っていて開けるフォルダがない場合には、デフォルトでマイドキュメントが開きます。

8行目以降は、「参照」ボタンを押して開きたいフォルダを選んで「OK」を押したら、そのパスをセル(FOLDER)にセットします。

次に、「フォルダを開く」ボタンを作ります。名前はOpenLocalFolderにします。

Private Sub OpenLocalFolder_Click()
Dim OpenFolder As String
On Error GoTo ERR_HYOJI
OpenFolder = Worksheets(SHEETNAME).Range(FOLDER)
Shell “C:\Windows\explorer.exe ” & OpenFolder , vbNormalFocus
Exit Sub
ERR_HYOJI:
MsgBox “出力フォルダが存在しません。”
End Sub

4行目、OpenFolderには、SelectFolderで指定したパスをセットします。
これで、SHEETNAMEというシートの、FOLDERとして指定したセルに入力されているパスへのフォルダを開きます。

関連記事

Excelでセルに入力できる文字数制限を設定する

Excelで、セルに入力できる字数の制限を設定する方法です。 全角・半角問わず字数制限する メニューから「データ」を選択し「データの入力規則」をクリックします。 データの入力規則設定画面で、「設定」タ…続きを読む

Excel VBA:指定した列を非表示にする

Excel VBAで、予め指定した列を非表示にします。 コード hiddenColumn = Array(3, 4, 5, 6) For i = 0 To UBound(hiddenColumn) W…続きを読む

Excel VBA:最終行番号を取得する

Excelでデータ管理をしていて、VBAでその全データに対して何らかの処理を行う場合、1行目から最終行までループさせて処理を1行ずつ行う場合には、最終行を取得する必要があります。 今回は、最終行を取得…続きを読む

Excelで起動時にフォームのみ表示する

Excelで起動時にフォームを表示し、Excelそのものの表画面は非表示にする方法です。 起動時にフォームを表示する 「開発」→「コードの表示」から「Microsoft Visual Basic fo…続きを読む

Excelで数式のみをコピーする

Excelで数式だけをコピーして貼り付ける方法です。 以下のように、セルC6に入力されている数式を、セルD6にコピーしたい場合、セルの右下をドラッグしてD6に持っていくと枠線やセルの背景色などの余計な…続きを読む

Excelで指定行おきに色をつける

Excelの行に、1行おきに色を付けたい、2行おきに色を付けたい、というときの方法です。 まず、色を付ける範囲を指定します。 次に、メニューから「ホーム」→「条件付き書式」→「新しいルール」をクリック…続きを読む

Exdel VBA:グローバル変数の指定

Excel VBAでグローバル変数を設定する方法です。 プロシージャ内で宣言した変数は、そのプロシージャ内でしか通用しません。 すべてのプロシージャから参照するような定数を設定する場合には、以下のよう…続きを読む

Excelで複数部印刷しようとしても指定部数印刷されない

Excelを開いて複数部印刷しようとしても、指定部数が印刷されない不具合への対処法です。 例えば、5部印刷しようとしても、1部ないしは2部しか印刷されません。 そして、エラーメッセージとして「【プリン…続きを読む

Excel VBAで他のプログラムを実行する際にウィンドウを最小化する

Excel VBAで他のプログラムを実行した際に、実行しているプログラムのウィンドウを最小化表示にする方法です。 CreateObject(“WScript.Shell”).R…続きを読む

Excelのフォームのタブオーダーを指定する

Excelでフォームを設定し、部品を複数配置していると、タブキーやEnterキーを押すと次の部品にフォーカスを飛ばすことができます。 この順序が意図したとおりでない場合に、自分で設定する方法を調べまし…続きを読む