セルにファイル名を複数入力しておきユーザーフォームを開いてファイルの検索する

Excel VBA ファイル検索

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

仕事で複数のExcelファイルの修正や更新をお願いするときに役に立つ方法だと思います。

まずユーザーフォームを作成します、VBEの画面を表示して「挿入」メニュー → 「ユーザーフォーム」でUserForm1を作成します。

ツールボックスから「ラベル」と「テキストボックス」と「コマンドボタン」をユーザーフォームに配置します。

ラベルのプロパティウィンドウでCaptionを「ファイル名入力」にして、コマンドボタンのプロパティウィンドウでCaptionを「検索開始」にします。

「検索開始」のコマンドボタンをダブルクリックして次のコードをコピーして貼り付けます。

Private Sub UserForm_Initialize()           'アクティブなセルの値をユーザーフォームのテキストボックスに表示します。

UserForm1.TextBox1.Text = Cells(ActiveCell.Row, "A").Value

End Sub

Private Sub CommandButton1_Click()

Dim name As String
name = UserForm1.TextBox1.Text

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 '開いていたファイルを最前面に表示します。

Unload UserForm1 'ユーザーフォームを閉じます。

Exit Sub

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

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

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

Unload UserForm1 'ユーザーフォームを閉じます。

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

Unload UserForm1

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

UserForm1.Show

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 '右クリックしたときの右クリックメニューの表示をキャンセルする。
UserForm1.Show 'ユーザーフォームを表示する。

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列の場合は右クリックメニューの表示をキャンセルしてユーザーフォームを表示します。ダブルクリックしたセルがA列以外の場合はセルが編集モードになるのをキャンセルしています。全体としてA列以外のセルは入力できないようにする設定をしています。

これでA列のセルに入力してあるファイル名を「右クリック」するとユーザーフォームが表示されてテキストボックスにファイル名が自動で入り、検索開始ボタンを押せばすぐに検索を開始することができるようになりました。

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

ファイルの修正や更新をお願いするときにあらかじめセルにファイル名を入力しておいて、上から順にセルを選択していけば確実に作業をすることができるので、安心して仕事を任せられると思います。

コメント