Андрей VG ,добрый вечер,прочитайте вышеуказанную страницу 282 ,-я частично процитировал автора,для привлечения внимания интересующихся к исключению,нетипичному поведению функции,которая скорее напоминает подпрограмму.
звездочка яркая,если Вы интересуетесь примечаниями,почитайте с.282 "Microsoft Excel 2013.Профессиональное программирование на VBA,2014 ,изд. Диалектика,-пример автора, Джона Уокенбаха-нетипичный случай в VBA использования функции,(ошибка в VBA или преднамеренность)- когда в функции нет конструкции типа ModifyComent=
Код
Function ModifyComent(cell As Range,Cmt$)
cell.Coment.Text cmt
End Function
Function aa&(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "(\d+)\+(\d+)": aa = .Replace(t, "$1$2")
End With
End Function
Function bb&(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\+": bb = .Replace(t, "")
End With
End Function
Function bb(t$, Optional i& = 0)
With CreateObject("VBScript.RegExp"): .Pattern = "[^/]+": .Global = True
If InStrRev(t, "/") Then bb = Trim(.Execute(t)(i)) Else bb = t
End With
End Function
Function cc$(t$)
cc = "(" & Split(StrReverse(Split(StrReverse(t), "/", 2)(0)), "-")(0) & ")"
End Function
Код
Function aa$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "[^/]+": .Global = True
aa = .Execute(t)(.Execute(t).Count - 1): .Pattern = "[^-]+": aa = "(" & .Execute(aa)(0) & ")"
End With
End Function
Код
Function bb$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "[^/]+": .Global = True
bb = "(" & Split(.Execute(t)(.Execute(t).Count - 1), "-")(0) & ")"
End With
End Function
Function aaa(t$) As Date
With CreateObject("VBScript.RegExp"): .Pattern = "от (.+) г\."
aaa = DateValue(.Execute(t)(0).Submatches(0))
End With
End Function
в ответ на #18:если у Вас,например, новая книга Excel-сохранить как Книга excel 97-2003 или как файл с поддержкой макросов,затем,например Вид-Макрос-Запись макроса-Остановить запись.Вслед за макросом, Макрос1 -скопировать текст функции,например zz. Применяйте как обычную формулу в ячейке: =zz(A1),например,для ячейки A1.
Sub test()
Dim z, t$, i&: z = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
With CreateObject("VBScript.RegExp"): .Pattern = "[а-яёa-z]+": .Global = True: .IgnoreCase = True
For i = 1 To UBound(z): t = z(i, 1): z(i, 1) = .Replace(t, ""): Next
Range("A1").Resize(UBound(z), 1).Value = z
End With
End Sub
Function aa$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "[а-яёa-z]+": .Global = True: .IgnoreCase = True
aa = .Replace(t, "")
End With
End Function
Function aa$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\S+": .Global = True
aa = .Execute(t)(.Execute(t).Count - 2) & " " & .Execute(t)(.Execute(t).Count - 1)
End With
End Function
Код
Function bb$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\S+\s\S+$"
bb = .Execute(t)(0)
End With
End Function
Код
Function vv$(t$)
vv = StrReverse(Split(StrReverse(t), " ", 3)(1)) & " " & StrReverse(Split(StrReverse(t), " ", 3)(0))
End Function
Function aa$(t$)
With CreateObject("vbscript.regexp"): .Pattern = ".+(?=-f-)": aa = .Execute(t)(0)
End With
End Function
Function bbb$(t$)
With CreateObject("vbscript.regexp"): .Pattern = "-f-.+": bbb = .Replace(t, "")
End With
End Function
Function ccc$(t$)
With CreateObject("vbscript.regexp"): .Pattern = "-": .Global = True
ccc = Left(t, .Execute(t)(.Execute(t).Count - 2).FirstIndex)
End With
End Function
Function bbb$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "(\d)(\d{2})(\d{3})(\d{2})(\d{2})(\d)"
bbb = .Replace(t, "$1 $2 $3 $4 $5 $6")
End With
End Function
Function zzz$(t$)
With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True
.Pattern = "(?:[^а-яё\w]|^)[а-яё\w]{3,}(?=[^а-яё\w]|$)"
zzz = .Replace(t, "+$&"): zzz = Replace(zzz, "+ ", " +")
End With
End Function
Function yyy$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "([^,]+),([^,]+),([^,]+)$": .Global = True
yyy = .Replace(t, "$2")
End With
End Function
Function vvv$(t$)
vvv = StrReverse(Split(StrReverse(t), ",", 3)(1))
End Function
Код
Function bbb$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "[^,]+": .Global = True
bbb = .Execute(t)(.Execute(t).Count - 2)
End With
End Function
Function bbb#(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "\d+(?:\.)?(?:\d+)?": .Global = True
For i = 0 To .Execute(t).Count - 1: bbb = bbb + Replace(.Execute(t)(i), ".", ","): Next
End With
End Function
Function aaa$(t$)
With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True
.Pattern = "(?:\s|^)[а-яё\w]{3,}(?=\s|$)"
aaa = .Replace(t, "+$&")
End With
End Function
Function yyy$(t$)
With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True
.Pattern = "(?:[^а-яё\w]|^)[а-яё\w]{3,}(?=[^а-яё\w]|$)"
yyy = .Replace(t, "+$&")
End With
End Function
Function aaa&(r As Range)
Dim z, i&, j&, k&: z = r.Value
For i = 1 To UBound(z): k = 0
For j = 1 To UBound(z, 2)
If z(i, j) = 5 Then k = k + 1
Next
If k >= 2 Then aaa = aaa + 1
Next
End Function
Function bbb$(t$, i&)
With CreateObject("VBScript.RegExp"): .Pattern = "\d{11}": .Global = True
If .test(t) And .Execute(t).Count >= i Then bbb = .Execute(t)(i - 1)
End With
End Function
Function uuu$(t$, s$)
uuu = Split(t, UCase(s))(1)
End Function
Код
Function vvv$(t$, s$)
With CreateObject("VBScript.RegExp"): .Pattern = s & "(.+)$": .IgnoreCase = True
If .test(t) Then vvv = .Execute(t)(0).Submatches(0)
End With
End Function