Czy mogę użyć formuły programu Excel do wyodrębnienia lokalizacji łącza hiperłącza w komórce?

46

Mam arkusz kalkulacyjny z dużą liczbą komórek zawierających hiperłącza z wyświetlanym tekstem innym niż lokalizacja hiperłącza

to znaczy:

lokalizacja komórki: A1

display text = „Informacje o stronie”

lokalizacja hiperłącza = „ http://www.mylocation.com

Czy istnieje formuła programu Excel, która pozwala mi uzyskać dostęp do ciągu tekstowego lokalizacji hiperłącza?

Idealnie wyglądałoby to tak:

FORMUŁA (A1) = „ http://www.mylocation.com


źródło
1
Rzeczywiste hiperłącza (Wstaw >> Hiperłącze) lub hiperłącza za pomocą =HYPERLINK()?
Czy to musi być formuła? Istnieje wiele rozwiązań VBA.
CharlieRB,

Odpowiedzi:

53

Możesz użyć makra:

  • Otwórz nowy skoroszyt.
  • Wejdź do VBA (naciśnij Alt + F11)
  • Wstaw nowy moduł (Wstaw> Moduł)
  • Skopiuj i wklej poniżej zdefiniowaną przez użytkownika funkcję Excela
  • Wyjdź z VBA (naciśnij Alt + Q)
  • Użyj tej składni dla tej niestandardowej funkcji programu Excel: = GetURL (komórka, [wartość domyślna])

     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
    
Igor O
źródło
4
@igor Dlaczego używasz „zasięgu („ a1 ”) w cell.range („ A1 ”). Hiperłącza. Konto i cell.range („ A1 ”). Hiperłącza (1). Adres? Skopiowałem twoje makro, ale wyjąłem go (-> cell.hyperlinks.count i cell.hyperlinks (1) .adress) i działa doskonale. Ciekawi mnie cel „zasięgu (” a1 ”) tutaj.
PO
To powinno leczyć, jeśli w hiperłączu znajduje się wiele łączy. to był tylko pomysł, świetnie działało z twoimi dostosowaniami. :)
Igor O
Jeśli hiperłącze zawiera fragment dokumentu (na przykład #something), które są przechowywane w SubAddress, więc trzeba będzie do łączenia Address, "#"i SubAddress.
gilly3
Ponieważ parametr celljest obiektem zakresu, może zawierać więcej niż jedną komórkę. Range("A1")można przepisać jako Cells(1). Nakazuje funkcji uwzględnienie tylko pierwszej komórki w parametrze cell.
ChrisB
19

Musiałem tylko wyodrębnić adres z wartości pojedynczej komórki, więc uznałem tę małą funkcję za przydatną:

Zamiast makra „brute force” można również utworzyć funkcję zdefiniowaną przez użytkownika, która wyodrębni i zwróci adres URL dowolnego hiperłącza, na który został skierowany:

Function GetURL(rng As Range) As String
     On Error Resume Next
     GetURL = rng.Hyperlinks(1).Address 
End Function

W takim przypadku możesz umieścić go w dowolnym miejscu. Jeśli na przykład chcesz, aby adres URL hiperłącza w A1 był wyświetlany w komórce C25, to w komórce C25 wpisz następującą formułę:

= GetURL (A1)

http://excel.tips.net/T003281_Extracting_URLs_from_Hyperlinks.html

Matthew Lock
źródło
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");
  }

}
Isaac Tanner-Dempsey
źródło
W innych, które pomijają, cudzysłowy przechodzą w odwołaniu do komórki, używając tego w arkuszu kalkulacyjnym = EXTRACT_URL (ADRES (wiersz (A4), 1,4)). W przeciwnym razie musisz zakodować odniesienie zakresu. Następnie możesz skopiować tę funkcję z jednej komórki do drugiej.
Walker Rowe