セルにファイル名を複数入力して右クリックでファイルの検索する

Excel VBA イベントプロシージャ

前回のブログではExcelでA列のセルに入力したファイル名を右クリックすると、ユーザーフォームが開いてテキストボックスにファイル名が自動で入力されてExcelファイルの検索ができるVBAのプログラムを紹介しました。

今回はもっと簡単にセルに入力したファイル名を右クリックするとファイル検索できるプログラムを作成したいと思います。

VBEを起動して「挿入」→「標準モジュール」を選択して標準モジュールを作成します、作成した標準モジュールのModule1に次のコードを貼り付けます。

Sub ファイル検索()

Dim name As String
name = Cells(ActiveCell.Row, "A").Value

Dim ブック As Workbook
Dim Flag As Boolean

For Each ブック In Workbooks '検索したファイルが開いているか調べます。

If ブック.name = name & ".xlsx" Then Flag = True

Next ブック

If Flag = True Then '検索したファイルが開いていた場合の処理。

MsgBox "「" & name & "」" & "のファイルは既に開いているので最前面に表示します。"

Workbooks(name & ".xlsx").Activate '開いていたファイルを最前面に表示します。

Exit Sub

Else '検索したファイルが開いていない場合はファイルを開きます。

If Dir(ThisWorkbook.Path & "\フォルダ\" & name & ".xlsx") <> "" Then 'ファイルがフォルダ内にあるか調べます。

Workbooks.Open Filename:=ThisWorkbook.Path & "\フォルダ\" & name & ".xlsx" 'ファイルを開きます。

Else 'ファイルがフォルダ内に無いときはメッセージを表示します。

MsgBox "ファイルはフォルダ内にありません。"

End If

End If

End Sub

シートモジュールにイベントプロシージャを作成する

VBAProjectの「Sheet1」をダブルクリックしてSheet1のコードウィンドウを表示し次のコードをコピーして貼り付けます。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)  'セルを右クリックしたときのイベント。

If Not Intersect(Target, Columns("A")) Is Nothing Then '選択されたセルがA列の場合は。

Cancel = True '右クリックしたときの右クリックメニューの表示をキャンセルする。
Call ファイル検索 '標準モジュールのファイル検索を呼び出します。

Else 'A列以外のセルが選択された場合は。

Cancel = True '右クリックしたときの右クリックメニューの表示をキャンセルする。

End If

End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'ダブルクリックしたときのイベント。

If Intersect(Target, Columns("A")) Is Nothing Then 'ダブルクリックしたセルがA列以外の場合は。

Cancel = True 'セルが編集モードになるのをキャンセルする。

End If

End Sub

コードは前回のブログとほとんど同じですが、右クリックしたセルがA列の場合は標準モジュールの「ファイル検索」を呼び出すようにしています。

マクロ実行するブック(ファイル検索.xlsm)とファイルを検索するフォルダは同じフォルダ内に保存してください。ThisWorkbook.Pathでファイルの保存場所を自動取得してExcelファイルを開いています。

これでA列のセルに入力してあるファイル名を「右クリック」すると「フォルダ」内のファイル検索ができるようになりました。

詳細部分は前回のブログの説明を参考にして自分なりにコードをアレンジすると良いプログラムが出来上がると思います。

コメント