Excel hides the destination URL behind every hyperlink it shows on a sheet. What appears in the cell is the friendly display text — "Q4 Sales Plan", "Read the full report", "Click here for details" — not the actual web address the link points to. To extract a link from a hyperlink in Excel you therefore have to look past the rendered text and recover the underlying target, whether that target is stored as a hyperlink record, a HYPERLINK() formula, or as raw HTML markup pasted into a cell from a webpage, an email or an exported report. This matters whenever you need a clean inventory of destinations for a crawl, a rel-canonical review, a redirect check or a bulk edit across dozens of rows. The most reliable workflow pairs a quick review of Excel's native options with a browser-side HTML parser, because some link-bearing markup never gets a friendly display name at all: image-map <area> elements, stylesheet and canonical <link> tags, and alternate resources all carry href values that Excel drops the moment a file is opened. Once you know where the URLs actually live, the extraction itself becomes a short, repeatable job.

how to extract link from hyperlink in excel
how to extract link from hyperlink in excel

Why Excel Hides the URL by Default

When you click a hyperlink in an Excel workbook, Excel opens the target that the hyperlink record stores — but it almost never shows that target on the sheet. The cell displays the friendly text you typed, or the rich-text content you pasted, while the destination lives in a hidden property of the cell. Right-clicking and choosing Edit Hyperlink reveals the target, but only one cell at a time, and only for the rows you happen to open. Hyperlinks added through HYPERLINK() formulas are slightly more transparent because the formula bar shows the address argument, yet the formula only renders when Excel evaluates it, and pasting formulas across thousands of rows still requires manual effort.

A second complication arrives when the URL lives inside HTML markup. Many users paste content from web pages, marketing emails or CMS exports straight into a column. Excel preserves the rich content, but the underlying HTML — with its href attributes on anchors, area elements and link tags — sits behind the rendered display. Even if you paste as plain text, you may end up with markup like <a href="/pricing">View pricing</a> sitting in a cell, and the actual path is buried in the source. Some href-bearing tags never reach Excel at all: a stylesheet link in the page head, a canonical declaration, or an image-map area element will not produce a clickable hyperlink in the sheet, yet those targets still belong in any honest URL inventory.

Excel's Native Options and Where They Fall Short

Excel offers four practical routes for surfacing hyperlink targets, each with a clear ceiling.

The right-click menu works one cell at a time. Choose Edit Hyperlink and the dialog box shows the full address. For ten rows it is tolerable; for ten thousand it is not. There is no batch version of this dialog, and there is no built-in way to dump every hidden target into an adjacent column.

Pasting as plain text sometimes helps. If you copy a block of HTML from a browser or email and use Paste Special → Text, the markup ends up in the cell. From there you can search for href occurrences, but doing it with FIND and MID formulas is fragile: every HTML variant needs a slightly different pattern, and anything unquoted or containing HTML entities breaks the formula. Numerically encoded ampersands inside query strings are a particularly common failure point.

A HYPERLINK() formula approach rebuilds a column of clickable links from a list of addresses, but it does the opposite of what you want — it produces display text from URLs rather than the other way around. You still need the URL list to start with, so this route only becomes useful once the extraction step has already been solved.

A VBA user-defined function can iterate over every hyperlink in a sheet and write the addresses to a helper column. It works, but it requires macros to be enabled, it ships with no undo safety net, and it cannot reach HTML markup stored as cell text. For files shared with collaborators on locked-down machines, it is rarely a workable option.

The fastest path when the URLs are buried inside HTML markup is a dedicated source parser. Instead of fighting Excel formula patterns or scripting through every cell, you take the HTML block — whether it came from a single cell, a column of cells, or an exported HTML file — and feed it to a tool whose job is exactly this. The Link Extractor was built for that role. It scans the start tags of <a>, <area> and <link> elements, pulls out the href values, decodes a small set of HTML entities and returns one clean URL per line.

