Posso usare una formula di Excel per estrarre la posizione del collegamento di un collegamento ipertestuale in una cella?


46

Ho un foglio di calcolo con un gran numero di celle contenenti collegamenti ipertestuali con testo di visualizzazione diverso dalla posizione del collegamento ipertestuale

vale a dire:

posizione della cella: A1

display text = "Informazioni sul sito"

hyperlink location = " http://www.mylocation.com "

Esiste una formula Excel che mi consente di accedere alla stringa di testo della posizione del collegamento ipertestuale?

Idealmente sarebbe simile a questo:

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


1
Collegamenti ipertestuali effettivi (Inserisci >> Collegamento ipertestuale) o collegamenti ipertestuali utilizzando =HYPERLINK()?

Deve essere una formula? Esistono molte soluzioni VBA.
CharlieRB

Risposte:


53

Puoi usare una macro:

  • Apri una nuova cartella di lavoro.
  • Entra in VBA (premi Alt + F11)
  • Inserisci un nuovo modulo (Inserisci> Modulo)
  • Copia e incolla la funzione definita dall'utente di Excel di seguito
  • Esci da VBA (premi Alt + Q)
  • Utilizzare questa sintassi per questa funzione personalizzata di Excel: = GetURL (cella, [valore predefinito])

     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 Perché stai usando "range (" a1 ") in cell.range (" A1 "). Hyperlinks.Count e cell.range (" A1 "). Hyperlink (1) .Address? Ho copiato la tua macro ma l'ha rimosso (-> cell.hyperlinks.count e cell.hyperlinks (1) .adress) e funziona perfettamente. Sono curioso di sapere lo scopo della "gamma (" a1 ") qui.
PO

Questo supponiamo di trattare se ci sono più collegamenti all'interno del collegamento ipertestuale. era solo un'idea, fantastico ha funzionato con le tue regolazioni. :)
Igor O

Se il collegamento ipertestuale include un frammento di documento (ad esempio, #something), che viene memorizzato nella SubAddress, quindi sarà necessario per concatenare Address, "#"e SubAddress.
gilly3,

Poiché il parametro cellè un oggetto intervallo, può contenere più di una cella. Range("A1")potrebbe essere riscritto come Cells(1). Indica alla funzione di considerare solo la prima cella nel parametro cell.
ChrisB,

19

Avevo solo bisogno di estrarre l'indirizzo dal valore di una singola cella, quindi ho trovato utile questa piccola funzione:

Invece di una macro "forza bruta", è anche possibile creare una funzione definita dall'utente che estrarre e restituire l'URL per qualsiasi collegamento ipertestuale a cui è stato puntato:

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

In questo caso puoi posizionarlo dove vuoi. Se si desidera, ad esempio, l'URL di un collegamento ipertestuale in A1 sia elencato nella cella C25, quindi nella cella C25 inserire la seguente formula:

= 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");
  }

}

In altri che tralasciano le virgolette passano nel riferimento di cella usando questo nel foglio di calcolo = EXTRACT_URL (INDIRIZZO (riga (A4), 1,4)). In caso contrario, è necessario codificare il riferimento di intervallo. Quindi è possibile copiare questa funzione da una cella all'altra.
Walker Rowe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.