【ClipGo①】コピーするだけでファイルもURLも即開く!
あなたはこんな経験はありませんか?
パソコン作業中に「このアドレスのフォルダやファイルを開きたい」「このURLをブラウザに貼り付けてWebページを開きたい」という場面で、対象の文字列を正確に選択するのが意外と大変。気をつけて選択したつもりでも、なぜか開かない。しかたなくフォルダの階層をひとつひとつ辿ったり、アドレスをもう一度選び直したり、あきらめてWeb検索したり……。
単純な作業ですが、神経を使いじわじわ疲労が溜まりますよね・・・・。
エンジニアはどうしてるの?
調べてみると、Mac派のエンジニアは「Raycast」や「Alfred」というランチャーアプリをよく使っているようです。キーワードを打つだけでファイルもURLも開けて、非常に便利そう。ただしMac専用。
私はエンジニアでもなく、Windowsユーザーなので使えません。
私の解決策:コードに頑張ってもらう
そこで考えたのが、「コピーした文字の中からパスやURLを自動で拾って開く」仕組みです。多少余分な文字が混じっていても、ちゃんと動くのがポイント。(つまり雑な選択でOK!)
状況に応じて2種類使い分けています。
Excelを開いているとき → VBAマクロで実行
Excelをダッシュボード代わりに使っているので、そこからマクロを呼び出すのが一番速い。URLもファイルパスも両方対応しています。
それ以外のとき → PowerShellで実行
ExcelなしでもCtrl+Alt+Qのショートカット一発で動きます。社内システム上でも使えるのが便利。
設定方法
詳しい設定はAIに聞くのが一番早いです。以下のコードを見せて「このPCで動くように設定して」とお願いするのがオススメです。
※コードの中身は分からなくて大丈夫。まるごとコピーしてAIに渡すだけでOKです。
VBAマクロ
コードを見る(クリックで開閉)
Sub ClipGo()
Dim rawInput As String
Dim dataObj As Object
' --- クリップボード取得 ---
On Error Resume Next
Set dataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
dataObj.GetFromClipboard
rawInput = dataObj.GetText(1)
If rawInput = "" Then rawInput = dataObj.GetText
On Error GoTo 0
rawInput = Trim(rawInput)
If rawInput = "" Then
MsgBox "クリップボードの情報を読み取れませんでした。" & vbCrLf & _
"一度メモ帳などに貼り付けてから再度コピーしてみてください。", vbExclamation
Exit Sub
End If
Dim regEx As Object
Dim matches As Object
Set regEx = CreateObject("VBScript.RegExp")
regEx.IgnoreCase = True
regEx.Global = False
' --- ① URLチェック(優先) ---
regEx.Pattern = "https?://[^\s""<>]+"
Set matches = regEx.Execute(rawInput)
If matches.Count > 0 Then
Dim url As String
url = Trim(matches(0).Value)
Shell "cmd /c start """" """ & url & """", vbHide
GoTo 終了
End If
' --- ② フォルダ/ファイルパスチェック ---
regEx.Pattern = "([a-zA-Z]:\\|\\\\)[^\r\n""<>|]+"
Set matches = regEx.Execute(rawInput)
If matches.Count > 0 Then
Dim targetPath As String
targetPath = Trim(matches(0).Value)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(targetPath) Or fso.FileExists(targetPath) Then
Shell "explorer.exe """ & targetPath & """", vbNormalFocus
Else
MsgBox "パスが見つかりませんでした。" & vbCrLf & _
"【抽出されたパス】" & vbCrLf & targetPath, vbExclamation
End If
Set fso = Nothing
GoTo 終了
End If
' --- ③ どちらも該当なし ---
MsgBox "URLもパスも見つかりませんでした。" & vbCrLf & _
"【コピーされている内容の先頭】" & vbCrLf & Left(rawInput, 100), vbInformation
終了:
Set regEx = Nothing
Set dataObj = Nothing
End Sub
PowerShellスクリプト
コードを見る(クリックで開閉)
Add-Type -AssemblyName Microsoft.VisualBasic
$rawInput = Get-Clipboard -Format Text
if ([string]::IsNullOrWhiteSpace($rawInput)) { exit }
$pattern = '([a-zA-Z]:\\|\\\\)[^\r\n"<>|]+'
$match = [regex]::Match($rawInput, $pattern)
if ($match.Success) {
$targetPath = $match.Value.Trim()
# まず最後のセグメント内で末尾から1文字ずつ削って探す
$searchPath = $targetPath
$lastSlashPos = $searchPath.LastIndexOf('\')
while ($searchPath.Length -gt $lastSlashPos + 1) {
if (Test-Path -LiteralPath $searchPath) { break }
$searchPath = $searchPath.Substring(0, $searchPath.Length - 1)
}
# それでも見つからなければ親フォルダをさかのぼる
if (-not (Test-Path -LiteralPath $searchPath)) {
$searchPath = Split-Path -Parent $targetPath
while (-not [string]::IsNullOrEmpty($searchPath) -and -not (Test-Path -LiteralPath $searchPath)) {
$searchPath = Split-Path -Parent $searchPath
}
}
if (-not [string]::IsNullOrEmpty($searchPath)) {
$finalPath = $searchPath
if (Test-Path -LiteralPath $finalPath -PathType Leaf) {
$finalPath = Split-Path -Parent $finalPath
}
Start-Process "explorer.exe" -ArgumentList "`"$finalPath`""
} else {
$msg = "指定された場所が見つかりません。`n`n【確認事項】`n・ネットワークドライブは接続されていますか?`n・パスのスペルは正しいですか?`n`n【抽出されたパス】`n$targetPath"
[Microsoft.VisualBasic.Interaction]::MsgBox($msg, 48, "フォルダを開けませんでした")
}
}
まとめ
ささやかな時短ツールですが、毎日ファイルやWebページをたくさん開く人にはかなり効果があると思います。「2アクションでファイルやWebページを開ける」「無駄なコピペがなくなる」これだけで大分ストレスが減ります。
良かったらぜひ試してみてくださいね!
次回:VBAマクロの設定方法
「コードはわかったけど、どうやってExcelに入れるの?」という方向けに、VBAマクロの設定手順を詳しく解説します。お楽しみに!