ExcelにTwitterリンクを貼ると無効になる問題とその解決法メモ

#はじめに
初投稿です。プログラミング知識は情報系学生の学部レベルの知識しかないため、間違ったことを書いてしまうかもしれません。この記事は私と同じくらいの初心者を対象にしています。お手柔らかにお願いします。

#目次
1. ExcelにTwitterのリンクを貼ると無効になる問題
2. 原因は？
3. マクロを使った解決法

#1. ExcelにTwitterのリンクを貼ると無効になる問題
購入した同人誌の管理をExcelでやろうと思い立ち、これまでに購入した同人誌の名前、ジャンル、値段、サークル名などをぽちぽちExcelシートに入力していました。サークル(作家)のTwitterアカウントにすぐ飛べるようにリンクを貼っていたのですが、ある日(2021/2/2)突然、そのリンクを押すと下の画像のようなポップアップが表示され、リンク先へ飛べないようになりました。
![EtKJ88tVcAAvYXM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2278539/d8735c23-dd1f-d0e0-ee1b-c8eb7cb41ed4.png)
※画像はあくまで例です

新刊情報と作家さんの生存情報をすぐチェックできないのは非常に困ります。
でもなぜかTwitterアカウントへのハイパーリンクのみが無効になっているという奇妙な現象が発生してしまいました...

#2. 原因は？
「原因は？」なんて見出し作っておいてなんなんですが、よくわかりませんでした！(クソまとめ記事感)
Excelの全てのハイパーリンクが無効になるならまだしも、Twitterへのリンクだけなので意味わかんない。
もしご存知の方いらっしゃいましたら教えてください。

#3. マクロを使った解決法
なぜリンクが無効になるかの原因は分かりませんでしたが、マクロによる力業でこの問題を解決していこうと思います。
ここでは例として、B列目にURLを置き、A列目に行に対応したハイパーリンクを生成しようと思います。

##大体の流れ

1.　標準モジュールにハイパーリンクを生成する関数、*hyperlinks()*を定義
2.　標準モジュールにWebブラウザを起動し該当URLへ移動する関数、*Twitterlinks()*を定義
3.　ハイパーリンクをクリックしたときに*Twitterlinks()*を呼び出す関数、 *Workbook_SheetFollowHyperlink()*を定義

##準備
Excelでマクロを組むには開発タブを表示させる必要があります。開発タブの表示のさせ方は別記事をご参照ください。

エクセルの開発タブを表示する方法｜Office Hack
https://office-hack.com/excel/development-tab/

「開発」タブ　→　「Visual Basic」　→　「挿入」　→　「標準モジュール」　
で標準モジュールを挿入します。これからは主に標準モジュールのModule1と、Microsoft Excel OblectsのThisWorkbookを編集していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2278539/a9d5a730-c7fa-fdf7-cbb3-9204d1d03919.png)

##編集
###Module1

```vb
Sub hyperlinks()
    Dim i As Long
    For i = 1 To Cells(1, 1).End(xlDown).Row 'A1セルからA列目の最後のセルまで繰り返し
        With ThisWorkbook.ActiveSheet
            .hyperlinks.Add Anchor:=.Cells(i, 1), _
            Address:="", _
            SubAddress:="", _
            ScreenTip:=.Cells(i, 2).Value, _
            TextToDisplay:=.Cells(i, 1).Value
        End With
    Next
End Sub

Sub Twitterlinks()
    Dim k As Long
    k = Selection.Row '選択したセルの行番号
    'Webブラウザ(Google Chrome)を起動し指定URLに移動
    CreateObject("WScript.Shell").Run _
    ("chrome.exe -url " & Cells(k, 2).Value)
End Sub
```
Module1ではハイパーリンクを生成する *hyperlinks()* と、Webブラウザを起動し該当URLへ移動する関数、*Twitterlinks()* を定義しています。Hyperlinks.addメソッドについて詳しくは下記のページを参照してください。

Hyperlinks.Add メソッド (Excel) | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/vba/api/excel.hyperlinks.add

###ThisWorkbook

```vb
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    Call Twitterlinks
End Sub
```
ThisWorkbookでは、ハイパーリンクをクリックしたときに *Twitterlinks()* を呼び出す命令について書いています。

###使い方
それでは組んだマクロを実際に動かしてみましょう。まず、B列に任意のTwitterアカウントのリンクを貼ります。A列にはできるだけわかりやすいアカウント名などを書いておくと良いと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2278539/20be6846-c379-c2dc-c9a6-dd010c8faf2c.png)
次に、 *hyperlinks()* を動かします。クイックアクセスツールバーから「クイックアクセスツールバーのユーザ設定」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2278539/277feaf1-28ee-5237-ba47-d539f376ec15.png)
「その他のコマンド」を選択すると、次のような画面が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2278539/bb64e129-d053-dba8-26e7-e250a07a882b.png)
「コマンドの選択」 → 「マクロ」 → 「hyperlinks」 を選択し、「追加」 → 「OK」で画面を閉じてください。
エクセルシートのクイックアクセスツールバーにマクロのマークが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2278539/5b89367b-0d87-3875-63cb-68aaeaef6faf.png)
新しく表示されたマクロのマークを押すと、A列のハイパーリンクにB列のTwitterアカウントのURLが紐づけられます。クリックするとTwitterアカウントへ問題なく飛べると思います！おつかれさまでした。

:::note
上記のコードのままだと、ハイパーリンクと対応するURLは必ず同じ行に存在する必要があります。Module1内の数字をいじくると好きな場所にハイパーリンクとURLを置けるようになります。
:::

#最後に
最後までお読みいただきありがとうございます。
Twitterのハイパーリンクが無効になる問題を力業で解決しました。もっとよい解決方法がありましたらコメントでご教示いただけますと幸いです。