Добрый день, форумчане.
Столкнулся с некоторой задачей, которую пока никак не могу решить - возможно Вам покажется проще:
есть некоторая функция (код ниже), которая приводит разномастные значения дат, кварталов к единому виду - "Q YYYY".
Т.е. если у меня прописано в ячейке 30.06.2017 - функция приводит это к значению 2 2017 - т.е. номер квартала и четырехзначный номер года. Аналогично с римским обозначением квартала и т.д.
До сей поры это все у меня работало прекрасно, пока не столкнулся с необходимостью добавить в функцию новые типы данных, а именно
3 месяца YYYY г.?(ода)?
6 месяцев YYYY г.?(ода)?
9 месяцев YYYY г.?(ода)?
Соответственно в функцию я добавил блок
Но функция все-равно не заменяет месяцы на квартал и на выходе я получаю для примера.
3 2017
6 2017
9 2017
Может кто-нибудь подскажет, что делаю не так?
Столкнулся с некоторой задачей, которую пока никак не могу решить - возможно Вам покажется проще:
есть некоторая функция (код ниже), которая приводит разномастные значения дат, кварталов к единому виду - "Q YYYY".
Т.е. если у меня прописано в ячейке 30.06.2017 - функция приводит это к значению 2 2017 - т.е. номер квартала и четырехзначный номер года. Аналогично с римским обозначением квартала и т.д.
До сей поры это все у меня работало прекрасно, пока не столкнулся с необходимостью добавить в функцию новые типы данных, а именно
3 месяца YYYY г.?(ода)?
6 месяцев YYYY г.?(ода)?
9 месяцев YYYY г.?(ода)?
Соответственно в функцию я добавил блок
| Код |
|---|
'Проверка наличия периодов бух.отчетности
re.Pattern = "\D*\d месяц\D*(\d{2,4})\D*"
If re.Test(tempString) Then
re.Pattern = "9"
If re.Test(tempString) Then tempString = re.Replace(tempString, "3"): GoTo 1
re.Pattern = "6"
If re.Test(tempString) Then tempString = re.Replace(tempString, "2"): GoTo 1
re.Pattern = "3"
If re.Test(tempString) Then tempString = re.Replace(tempString, "1")
End If
|
Но функция все-равно не заменяет месяцы на квартал и на выходе я получаю для примера.
3 2017
6 2017
9 2017
Может кто-нибудь подскажет, что делаю не так?
| Код |
|---|
Option Explicit
Public Function RgxData(astring As Range) As String
Dim re As RegExp, d As Date, s$
Dim tempString
Set re = New RegExp
re.Pattern = "(-|\г.+|\(|\)| )"
re.Global = True
re.IgnoreCase = True
tempString = re.Replace(astring, "")
'Проверка наличия в строке даты
re.Pattern = "\D*(\d\d?)\.(\d\d?)\.(\d{2,4})\D*"
If re.Test(tempString) Then
RgxData = DatePart("q", DateValue(re.Replace(tempString, "$1.$2.$3"))) & DatePart("yyyy", DateValue(re.Replace(tempString, "$1.$2.$3")))
d = CDate(tempString) - 1
s = DatePart("q", d) & " " & DatePart("yyyy", d)
If s <> RgxData Then RgxData = s
Exit Function
End If
'Проверка наличия периодов бух.отчетности
re.Pattern = "\D*\d месяц\D*(\d{2,4})\D*"
If re.Test(tempString) Then
re.Pattern = "9"
If re.Test(tempString) Then tempString = re.Replace(tempString, "3"): GoTo 1
re.Pattern = "6"
If re.Test(tempString) Then tempString = re.Replace(tempString, "2"): GoTo 1
re.Pattern = "3"
If re.Test(tempString) Then tempString = re.Replace(tempString, "1")
End If
'Проверка наличия в строке квартала написаного римской цифрой, буквами латиницы "I" и "V"
re.Pattern = "\D*(i{1,3}(?!i)v?(?!v))\D*(кв)?\D+(\d{2,4})\D*"
If re.Test(tempString) Then
re.Pattern = "iv"
If re.Test(tempString) Then tempString = re.Replace(tempString, "4"): GoTo 1
re.Pattern = "iii"
If re.Test(tempString) Then tempString = re.Replace(tempString, "3"): GoTo 1
re.Pattern = "ii"
If re.Test(tempString) Then tempString = re.Replace(tempString, "2"): GoTo 1
re.Pattern = "i"
If re.Test(tempString) Then tempString = re.Replace(tempString, "1")
End If
1:
'Проверка наличия в строке квартала написаного арабской цифрой
re.Pattern = "\D*(\d)\D*(кв)?\D+(\d{2,4})\D*"
If re.Test(tempString) Then
RgxData = re.Replace(tempString, "$1 $3")
Exit Function
End If
'Проверка наличия в строке квартала написаного арабской цифрой
re.Pattern = "\D*(\d{4})\D*"
If re.Test(tempString) Then
RgxData = re.Replace(tempString, "$1")
Exit Function
End If
RgxData = "Период не определен!"
End Function
|