ハイパーリンクのバグ


セルにメールアドレスやURLを入力すると、自動的にハイパーリンクが設定されます。あるいは、Ctrl+Kを押して表示される[ハイパーリンクの挿入]ダイアログボックスで、任意のハイパーリンクを挿入することも可能です。うまく使えば、それなりに便利かもしれないハイパーリンク機能ですが、ひとつバグを発見しましたのでお教えしましょう。

まず、セルにハイパーリンクを設定します。メールアドレスでもURLでもOKです。

次に、今入力したハイパーリンクのセルを、別の複数セルにコピーします。

ここでは3つのセル(セル範囲C4:C6)にコピーしました。コピー先の3セルには、コピー元と同じハイパーリンクが設定されます。

ここで、一番下のセルC6を、セルC9にドラッグします。これは、セルを移動する操作です。

当然ですが、移動したセルC9にもハイパーリンクが設定されています。

ここまでは普通です。しかし問題は、その上のセルです。ブランクセルである「セルC6」「セルC7」「セルC8」にも、なぜかハイパーリンクが設定されています。

不思議な現象はそれだけじゃありません。さらに、コピーした複数セルの一部を削除してみます。ここでは、アクティブセルをセルC5に移動してDeleteキーを押します。

すると、ハイパーリンクを削除したセルC5以外のセルからも、ハイパーリンクの設定が消えてしまいます。また、上記操作ではセルを移動しましたが、ハイパーリンクを貼り付けた複数セルの間に、セルや行を挿入しても同じことになります。

あり得ませんね。バグですね。ちなみにこれ、マクロにも影響が出ます。最初のハイパーリンクを設定したセルB2を、セル範囲C4:C6にコピーしたところで、シート上のハイパーリンクをVBAで調べてみます。1つのハイパーリンクを3つのセルにコピーしたのですから、シート上には全部で4つのハイパーリンクがあるはずです。

Sub Sample1()
    Dim i As Long, msg As String
    msg = "ハイパーリンクの数:" & ActiveSheet.Hyperlinks.Count & vbCrLf
    For i = 1 To ActiveSheet.Hyperlinks.Count
        msg = msg & ActiveSheet.Hyperlinks(i).Range.Address & vbCrLf
    Next i
    MsgBox msg
End Sub

不思議です。全部で4つのセルにハイパーリンクが設定されているのですから、Countは4になるはずです。百歩譲って「コピーしたセル範囲C4:C6でひとつのハイパーリンク」と認識されているとしましょう。では、次のようにしてみます。セルC6のハイパーリンクだけジャンプ先を変更します。

よろしいですか?セルC4とセルC5のハイパーリンクには何もしていません。セルC6のハイパーリンクだけジャンプ先を変更しました。その結果、どうなると思いますか?先のマクロを実行すると、次のようになります。

どう考えてもおかしいですよね。ひとつのセルに2種類のハイパーリンクが設定されているなんて。ということは、これ、バグ確定です。

とまぁ、ハイパーリンクに関する変な挙動をご紹介しましたが、ここからは私の個人的な見解です。たぶんこれ、Microsoftは直さないと思います。ちなみにですけど、このバグに気づいたのはかなり昔です。ハッキリ覚えていませんが、日経PC21で「エクセルの謎」を連載している頃ですから、おそらく2005年あたりかと。本稿執筆時点が2021年ですから、もう16年も前です。あの優秀なMicrosoft開発チームが、このことに気づかないはずはありません。直っていないのは「気づいてるけど直していない」と考えるのが自然です。なぜなら、修正するコストをかけてまで直すほどではないと。おそらく、そう判断しているのでしょう。なぜ、そう判断しているのか。そもそも、Excelでハイパーリンクを使うユーザーは、それほど多くないであろうし、何よりも、こうしてセルにハイパーリンクを設定するという仕組み自体が、20年近く前に実装されたレガシーの仕組みだから。もしかすると、これからさらにExcelを進化させるには、このハイパーリンク機能って、"足かせ"になっているのではないかと。だから、ここには手を入れないと、そうMicrosoftは判断しているのではないかなって個人的に思います。

いずれにしても、多くのユーザーが行う操作ではないでしょうけど、心の片隅に「ハイパーリンクって、ちょっといろいろある」って、そう思ってた方がいいかもしれませんね。