エクセルのセルをクリックすると、任意のファイルを開くことができるVBAを紹介します。
前回は、特定のフォルダを検索してファイル名の一覧を表示するマクロを紹介しました。
ファイルの一覧は要らないです。そのかわり、リストにあるセルをクリックしたら関連するファイルを開くようにしたいです。
すでにエクセルにデータがあって、そのセルをクリックしたら該当するファイルが開くマクロを紹介します。
いくつかパターンを挙げますので試してみてください。
よろしくお願いします!
セルをクリックたらファイルを開くマクロを実行する
このようなリストを作っています。
A列に取引先コード、B列に取引先名があります。
今回はまず、データのあるシート自体にマクロを記述しましょう。
シートにマクロを記述する理由は、
「標準モジュールに記述すると、すべてのシートが対象になるため」です。
対象のシート(赤丸)をクリックし、コードを記述するウインドウを表示します。
セルをクリックをしたらファイルを開くVBA
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 Then
Call 検索_Click
End If
End Sub
クリックをしたらファイルを開くVBAの解説
ただし、データを追加したときや、カーソルが該当列に行ったときもファイル検索を開始してしまうので、次のように追加をするとよい。
Dim ans As Long
If Target.Column = 1 Then
ans = MsgBox(“検索しますか”, vbYesNo)
If ans = vbNo Then
End
End If
Call 検索_Click
End If
ファイルを開くVBA
次に、フォルダを検索して、該当するファイルを開くマクロについてです。
先述のDirコマンドを実行して、ファイルを検索するところは同じです。
ファイルを開くVBA
Sub 検索_Click()
Const SEARCH_DIR As String = “C:¥Users¥¥フォルダ名””
Const SEARCH_FILE As String = “.csv”
Dim tmpFile As String
Dim strCmd As String
Dim buf() As Byte
Dim FileList() As String
Dim cnt As Long, i, x As Long
tmpFile = Environ(“TEMP”) & “¥Dir.tmp”
strCmd = “Dir “”” & SEARCH_DIR & “¥” & SEARCH_FILE & _
“”” /b/s/a:-d > “”” & tmpFile & “”””
With CreateObject(“Wscript.Shell”)
.Run “cmd /c” & strCmd, 7, True
End With
If FileLen(tmpFile) < 1 Then
MsgBox “該当するファイルがありません”
Exit Sub
End If
Open tmpFile For Binary As #1
ReDim buf(1 To LOF(1))
Get #1, , buf
Close #1
Kill tmpFile
FileList() = Split(StrConv(buf, vbUnicode), vbCrLf)
cnt = UBound(FileList)
x = ActiveCell.Value
For i = 0 To cnt – 1
If FileList(i) Like “” & x & “” Then
CreateObject(“Shell.Application”).ShellExecute FileList(i)
End If
Next i
Erase FileList
End Sub
ファイルを開くVBAの解説
ファイル名がそれぞれユニークな取引先コードである場合
x = ActiveCell.Value
For i = 0 To cnt – 1
If FileList(i) Like “” & x & “” Then
CreateObject(“Shell.Application”).ShellExecute FileList(i)
GoTo Re:
End If
Next i
Erase FileList
Re:
End Sub
として「For~Next」の繰り返しを離脱できる。
該当するファイルが存在しない場合
メッセージを表示するならば、「Dim n As Long」を宣言し、
x = ActiveCell.Value
n = 0
For i = 0 To cnt – 1
If FileList(i) Like “” & x & “” Then
CreateObject(“Shell.Application”).ShellExecute FileList(i)
n = n + 1
End If
Next i
If n = 0 Then
MsgBox x & ” 該当するファイルがありません”
End If
会社名で検索する場合、全角と半角を区別しない(xとファイル名を全角で揃えて比較)
x = StrConv(ActiveCell.Value, vbWide)
For i = 0 To cnt – 1
If StrConv(FileList(i), vbWide) Like “” & x & “” Then
CreateObject(“Shell.Application”).ShellExecute FileList(i)
End If
Next i
便利ツールを作成する場合などに利用してみてください。
コメント