Posso usar uma fórmula do Excel para extrair o local do link de um hiperlink em uma célula?

46

Eu tenho uma planilha com um grande número de células contendo hiperlinks com texto de exibição diferente do local do hiperlink

ou seja:

localização da célula: A1

display text = "Informações do site"

localização do hiperlink = " http://www.mylocation.com "

Existe uma fórmula do Excel que permita acessar a sequência de texto do local do hiperlink?

Idealmente, seria assim:

FÓRMULA (A1) = " http://www.mylocation.com "


fonte
1
Hiperlinks reais (Inserir >> Hiperlink) ou hiperlinks usando =HYPERLINK()?
Tem que ser uma fórmula? Existem muitas soluções VBA.
CharlieRB

Respostas:

53

Você pode usar uma macro:

  • Abra uma nova pasta de trabalho.
  • Entre no VBA (pressione Alt + F11)
  • Inserir um novo módulo (Inserir> Módulo)
  • Copie e cole a função definida pelo usuário do Excel abaixo
  • Saia do VBA (pressione Alt + Q)
  • Use esta sintaxe para esta função personalizada do Excel: = GetURL (célula, [valor_ padrão])

     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
fonte
4
@igor Por que você está usando "range (" a1 ") em cell.range (" A1 "). Hyperlinks.Count e cell.range (" A1 "). Hyperlinks (1) .Address? Copiei sua macro, mas tirei (-> cell.hyperlinks.count e cell.hyperlinks (1) .adress) e funciona perfeitamente. Estou curioso sobre o objetivo do "intervalo (" a1 ") aqui.
PO
Isso deve tratar se há vários links dentro do hiperlink. foi apenas uma ideia, ótimo, funcionou com seus ajustes. :)
Igor O
Se o seu hyperlink inclui um fragmento do documento (por exemplo, #something), que é armazenado no SubAddress, então você vai precisar para concatenar Address, "#"e SubAddress.
gilly3
Como parâmetro cellé um objeto de intervalo, ele pode conter mais de uma célula. Range("A1")pode ser reescrito como Cells(1). Ele instrui a função a considerar apenas a primeira célula no parâmetro cell.
ChrisB
19

Eu só precisava extrair o endereço do valor de uma única célula, então achei esta pequena função útil:

Em vez de uma macro "força bruta", você também pode criar uma função definida pelo usuário que extraia e retornaria a URL para qualquer hiperlink para o qual estava apontada:

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

Nesse caso, você pode colocá-lo onde quiser. Se você deseja, por exemplo, que o URL de um hiperlink em A1 seja listado na célula C25, na célula C25, digite a seguinte fórmula:

= GetURL (A1)

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

Matthew Lock
fonte
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
fonte
Em outros casos, as aspas passam na referência da célula, usando-a na planilha = EXTRACT_URL (ADDRESS (linha (A4), 1,4)). Caso contrário, você precisará codificar a referência do intervalo. Então você pode copiar esta função de uma célula para outra.
Walker Rowe