Excel 2013 マクロ講座 53回

ハイパーリンクを解除してもアドレスは保存

以前、ハイパーリンクを解除するマクロは、ハイパーリンクをまとめて削除するマクロで紹介しました。

今回は、ハイパーリンクを解除したいんだけど、設定してあったアドレスは、残しておきたいというケースです。
はじめに、ハイパーリンクからアドレスだけを取り出すマクロを、次にハイパーリンクを解除して隣にアドレスを抽出するマクロの2つを紹介します。
(サンプルファイルは、こちらから マクロ講座53回サンプルデータ

対象範囲のハイパーリンクを解除するには

ではまず、3行マクロ講座 20回のおさらいです。
アクティブシートのハイパーリンクを解除するマクロは、
Sub アクティブシートのハイパーリンク削除()
    ActiveSheet.Hyperlinks.Delete
End Sub   
    
で、シート上のハイパーリンクすべてが削除されます。
こちらは、選択範囲のセルに設定してあるハイパーリンクを解除します。
Sub 選択したハイパーリンク削除()
    Selection.Hyperlinks.Delete
End Sub   
    
どちらも、Hyperlinksコレクションに対してDeleteメソッドを実行して、対象範囲のすべてのHyperlinkオブジェクトを一括で解除するマクロです。。

セルに設定されたアドレスを隣のセルに書き出すには、

HyperlinkオブジェクトのRangeプロパティでは、そのハイパーリンクが設定されている セルを表すRangeオブジェクトが取得できます。
ハイパーリンクを解除してアドレスを取り出すマクロ1
はじめに、リンクに対して、変数の宣言をします。
Hyperlinkのhが使われることが多いですが、ここではわかりやすくするためにリンクとしましょう。
Dim リンク As Hyperlink
個々のリンクのアドレスを取り出すためには、For Each ~ Next構文を使いループします。 もうお馴染みですね。
For Each~Nextステートメント
コードを構文に当てはめると、
Sub ハイパーリンクを隣のセルに抽出()
    Dim リンク As Hyperlink
    For Each リンク In Selection.Hyperlinks
        実行したい処理
     Next リンク
End Sub
実行したい処理は、アドレスを隣に取り出すということですね。
これは、Rangeプロパティでハイパーリンクが設定されているセルを表すRangeオブジェクトが取得できるのですから、
リンク.Range.Offset(0, 1).Value = リンク.Address
とできます。
ハイパーリンクを解除してアドレスを取り出すマクロ2
コードを実行すると、
ハイパーリンクを解除してアドレスを取り出すマクロ3
ハイパーリンクを隣の列に抽出することができました。
ハイパーリンクを解除してアドレスを取り出すマクロ4
コードは、
Sub ハイパーリンクを隣のセルに抽出()
    Dim リンク As Hyperlink
    For Each リンク In Selection.Hyperlinks
        リンク.Range.Offset(0, 1).Value = リンク.Address
     Next リンク
End Sub

ハイパーリンクを解除してもアドレスを抽出

アドレスを隣に取り出して、ハイパーリンクは削除するコードに変更します。
リンク.Deleteを追加するだけです。
Sub ハイパーリンクを解除して抽出()
    Dim リンク As Hyperlink
    For Each リンク In Selection.Hyperlinks
        リンク.Range.Offset(0, 1).Value = リンク.Address
        リンク.Delete
    Next リンク
End Sub
ハイパーリンクを解除してアドレスを取り出す5
スポンサーリンク
スポンサーリンク