Здравствуйте, форумчане. Подскажите по решению следующей проблемы. Как научить макрос извлекать в ячейку D8 - тот текст в строке, который идет между словами "ЗАПИСЬ-" и "," ?
(Причем извлеченный текст должен захватывать еще один символ по левую сторону. То есть должно получиться не "А1+Б4+А V Д", а "-А1+Б4+А V Д".)
Function ТЕКСТМЕЖДУ(cl, s1 As String, n1 As Long, s2 As String, n2 As Long) As String
'cl - текст, или ссылка на ячейку с текстом, откуда вырезаем текст
's1 - первый граничный символ
'n1 - номер вхождения первого символа
's2 - второй граничный символ
'n2 - номер вхождения второго символа
With Application.WorksheetFunction
If s1 = s2 Then
cl = .Substitute(.Substitute(cl, s1, Chr(5), n1), s2, Chr(6), n2 - 1)
s1 = Chr(5)
s2 = Chr(6)
n1 = 1
n2 = 1
End If
If n1 > 1 Then
cl = .Substitute(cl, s1, Chr(5), n1)
s1 = Chr(5)
n1 = 1
End If
If n2 > 1 Then
cl = .Substitute(cl, s2, Chr(6), n2)
s2 = Chr(6)
n2 = 1
End If
f1 = .Search(s1, CStr(cl), n1) + 1: f2 = .Search(s2, CStr(cl), n2)
If f2 - f1 < 0 Then Exit Function
ТЕКСТМЕЖДУ = Mid(CStr(cl), f1 + Len(s1) - 2, f2 - f1 - Len(s1) + 2)
End With
End Function
Function FindThat$(ByVal txt$)
If InStr(txt, "-") < 1 Or InStr(txt, ",") < 1 Then FindThat = vbNullString: Exit Function
If InStr(txt, "-") >= InStr(txt, ",") Then FindThat = vbNullString: Exit Function
FindThat = Mid$(txt, InStr(txt, "-"), InStr(txt, ",") - InStr(txt, "-")-1)
End Function
Function iЗАПИСЬ(cell$)
With CreateObject("VBScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "ЗАПИСЬ(.+?)(?=,)"
iЗАПИСЬ = .Execute(cell)(0).SubMatches(0)
End With
End Function
Sub ЗАПИСЬ()
With CreateObject("VBScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "ЗАПИСЬ(.+?)(?=,)"
Range("D8") = .Execute(Range("H8"))(0).SubMatches(0)
End With
В вашем макросе - ограничитель - это слово "ЗАПИСЬ", а нужен ограничитель "ЗАПИСЬ-". (Потому что слово "запись" - может встречаться и раньше по тексту, а вот "запись-" ставится в тексте именно как разделитель.)
Но при этом, нужно чтобы один символ слева - при переносе все-таки выхватывался - чтобы получался текст "-А1+Б4+А V Д"
Sub ЗАПИСЬ()
With CreateObject("VBScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "ЗАПИСЬ-(.+?)(?=,)"
If .test(Range("H8")) Then
Range("D8") = "-" & .Execute(Range("H8"))(0).SubMatches(0)
Else
Range("D8") = ""
End If
End With
End Sub