Excelの数式を使用して、セル内のハイパーリンクのリンク位置を抽出できますか?


46

ハイパーリンクの場所とは異なる表示テキストを持つハイパーリンクを含む多数のセルを含むスプレッドシートがあります

すなわち:

セルの場所:A1

表示テキスト=「サイト情報」

ハイパーリンクの場所= " http://www.mylocation.com "

ハイパーリンクの場所のテキスト文字列にアクセスできるExcelの数式はありますか?

理想的には次のようになります。

FORMULA(A1)= " http://www.mylocation.com "


1
実際のハイパーリンク(挿入>>ハイパーリンク)または=HYPERLINK()?を使用したハイパーリンク

数式にする必要がありますか?多くのVBAソリューションがあります。
チャーリーRB

回答:


53

マクロを使用できます:

  • 新しいワークブックを開きます。
  • 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
    

4
@igor cell.range( "A1")。Hyperlinks.Countおよびcell.range( "A1")。Hyperlinks(1).Addressで "range(" a1 ")を使用しているのはなぜですか?マクロをコピーしましたが、 (-> cell.hyperlinks.countとcell.hyperlinks(1).adress)を取り出して完全に動作します。ここで "range(" a1 ")の目的に興味があります。
PO

これは、ハイパーリンク内に複数のリンクがある場合に処理することを想定しています。それは単なるアイデアであり、あなたの調整でうまくいきました。:)
イゴールO

あなたのハイパーリンクは、文書の断片(例えば、含まれている場合#somethingに保存されている)、SubAddressので、あなたは、連結する必要があるでしょうAddress"#"SubAddress
-gilly3

パラメータcellは範囲オブジェクトであるため、複数のセルを含めることができます。 Range("A1")として書き換えることができますCells(1)。parameterの最初のセルのみを考慮するように関数に指示しますcell
ChrisB

19

単一のセルの値からアドレスを抽出するだけでよいので、この小さな関数が便利だとわかりました。

「ブルートフォース」マクロの代わりに、それがポイントされたハイパーリンクの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
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");
  }

}

それ以外の場合は、スプレッドシート= EXTRACT_URL(ADDRESS(row(A4)、1,4))でこれを使用して、引用符をセル参照に渡します。それ以外の場合は、範囲参照をハードコーディングする必要があります。次に、この関数をあるセルから別のセルにコピーできます。
ウォーカーロウ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.