Можно ли использовать формулу Excel для извлечения местоположения гиперссылки в ячейке?
У меня есть электронная таблица с большим количеством ячеек, содержащих гиперссылки с отображаемым текстом, отличным от местоположения гиперссылки
то есть:
расположение ячейки: A1
отображать текст = "Информация о сайте"
гиперссылка location = " http://www.mylocation.com/"
Есть ли формула Excel, которая позволяет мне получить доступ к текстовой строке местоположения гиперссылки?
В идеале это будет выглядеть так:
FORMULA (A1) = " http://www.mylocation.com/"
5 ответов
Вы можете использовать макрос:
- Откройте новую рабочую книгу.
- Получить в VBA (нажмите Alt+F11)
- Вставьте новый модуль (Вставка> Модуль)
- Скопируйте и вставьте пользовательскую функцию Excel ниже
- Выйти из VBA (Нажмите Alt+Q)
Используйте этот синтаксис для этой пользовательской функции Excel: =GetURL(ячейка,[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
Мне нужно было только извлечь адрес из значения одной ячейки, поэтому я нашел эту небольшую функцию удобной:
Вместо макроса "грубой силы" вы также можете создать пользовательскую функцию, которая будет извлекать и возвращать URL-адрес для любой гиперссылки, на которую она была указана:
Function GetURL(rng As Range) As String
On Error Resume Next
GetURL = rng.Hyperlinks(1).Address
End Function
В этом случае вы можете разместить его там, где хотите. Например, если вы хотите, чтобы в ячейке C25 был указан URL-адрес гиперссылки в A1, введите в ячейку C25 следующую формулу:
= GetURL (А1)
http://excel.tips.net/T003281_Extracting_URLs_from_Hyperlinks.html
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");
}
}
- Откройте новую книгу.
- Войдите в VBA (нажмите Alt+F11)
- Вставьте новый модуль (Вставить> Модуль)
- Скопируйте и вставьте пользовательскую функцию Excel ниже
- Нажмите F5 и нажмите "Выполнить". Выйдите из VBA (нажмите Alt+Q).
Sub ExtractHL() Dim HL As Hyperlink For Each HL In ActiveSheet.Hyperlinks HL.Range.Offset(0, 1).Value = HL.Address Next End Sub
У меня была та же проблема, что и у @SAL
Я обнаружил, что.Hyperlink
объект фактически разбивает адрес на и, если он встречает разделитель. «#» — один из таких разделителей (я не знаю, есть ли другие).
См. комментарий @gilly3 выше и другой вопрос StackOverflow:Hyperlinks(1).address возвращает только частичный адрес.
Также (неполная) документация Microsoft по .SubAddress:свойство Hyperlink.SubAddress.
Нигде не упоминается одна вещь: разделитель «#» не включен ни в один из них..Address
или.SubAddress
поэтому, если вам нужен адрес, который действительно будет работать как полный URL-адрес, вам нужно снова добавить разделитель «#».
При этом я изменил код @Matthew Lock следующим образом, включая возможность сохранения нескольких гиперссылок из @Igor O и добавление «#»:
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
Это должно вернуть текстовую строку всех гиперссылок полностью (я добавил пробел в конце, поэтому, если их больше одной, они разделяются).