
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 .Hyperlink
objeto en realidad divide la dirección en .Address
y .SubAddress
si 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
, .SubAddress
por 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).