ハイパーリンクのバグ


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

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

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

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

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

当然ですが、移動したセルC9にもハイパーリンクが設定されていますね。問題は、その上のセルです。空欄のはずのセルC6、セルC7、セルC8にも、なぜかハイパーリンクが設定されています。

(4)さらに、コピーした複数セルの一部を削除してみます。ここでは、アクティブセルをセルC5に移動してDeleteキーを押します。

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

ついでにもうひとつ。上記手順(2)を実行した直後、ワークシート上には計4つのハイパーリンクが存在しています。ところが、マクロでこれを取得しようとすると、ハイパーリンクの数は2つと認識されます。

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

セルC5のハイパーリンクだけを削除すると、コピーした3セルすべて削除されてしまいます。

Sub Sample2()
    Dim i As Long, msg As String
    Range("C5").Hyperlinks(1).Delete
    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

Excel 2016でも同じ結果になりましたので、まだ修正されていないようですね。