【Excel】イライラの原因、セル内のハイパーリンクを解除する:Tech TIPS
WebブラウザからリンクをExcelにコピーすると、ハイパーリンクと呼ばれる状態が設定され、クリックでURLを開くようになる。このセルを編集しようとしてマウスでクリックすると、Webブラウザが開いてしまう。そこで、ハイパーリンクを削除する方法を紹介する。
対象:Office 2013/2016/2019/365
ハイパーリンクが設定されたセルに注意
WebブラウザからリンクをExcelにコピーすると、ハイパーリンクと呼ばれる状態が自動的に設定され、クリックでURLを開くようになるが、マウスでのセル選択ができなくなり、編集も面倒になる。
Webブラウザからコピーした範囲にリンクが入っていた場合、そのまま「Microsoft Excel(エクセル)」に貼り付けると、青字に下線のついたテキストとなり、クリックするとWebページが開く「ハイパーリンク」になる。ハイパーリンクは、特殊なセルやセル範囲の状態で、内部にURLなどのリンク先を持ち、クリックするとリンク先がWebブラウザで開かれる。
そのため、ハイパーリンクが付いたセルを編集しようとすると、ハイパーリンクがクリックされてしまい、Webブラウザが開いてイライラした経験は誰にでもあるはずだ。
そこで本Tech TIPSでは、Excelでハイパーリンクを作らないようにコピーしたり、ハイパーリンクを削除したりする方法を紹介する。
ハイパーリンクとは?
Excelのハイパーリンクのリンク先(Excelではこれを「アドレス」という)は、URLに限定されず、他のブックやシートなどへの参照も指定できる「汎用的」な仕組みである。ただし、そのためにセルを選択しようとしてクリックすると、リンク先への移動が発生してしまう。ハイパーリンクを選択するには、近隣のハイパーリンクのないセルを選択し、カーソルキーでアクティブセルを移動させて該当セルを選択するなど、扱いが少々面倒になる。
ハイパーリンクとは
ハイパーリンクとは、セル範囲を覆う透明なボタンのようなもので、クリックすると、指定されたアドレスを開く。ハイパーリンクはセル範囲に対しても設定でき、セル範囲全体で1つのハイパーリンクが設定される。その中のどのセルをクリックしてもアドレスが開く。セルには、表示される文字列のみが入り、青字や下線は書式で設定されている。これを編集するには、[Ctrl]+[K]キーで[ハイパーリンクの編集]ダイアログを開く。
書式などと同じくハイパーリンクは、単一のセルだけでなく、複数のセル範囲に対して設定することもできる。一見、個々のセルに個別にハイパーリンクが設定されているようだが、実際にはセル範囲全体に1つのハイパーリンクが設定されていることがある。編集時には、これを区別することは難しく、ハイパーリンクを解除したときに他のセルが同時に解除されることぐらいでしか確認できない。
これは、ハイパーリンクがセルの値ではなく、セルに対して設定される「状態」だからである。イメージ的にはハイパーリンクとは、アドレスを開く透明なボタンがセル範囲を覆っているような状態になる。このためセルを選択しても、数式バーで編集できるのは表示されている文字列だけだ。ハイパーリンクは、条件付き書式などと同じく、セルの値ではなく、セルやセル範囲に対して付加できる属性の一種ともいえる。ただ、条件付き書式ほど編集サポート機能が提供されていないため、扱いが面倒になっている。
貼り付けでハイパーリンクを作らないようにするには?
基本的にハイパーリンクが自動的に作成されるのは、ブラウザからリンクを含むHTMLなどをコピーして貼り付けた時である。このため、[形式を選択して貼り付け]などでHTML以外の「テキスト」などを選択すれば、貼り付け先のセルにハイパーリンクは付かない。
ハイパーリンクが設定される条件
Webブラウザで選択した範囲にリンクがあれば、これを貼り付けるときにExcelが自動的にハイパーリンクを設定する。なお、通常貼り付けでは、HTML形式が最優先されるが、[形式を指定して貼り付け]で[テキスト][Unicodeテキスト]などを選択すると、ハイパーリンクなしでテキストだけを貼り付けることが可能だ。
ハイパーリンクの編集は[Ctrl]+[K]キーで行う
ハイパーリンクを編集/解除するには、セルを選択した状態で[Ctrl]+[K]キーを押す。すると[ハイパーリンクの編集]ダイアログが開く。同様の操作は、[挿入]タブの[リンク]ボタンをクリックすることでも行える。
[ハイパーリンクの編集]ダイアログの「表示文字列」が、セルに表示されている文字列(リンク文字列)である。リンク先URLは、「アドレス」欄に表示されている。
また、ダイアログ右下側の[リンクの解除]ボタンを押すと、セルのハイパーリンクが削除され、表示文字列だけになる。ハイパーリンクがセル範囲(複数のセル)に設定されている場合でも、その中から1つのセルを選択して、リンクの解除を行うと、セル範囲全体のハイパーリンクが解除される。
もし、ハイパーリンクのURLが必要ならば、[Ctrl]+[K]キーで[ハイパーリンクの編集]ダイアログを開き、「アドレス」欄をコピーすればよい。その後、[リンクの解除]ボタンをクリックして、セルのハイパーリンクを解除し、元のセルなり、他のセルにURLを貼り付ければいいだろう。
ハイパーリンクをURLに書き換える(1)
ハイパーリンクをURLに書き換えるには、[Ctrl]+[K]キーでダイアログを開き、アドレス欄をコピーした後、[リンクの解除]ボタンでハイパーリンクを解除する。
ただし、この[ハイパーリンクの編集]ダイアログによる操作は、単一のハイパーリンクに対してのみ有効である。個別のハイパーリンクを持つ複数セルを選択しても[ハイパーリンクの編集]ダイアログが編集対象にするのはアクティブセル1つだけだ。現在のExcelでは、多数のハイパーリンクがあっても、1つ1つ解除していかねばならない。
マクロを使えばハイパーリンクが幾つあっても一瞬で解除できる
シート内に多数のハイパーリンクがあり、これを解除したいとき、マクロの利用を考慮すべきだろう。マクロを使えば、ハイパーリンクが10個でも、100個でも、たとえ1万個でも、一瞬で全てを解除できる。もちろん、マクロはよく分からないので触りたくないから、時間がかかっても1つ1つ手作業で解除するという選択もあるだろう。
人によって違いはあるものの、既に作られたマクロの導入だけなら作業は簡単にできる。このため、マクロの準備時間を含めても、おそらく、10〜20個のハイパーリンクを手作業で解除するよりも早く終わるはずだ。
ここで一歩踏み出せば、次からは、ハイパーリンクは幾つあっても簡単に解除できる。また、日常的な作業でも、Webブラウザから何も気にすることなく、リンクを含むコンテンツをコピーして、Excelにハイパーリンクとして貼り付け、これを後から、URLにでもリンクテキストにでも簡単に変換できるようになる。
マクロを使うには、Tech TIPS「Excel自動化への第一歩 マクロ(VBA)を使えるようにする」を参考にして、マクロを使うための準備をしていただきたい。取りあえず[開発]タブを表示させるだけよい。マクロを扱う基本的な方法は、この記事に解説してある。ここでは、この記事を前提に、ハイパーリンクを変換するマクロとその使い方を解説する。
今回、ハイパーリンクの自動処理のために作成したマクロは以下の4つである。
マクロの名前 | 内容 |
---|---|
ハイパーリンクをURLに変換 | 選択したセル範囲内のハイパーリンクをURLに変換 |
ハイパーリンクを名前に変換 | 選択したセル範囲内のハイパーリンクを表示文字列に変換 |
ハイパーリンク関数に変換 | 選択したセル範囲内のハイパーリンクをHyperLink関数に変換 |
ハイパーリンクを2つのセルに分解 | 選択したセル範囲内のハイパーリンクを表示文字列に変換し、右隣のセルにURLを書き込む |
作成したハイパーリンクを解除するマクロ |
もう1つ、オマケで、指定したセルのハイパーリンクからURLを取り出すワークシート関数も作成した。これは、既にあるハイパーリンクをそのままにして、URLだけを取り出す関数だ。
以上のマクロおよび関数のリストは、記事の最後に掲載してある。このリストは、上記の全てを含むものなので、必要に応じてこの中から必要なマクロや関数を取捨選択しても構わない。その場合でも以下の操作手順は同一である。
もし、マクロに慣れていない場合には、これから解説する作業を行う前に、ハイパーリンクを処理したいブックを1つだけを残し、他のブックは全て閉じておくことをおすすめする。マクロを編集するVisual Basic Editor(以下「VBE」)の左側のプロジェクトエクスプローラーには開いているブックが全て表示されてしまうため、対象ではないブックに誤ってマクロを作ってしまう可能性があるからだ。
さて、[開発]タブを表示させたら、VBEを開き、[挿入]メニューの[標準モジュール]を選択する。その後、ウィンドウ右側のコード領域に、本記事の最後にあるリストを貼り付ける。これでマクロの導入は完了である。
次に、Excelのシートで、処理したいハイパーリンクを持つセル範囲を選択し、[開発]タブの[マクロ]ボタンを押す。[マクロ]ダイアログが開くので、実行させたいマクロをリストで選択し、[実行]ボタンを押す。これで、多数のハイパーリンクを処理できる。
作成した4つのマクロの動作
どのマクロも、選択されたセル範囲を対象として動作する。「ハイパーリンクを名前に変換」と「ハイパーリンクをURLに変換」は、ハイパーリンクを解除して、表示文字列またはアドレス(URL)に変換する。このとき、ハイパーリンクに自動設定された「文字色」「下線」の書式を解除する。
「ハイパーリンクを2つのセルに分解」だけは、対象とするセル選択範囲が縦一列、かつ右側のセルが空白でないと動作しない。これは、ハイパーリンクを名前に変換し、右側のセルにURLを書き込むからだ。条件を満たさない場合には、選択範囲のハイパーリンクはそのまま残る。
マクロの実行例
今回作成したマクロは4つ。このうち、「ハイパーリンクを2つのセルに分解」は、ハイパーリンクを解除して右隣のセルにURLを書き込む。このため、セル範囲は縦1列で、かつ、その右側のセルが空白になっている必要がある。
「ハイパーリンク関数に変換」は、ハイパーリンクをHyperlink関数による数式に変換する。前述の「ハイパーリンクを2つのセルに分解」が隣のセルにURLを書き込むのに対して、このマクロは、編集可能な数式であるHyperlink関数に変換を行うため、ハイパーリンクの形を保ったまま、内容を数式バーで編集できるようになる。その後は、セルの文字列置換などを使って、名前だけ、URLだけにすることも可能だ。
また、このマクロを登録すると、「URL」というワークシート関数が利用できるようになる。これは、引数に単独のセル参照を指定すると、そのセル参照先にあるハイパーリンクのURLを取り出せる関数だ。ただし、この関数が動作するためには、マクロが存在している必要があるため、マクロ有効ブックでしか利用できない点に注意されたい。
また、マクロをテストするために多数のハイパーリンクを作ろうと、フィルハンドルでセルをコピーすると、2つ目から最後までのセル範囲に対して、単一のハイパーリンクが設定されてしまう(前述のようにハイパーリンクはセル単独だけでなくセル範囲に対しても設定できる)。こうしたセルに対して本記事のマクロを実行すると、そのセル範囲内の1つのセルだけが変換され、残りのセルにはハイパーリンクが残ったように見える。これは本記事のマクロの仕様なのでご注意いただきたい。
ブックやマクロを保存する
最後にマクロの保存だが、通常のxlsx形式のブックファイルには、マクロを含めることができない。このため、マクロを保存したければ、「マクロ有効ブック」(xlsm形式)でブックを保存するしかない。このあたりについては前述の記事「Excel自動化への第一歩 マクロ(VBA)を使えるようにする」に解説してある。
まずは、マクロを実行してハイパーリンクを処理した後に、対象のブックを通常の方法により、xlsx形式で保存する。このとき、マクロを保存できないという警告が出るが、ここでは無視して「マクロなしのブック」として保存するため、[はい]ボタンをクリックする。
次に、「名前を付けて保存」でマクロを含んだ、xlsm形式ブックを別の名前で保存する。ここでは仮に「HyperLink.xlsm」としておこう。このようにすれば、ハイパーリンクをマクロで処理したブックは、マクロなしの従来形式のまま保存され、マクロ自体はxlsm形式で別のブックファイルに保存される。次回以降にまた、同じマクロが必要になった場合には、対象のブックと今回作成したHyperLink.xlsmブックを同時に開くと、ハイパーリンクを同様に処理できる。
ブックを保存する(2)
通常形式で保存後、[名前を付けて保存]を使って、同じブックを「Excelマクロ有効ブック(xlsm形式)」かつ別名保存する。次回からは、このマクロ有効ブックと処理対象のブックを同時に開いて、マクロを利用すればよい。
最後に注意しておくが、マクロは必ず信頼できるサイトから入手したものを利用すること。悪意のあるコードなどが含まれたマクロが配布されている可能性があるからだ。サイトが信頼できないと思ったら、そこにあるマクロの利用は諦めた方がよい(そもそも、希望の機能が含まれているかどうかさえ怪しい)。マクロのリストが掲載されておらず、圧縮形式のファイルをダウンロードするようなものは、まず危険だと思って間違いない。まずは、中身が見えるリストをコピーしてVBEに貼り付けるような形での利用をお勧めする。
Function URL(myCell As Range) As String
' Function to retrieve a URL from a cell's hyperlink
' (C)2020 Shinji Shioda
If myCell.Hyperlinks.Count > 0 Then
URL = myCell.Hyperlinks(1).Address
End If
End Function
Sub ハイパーリンクをURLに変換()
' Convert All Selected Cells' Hyperlink to URL
' (C)2020 Shinji Shioda
If TypeName(Selection) <> "Range" Then
Exit Sub
End If
Dim URL As String
For Each c In Selection
If c.Hyperlinks.Count > 0 Then
URL = c.Hyperlinks(1).Address
c.ClearHyperlinks
c.Font.Underline = False
c.Font.ColorIndex = xlAutomatic
c.Value = URL
End If
Next
End Sub
Sub ハイパーリンクを2つのセルに分解()
' Convert All Selected Cells' Hyperlink to Name and URL.
' This subroutine writes the URL in the next cell to the right.
' (C)2020 Shinji Shioda
Dim URL As String, Name As String
If Selection.Columns.Count <> 1 Or TypeName(Selection) <> "Range" Then
Exit Sub
End If
For Each c In Selection
If IsEmpty(c.Offset(0, 1)) And c.Hyperlinks.Count > 0 Then
URL = c.Hyperlinks(1).Address
Name = c.Hyperlinks(1).TextToDisplay
c.ClearHyperlinks
c.Font.Underline = False
c.Font.ColorIndex = xlAutomatic
c.Value = Name
c.Offset(0, 1).Value = URL
End If
Next
End Sub
Sub ハイパーリンクを名前に変換()
' Convert All Selected Cells' Hyperlink to TextToDisplay
' (C)2020 Shinji Shioda
If TypeName(Selection) <> "Range" Then
Exit Sub
End If
Dim Name As String
For Each c In Selection
If c.Hyperlinks.Count > 0 Then
Name = c.Hyperlinks(1).TextToDisplay
c.ClearHyperlinks
c.Font.Underline = False
c.Font.ColorIndex = xlAutomatic
c.Value = Name
End If
Next
End Sub
Sub ハイパーリンク関数に変換()
' Convert All Selected Cells' Hyperlink to Hyperlink functions.
' (C)2020 Shinji Shioda
Dim URL As String, Name As String
If Selection.Columns.Count <> 1 Then
Exit Sub
End If
For Each c In Selection
If IsEmpty(c.Offset(0, 1)) And c.Hyperlinks.Count > 0 Then
URL = c.Hyperlinks(1).Address
Name = c.Hyperlinks(1).TextToDisplay
c.ClearHyperlinks
c.Font.Underline = False
c.Font.ColorIndex = xlAutomatic
c.Value = "=HYPERLINK(""" + URL + """,""" + Name + """)"
End If
Next
End Sub
Copyright© Digital Advantage Corp. All Rights Reserved.