¿Puedo usar una fórmula de Excel para extraer la ubicación del enlace de un hipervínculo en una celda?

¿Puedo usar una fórmula de Excel para extraer la ubicación del enlace de un hipervínculo en una celda?

Tengo una hoja de cálculo con una gran cantidad de celdas que contienen hipervínculos con texto para mostrar diferente a la ubicación del hipervínculo.

es decir:

ubicación de la celda: A1

texto para mostrar = "Información del sitio"

ubicación del hipervínculo = "http://www.miubicación.com"

¿Existe una fórmula de Excel que me permita acceder a la cadena de texto de la ubicación del hipervínculo?

Lo ideal sería que se viera así:

FÓRMULA(A1) = "http://www.miubicación.com"

Respuesta1

Solo necesitaba extraer la dirección del valor de una sola celda, así que encontré útil esta pequeña función:

En lugar de una macro de "fuerza bruta", también podría crear una función definida por el usuario que extraiga y devuelva la URL de cualquier hipervínculo al que apunte:

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

En este caso puedes colocarlo donde quieras. Si desea, por ejemplo, que la URL de un hipervínculo en A1 aparezca en la celda C25, en la celda C25 deberá ingresar la siguiente fórmula:

=ObtenerURL(A1)

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

Respuesta2

Puedes usar una macro:

  • Abra un nuevo libro de trabajo.
  • Ingrese a VBA (presione Alt+F11)
  • Insertar un nuevo módulo (Insertar > Módulo)
  • Copie y pegue la función definida por el usuario de Excel a continuación
  • Salir de VBA (Presione Alt+Q)
  • Utilice esta sintaxis para esta función personalizada de 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
    

Respuesta3

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

}

Respuesta4

Tuve el mismo problema que @SAL

Descubrí que el .Hyperlinkobjeto en realidad divide la dirección en .Addressy .SubAddresssi encuentra un delimitador. "#" es uno de esos delimitadores (no sé si hay otros).

Vea el comentario anterior de @gilly3 y esta otra pregunta de StackOverflow: hyperlinks(1).address solo devuelve una dirección parcial

También la documentación (incompleta) de Microsoft sobre .SubAddress: Propiedad Hyperlink.SubAddress

Una cosa que no se menciona en ninguna parte es que el delimitador "#" no está incluido en ninguno de los dos .Address, .SubAddresspor lo que si desea una dirección que realmente funcione como una URL completa, debe volver a agregar el delimitador "#".

Con eso, modifiqué el código de @Matthew Lock de la siguiente manera, incluyendo también la posibilidad de almacenar múltiples hipervínculos desde @Igor O y mi adición de "#":

 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

Esto debería devolver una cadena de texto de todos los hipervínculos completos (agregué un espacio al final para que, si hay más de uno, estén separados).

información relacionada