Puis-je utiliser une formule Excel pour extraire l'emplacement du lien d'un lien hypertexte dans une cellule?


46

J'ai un tableur avec un grand nombre de cellules contenant des hyperliens dont le texte d'affichage est différent de l'emplacement de l'hyperlien

c'est à dire:

emplacement de la cellule: A1

display text = "Informations sur le site"

lien hypertexte location = " http://www.mylocation.com "

Existe-t-il une formule Excel qui me permet d’accéder à la chaîne de texte de l’emplacement du lien hypertexte?

Idéalement, cela ressemblerait à ceci:

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


1
Liens hypertextes réels (Insérer >> Lien hypertexte) ou liens hypertextes utilisant =HYPERLINK()?

Est-ce que cela doit être une formule? Il existe de nombreuses solutions VBA.
CharlieRB

Réponses:


53

Vous pouvez utiliser une macro:

  • Ouvrez un nouveau classeur.
  • Entrez dans VBA (Appuyez sur Alt + F11)
  • Insérer un nouveau module (Insertion> Module)
  • Copier et coller la fonction définie par l'utilisateur Excel ci-dessous
  • Sortez de VBA (Appuyez sur Alt + Q)
  • Utilisez cette syntaxe pour cette fonction Excel personnalisée: = 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
    

4
Pourquoi utilisez-vous "range (" a1 ") dans cell.range (" A1 "). Hyperlinks.Count et cell.range (" A1 "). Hyperliens (1) .Address? J'ai copié votre macro mais l'a sorti (-> cell.hyperlinks.count et cell.hyperlinks (1) .adress) et cela fonctionne parfaitement. Je suis curieux de savoir le but de la "plage (" a1 ") ici.
PO

Cela suppose de traiter s’il existe plusieurs liens dans le lien hypertexte. c'était juste une idée, super ça a fonctionné avec vos ajustements. :)
Igor O

Si votre lien hypertexte comprend un fragment de document (par exemple #something), qui est stocké dans le SubAddress, vous aurez donc besoin de concaténer Address, "#"et SubAddress.
gilly3

Comme paramètre cellest un objet de plage, il peut contenir plusieurs cellules. Range("A1")pourrait être réécrit comme Cells(1). Il indique à la fonction de ne considérer que la première cellule en paramètre cell.
ChrisB

19

Je n'avais besoin que d'extraire l'adresse d'une seule cellule, alors j'ai trouvé cette petite fonction pratique:

Au lieu d'une macro "force brute", vous pouvez également créer une fonction définie par l'utilisateur qui extrairait et renverrait l'URL de tout lien hypertexte sur lequel il était pointé:

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

Dans ce cas, vous pouvez le placer où vous voulez. Si vous souhaitez, par exemple, que l'URL d'un lien hypertexte dans A1 soit répertoriée dans la cellule C25, vous devez entrer la formule suivante dans la cellule C25:

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

}

En d'autres termes, les guillemets passent dans la référence de cellule en utilisant ceci dans la feuille de calcul = EXTRACT_URL (ADDRESS (ligne (A4), 1,4)). Sinon, vous devez coder en dur la référence de plage. Ensuite, vous pouvez copier cette fonction d’une cellule à l’autre.
Walker Rowe le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.