機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > 機能と数式

ハイパーリンクのバグ



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

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





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





ここでは3つのセル(C4:C6)にコピーしました。コピー先の3セルには、コピー元と同じハイパーリンクが設定されます。
(3)ここで、一番下のセルC6をセルC9にドラッグします。これは、セルを移動する操作です。







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



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





すると、ハイパーリンクをコピーしたC5以外のセルからも、ハイパーリンクの設定が消えてしまいます。


気になったので調べてみたら、(4)の現象だけはMicrosoftのサポート技術情報に書かれていました。

■複数セルに設定されたハイパーリンクの一部を削除すると全て削除
http://support.microsoft.com/default.aspx?scid=kb;ja;JP417111

今回のように、複数セルに貼り付けた場合だけでなく、オートフィルでコピーしたり、はじめから複数セルを選択した状態でハイパーリンクを設定したときに発生するそうです。また、上記手順(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 97とExcel 2007でも同じ結果になりましたので、すべてのバージョンに潜むバグでしょう。





このエントリーをはてなブックマークに追加