
ハイパーリンクの場所とは異なる表示テキストを持つハイパーリンクを含むセルが多数あるスプレッドシートがあります
例:
セル位置: A1
表示テキスト = "サイト情報"
ハイパーリンクの場所 = "http://www.mylocation.com「
ハイパーリンクの場所のテキスト文字列にアクセスできる Excel 数式はありますか?
理想的には次のようになります。
式(A1) = "http://www.mylocation.com「
答え1
単一のセルの値からアドレスを抽出するだけが必要だったので、この小さな関数が便利だとわかりました。
「ブルート フォース」マクロの代わりに、指定されたハイパーリンクの URL を抽出して返すユーザー定義関数を作成することもできます。
Function GetURL(rng As Range) As String
On Error Resume Next
GetURL = rng.Hyperlinks(1).Address
End Function
この場合、任意の場所に配置できます。たとえば、A1 のハイパーリンクの URL をセル C25 に表示したい場合は、セル C25 に次の数式を入力します。
=GetURL(A1)
http://excel.tips.net/T003281_Extracting_URLs_from_Hyperlinks.html
答え2
マクロを使用できます:
- 新しいワークブックを開きます。
- VBAを起動する(Alt+F11を押す)
- 新しいモジュールを挿入します(挿入 > モジュール)
- 以下のExcelユーザー定義関数をコピーして貼り付けます。
- VBA を終了する (Alt+Q を押す)
このカスタム Excel 関数には次の構文を使用します: =GetURL(cell,[default_value])
Function GetURL(cell As range, Optional default_value As Variant) 'Lists the Hyperlink Address for a Given Cell 'If cell does not contain a hyperlink, return default_value If (cell.range("A1").Hyperlinks.Count <> 1) Then GetURL = default_value Else GetURL = cell.range("A1").Hyperlinks(1).Address End If End Function
答え3
function EXTRACT_URL(input) {
var range = SpreadsheetApp.getActiveSheet().getRange(input);
var re = /^.+?\(\"(.+?)\",.+?$/;
if (input.indexOf(':') != -1) {
var formulas = range.getFormulas();
for (var i in formulas) {
for (var j in formulas[i]) {
formulas[i][j] = formulas[i][j].replace(re, "$1");
}
}
return formulas;
} else {
return range.getFormula().replace(re, "$1");
}
}
答え4
@SALと同じ問題がありました
オブジェクトは、区切り文字に遭遇すると、.Hyperlink
実際にアドレスを分割することがわかりました。「#」はそのような区切り文字の 1 つです (他にもあるかどうかはわかりません)。.Address
.SubAddress
上記の @gilly3 のコメントと、この他の StackOverflow の質問を参照してください。 hyperlinks(1).address は部分的なアドレスのみを返す
また、Microsoft の (不完全な) .SubAddress に関するドキュメント: Hyperlink.SubAddress プロパティ
どこにも言及されていないことの 1 つは、どちらにも「#」区切り文字が含まれていないことです。その.Address
ため.SubAddress
、完全な URL として機能するアドレスが必要な場合は、「#」区切り文字を再度追加する必要があります。
そこで、私は @Matthew Lock のコードを次のように変更し、@Igor O からの複数のハイパーリンクが保存される可能性と、私が追加した「#」も含めました。
Function getURL(rng As Range) As String
On Error Resume Next
fullURL = ""
For Each HL In rng.Hyperlinks
If Len(HL.SubAddress) > 0 Then
fullURL = fullURL & HL.Address & "#" & HL.SubAddress & " "
Else
fullURL = fullURL & HL.Address & " "
End If
Next
getURL = fullURL
End Function
これにより、すべてのハイパーリンクの完全なテキスト文字列が返されます (最後にスペースを追加したので、複数のハイパーリンクがある場合は区切られます)。