Этот UDF будет определять, содержит ли ячейка или диапазон объекты гиперссылки, и может затем использоваться с условным форматированием:
Public Function IsHyperlink(ByVal Target As Range)
Application.Volatile
'Quick Win - look for Hyperlink Object
IsHyperlink = (Target.Hyperlinks.Count > 0)
'Check if Excel can convert Target to a Hyperlink
'Important because the worksheet recalculates BEFORE that happens
If Not IsHyperlink Then
IsHyperlink = (Application.WorksheetFunction.CountIf(Target, "www.*") + Application.WorksheetFunction.CountIf(Target, "ftp://*") _
+ Application.WorksheetFunction.CountIf(Target, "http://*") + Application.WorksheetFunction.CountIf(Target, "https://*")) > 0
End If
'Check for HYPERLINK() formula
If (Target.HasFormula Or IsNull(Target.HasFormula)) And Not IsHyperlink Then
Dim rCell As Range, sFormula As String, aFormula() As String, lStart As Long, lEnd As Long
For Each rCell In Target.Cells
If rCell.HasFormula Then
sFormula = rCell.Formula
'Remove any text
While Len(sFormula) > Len(Replace(sFormula, Chr(34), "")) + 1
lStart = InStr(sFormula, Chr(34))
lEnd = InStr(lStart + 1, sFormula, Chr(34))
sFormula = Left(sFormula, lStart - 1) & Mid(sFormula, lEnd + 1)
Wend
'Replace "+", "-", "*", "/", "%"
sFormula = Replace(Replace(Replace(Replace(Replace(sFormula, "+", ","), "-", ","), "*", ","), "/", ","), "%", ",")
'Replace "=", "(", ")", " "
sFormula = Replace(Replace(Replace(Replace(sFormula, "=", ","), "(", ","), ")", ","), " ", ",")
'Search for "HYPERLINK"
If InStr(UCase(sFormula & ","), ",HYPERLINK,") Then
IsHyperlink = True
Exit For
End If
End If
Next rCell
End If
End Function
В настоящее время он не обнаруживает гиперссылки, встроенные через HYPERLINK
формула (например, =HYPERLINK("https://stackoverflow.com/", "Visit Stack Overflow!")
) Теперь это происходит!
NB Из-за порядка событий Excel будет пересчитывать UDF до того, как преобразует любые URL-адреса, введенные в ячейки.в гиперссылки.Таким образом, я включил в него строку, в которой также будут найдены ячейки, которые Excel может преобразовать - в противном случае для получения результата вам потребуется дополнительный расчет