Two properties matter here. First, the parser does not silently invent a host. Relative paths stay relative unless you give it a base URL, and absolute paths are normalized directly. Second, the tool does not request the listed destinations. Your list is produced entirely from the source you paste, which is the right behaviour for a workflow where you only want an inventory to feed into a later, authorized crawl.

The workflow below turns HTML markup into a deduplicated URL inventory in three short steps. Use it when a column in your workbook contains pasted HTML, or when you have saved the page source of a report and need the targets it carries.

  1. Copy the HTML source that contains the hyperlinks. From Excel, select the column of cells with the markup, copy them, and paste into a plain-text editor to strip rich formatting. If the source is in a saved .html or .htm file, open it in a text editor instead. Make sure the snippet covers every block you need, including any <link rel="canonical"> and <link rel="alternate"> tags, because those carry href values too.
  2. Paste the snippet into the Link Extractor and add a base URL when needed. If the markup uses paths like /pricing, ../guide or //cdn.example.com/style.css, supply the absolute page URL where the markup would live — for example https://example.com/products/page — so relative paths resolve into absolute addresses. Leave the base field empty if the source already contains full URLs or if you want relative paths to remain relative.
  3. Extract, then review the counts and the resulting list. The tool reports unique, duplicate and skipped numbers together with one target per line. Copy the list back into Excel using Paste Special → Text, or feed it to an authorized crawler for status, redirect and rel review.

Input is capped at 200,000 characters per paste, which keeps the interactive scan bounded. If your workbook holds several hundred thousand characters of HTML, split the source into reasonable blocks before parsing. Base URLs must use HTTP or HTTPS and cannot contain credentials, which prevents a misleading resolution context and keeps user information out of every resolved result.

What Gets Filtered, What Stays, and What the Counts Mean

The Link Extractor deliberately leaves several classes of value out of the output, and the count panel tells you when it does. Understanding the filters prevents the surprise of a short list when the source looks long.

Empty href values, same-document fragments such as #section, and executable or embedded-data schemes (javascript:, data:, vbscript:) are skipped. So are invalid absolute URLs that the parser cannot normalize. The skipped counter tells you how many targets fell into these buckets, which is useful when you are trying to audit a page and want to know whether the markup contained any executable handlers.

Mail and telephone targets are retained because they are legitimate destinations — mailto: links and tel: numbers show up in <a> tags on real pages, and there is no reason to strip them from an inventory. Comments and raw-text containers (script, style, textarea, title, iframe, noembed, noframes) are removed before the scan, which prevents JavaScript strings that merely look like anchor markup from being read as real links.

Duplicates are removed after normalization. Two identical relative links that resolve to the same absolute URL become one entry, and first-seen order is preserved so the output can be compared with the original source order. Deduplication is exact after normalization: URLs that differ only by tracking parameters, case-sensitive paths or redirect behaviour are still treated as separate items.

Different routes suit different jobs. The table below compares the Excel-native options with the Link Extractor so you can pick the right one for the data you actually have.

RouteBest forLimits
Right-click → Edit HyperlinkInspecting a single target in an existing workbookOne cell at a time; no bulk export
Paste Special → Text + formula scanSmall HTML snippets in a cellBreaks on unquoted attributes, entities and edge cases
VBA user-defined functionLarge workbooks where macros are allowedRequires macro trust; cannot reach HTML-as-text cells
Link Extractor on HTML sourceMarkup blocks with mixed link typesParses source, not live sheets; needs base URL for relative paths

For workbooks where every link is a normal Excel hyperlink record, the right-click or VBA approach is fine. For markup blocks — the kind that arrive when you paste from a webpage or export a report to HTML — a source parser like the Link Extractor covers more ground, including canonical and alternate <link> tags that Excel does not surface at all. Use the output as an inventory, not a health report: a listed target may redirect, return an error, require authentication, be blocked by robots controls or intentionally point off-site. Crawl the URLs with an authorized tool when those facts matter.