エクセルで255字以上のURLをクリック一発で表示する方法

by

エクセルに記述されたURLをクリックで表示するには、Hyperlink関数を使用するのが一般的ですが、文字数に制限があり255字以上だとエラーが出てしまいます。

マイクロソフトの公式サイトー「Excel の仕様と制限」

ググると、URLを255字以下に分割してCONCATENATE 関数または連結演算子 (&)を使った方法が載っていましたが、元のURLはとても長くまた対象とする行数が10万行以上あったのでとても無理・・・さらにググるとVBAのShell関数を使えばできるというページを発見。

VBAはもちろん、Shell関数って何?状態なので、さっそく、Chat GPTに質問投げてみました。

エクセルのA列にあるURLが入ったセルをダブルクリックするとChromeが立ち上がってURLのページを開くVBAのshell関数を教えてください

即座に下記のVBAを入れるようとの回答がありました。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim clickedCell As Range
    Dim browserPath As String
    Dim url As String

    ' クリックされたセルを取得
    Set clickedCell = Intersect(Target, Range("A:A"))
    
    ' クリックされたセルが存在し、URLが入っている場合のみ処理を実行
    If Not clickedCell Is Nothing And clickedCell.Hyperlinks.Count > 0 Then
        url = clickedCell.Hyperlinks(1).Address
        
        ' ブラウザのパスを設定 (Chromeのパスを指定)
        browserPath = "C:\Program Files\Google\Chrome\Application\chrome.exe"
        
        ' ブラウザを起動してURLを開く
        Shell browserPath & " " & url, vbNormalFocus
        
        ' ダブルクリックのデフォルトの動作をキャンセル
        Cancel = True
    End If
End Sub

さっそく試してみましたが、ウンともスンとも言わず、Chat GPTに返したところ、間違っていたようで別のVBAを教えてくれましたが、そちらもダメ・・・

どうもShell関数ではだめなようで、代わりに「FollowHyperlinkメソッド」なるものを推奨していました。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim clickedCell As Range
    Dim url As String

    ' クリックされたセルを取得
    Set clickedCell = Intersect(Target, Me.Range("A:A"))

    ' クリックされたセルが存在し、URLが入っている場合のみ処理を実行
    If Not clickedCell Is Nothing Then
        If InStr(1, clickedCell.Value, "http://") = 1 Or InStr(1, clickedCell.Value, "https://") = 1 Then
            url = clickedCell.Value

            ' URLを開く
            ThisWorkbook.FollowHyperlink url
        End If
    End If
End Sub

これは大当たりだったようで、見事に成功!

なぜかChrome起動のコードが消えていますが、結果オーライです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です