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

46

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

es decir:

ubicación de la celda: A1

display text = "Información del sitio"

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

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

Idealmente se vería así:

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


fuente
1
Hipervínculos reales (Insertar >> Hipervínculo) o hipervínculos usando =HYPERLINK()?
¿Tiene que ser una fórmula? Hay muchas soluciones VBA.
CharlieRB

Respuestas:

53

Puedes usar una macro:

  • Abre un nuevo libro de trabajo.
  • Entrar en 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
  • Salga de VBA (presione Alt + Q)
  • Utilice esta sintaxis para esta función personalizada de Excel: = GetURL (celda, [valor_de_determinado])

     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
fuente
44
@igor ¿Por qué estás usando "rango (" a1 ") en cell.range (" A1 "). Hyperlinks.Count y cell.range (" A1 "). Hipervínculos (1). Dirección? He copiado tu macro pero lo saqué (-> cell.hyperlinks.count y cell.hyperlinks (1) .adress) y funciona perfectamente. Tengo curiosidad sobre el propósito del "rango (" a1 ") aquí.
PO
Esto supone tratar si hay múltiples enlaces dentro del hipervínculo. fue solo una idea, genial, funcionó con tus ajustes. :)
Igor O
Si el hipervínculo incluye un fragmento de documento (por ejemplo, #something), que se almacena en el SubAddress, por lo que necesitará para concatenar Address, "#"y SubAddress.
gilly3
Como el parámetro celles un objeto de rango, puede contener más de una celda. Range("A1")podría reescribirse como Cells(1). Le indica a la función que solo considere la primera celda del parámetro cell.
ChrisB
19

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

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

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

En este caso, puede colocarlo donde desee. Si desea, por ejemplo, que la URL de un hipervínculo en A1 aparezca en la celda C25, entonces en la celda C25 debe ingresar la siguiente fórmula:

= GetURL (A1)

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

Matthew Lock
fuente
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
fuente
En otros que dejan de lado las comillas pasan en la referencia de celda al usar esto en la hoja de cálculo = EXTRACT_URL (ADDRESS (fila (A4), 1,4)). De lo contrario, debe codificar la referencia de rango. Luego puede copiar esta función de una celda a otra.
Walker Rowe