Доброго утра многоуважаемые форумчане!!! Помогите реализовать на листе условное форматирование макросом. Объясню почему именно им!!! Нужно чтоб при условии УФ окрашивалась часть текста (дата) и согласно выполняемому условию Начал записывать через Macro Recorde но разбивал эту задачу на две части 1. Прописание самого условия формулой 2. Окрашиванием части текста (дата) в нужные мне (цвет; подчеркивание; жирный; курсив) И когда начинаю объединять запись то
[vba]
Код
Sub Макрос1() 'заливка красным
Range("A2").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=DATE(YEAR(MID(R[-7]C,SEARCH(""г."",R[-7]C,1)-10,10))+1,MONTH(MID(R[-7]C,SEARCH(""г."",R[-7]C,1)-10,10)),DAY(MID(R[-7]C,SEARCH(""г."",R[-7]C,1)-10,10)))<R[-7]C[6]" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With ActiveCell.Characters(Start:=1, Length:=49).Font .Name = "Times New Roman" .FontStyle = "курсив" .Size = 14 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With With ActiveCell.Characters(Start:=50, Length:=12).Font .Name = "Times New Roman" .FontStyle = "полужирный курсив" .Size = 14 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleSingle .Color = -16776961 .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With Selection.FormatConditions(1).StopIfTrue = False End Sub
[/vba]
Данное условие потом хочу прописать на листе Worksheet_Change(ByVal Target As Range) 'любые изменения на листе где уже есть ряд других кодов. ПОМОГИТЕ ПОЖАЛУЙСТА РЕАЛИЗОВАТЬ ЗАДУМАННОЕ
Доброго утра многоуважаемые форумчане!!! Помогите реализовать на листе условное форматирование макросом. Объясню почему именно им!!! Нужно чтоб при условии УФ окрашивалась часть текста (дата) и согласно выполняемому условию Начал записывать через Macro Recorde но разбивал эту задачу на две части 1. Прописание самого условия формулой 2. Окрашиванием части текста (дата) в нужные мне (цвет; подчеркивание; жирный; курсив) И когда начинаю объединять запись то
[vba]
Код
Sub Макрос1() 'заливка красным
Range("A2").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=DATE(YEAR(MID(R[-7]C,SEARCH(""г."",R[-7]C,1)-10,10))+1,MONTH(MID(R[-7]C,SEARCH(""г."",R[-7]C,1)-10,10)),DAY(MID(R[-7]C,SEARCH(""г."",R[-7]C,1)-10,10)))<R[-7]C[6]" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With ActiveCell.Characters(Start:=1, Length:=49).Font .Name = "Times New Roman" .FontStyle = "курсив" .Size = 14 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With With ActiveCell.Characters(Start:=50, Length:=12).Font .Name = "Times New Roman" .FontStyle = "полужирный курсив" .Size = 14 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleSingle .Color = -16776961 .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With Selection.FormatConditions(1).StopIfTrue = False End Sub
[/vba]
Данное условие потом хочу прописать на листе Worksheet_Change(ByVal Target As Range) 'любые изменения на листе где уже есть ряд других кодов. ПОМОГИТЕ ПОЖАЛУЙСТА РЕАЛИЗОВАТЬ ЗАДУМАННОЕlebensvoll
окрашивалась часть текста (дата) и согласно выполняемому условию
Попробуйте так [vba]
Код
Sub iДата() Dim i As Long Dim iLastRow Dim iДата As Object With CreateObject("VBScript.RegExp") .Global = True .Pattern = "от (\d{1,2}\.\d{1,2}\.\d{2,4})" iLastRow = Range("A2").End(xlDown).Row Range("A2:A" & iLastRow).Interior.ColorIndex = xlNone For i = 2 To iLastRow If .Test(Cells(i, "A")) Then Set iДата = .Execute(Cells(i, "A"))(0) If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font.ColorIndex = 3 ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font.ColorIndex = 4 ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date + 60 And _ CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) > Date Then Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font.ColorIndex = 5 End If End If Next End With End Sub
[/vba]
Цитата
окрашивалась часть текста (дата) и согласно выполняемому условию
Попробуйте так [vba]
Код
Sub iДата() Dim i As Long Dim iLastRow Dim iДата As Object With CreateObject("VBScript.RegExp") .Global = True .Pattern = "от (\d{1,2}\.\d{1,2}\.\d{2,4})" iLastRow = Range("A2").End(xlDown).Row Range("A2:A" & iLastRow).Interior.ColorIndex = xlNone For i = 2 To iLastRow If .Test(Cells(i, "A")) Then Set iДата = .Execute(Cells(i, "A"))(0) If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font.ColorIndex = 3 ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font.ColorIndex = 4 ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date + 60 And _ CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) > Date Then Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font.ColorIndex = 5 End If End If Next End With End Sub
Kuzmich, спасибо огромнейшее за ответ. Мне так очень сложно воспринимать vba когда прям кодом начинают прописывать ((((( Но, немного понял Но и тут получается что срабатывание происходит лишь выделение красным (но без подчеркивания и выделения жирным) [vba]
Код
'первое УФ If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 3 'окрашивание в красный .FontStyle = "полужирный курсив" 'выделение полужирным
Данное дополнение сделал по аналогии когда производил запись через макрорекордера. Да как я понял уменя в третьем условии (в моих формулах) вообще не получается осуществить выполнение (((( условия
Kuzmich, спасибо огромнейшее за ответ. Мне так очень сложно воспринимать vba когда прям кодом начинают прописывать ((((( Но, немного понял Но и тут получается что срабатывание происходит лишь выделение красным (но без подчеркивания и выделения жирным) [vba]
Код
'первое УФ If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 3 'окрашивание в красный .FontStyle = "полужирный курсив" 'выделение полужирным
Данное дополнение сделал по аналогии когда производил запись через макрорекордера. Да как я понял уменя в третьем условии (в моих формулах) вообще не получается осуществить выполнение (((( условияlebensvoll
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 3 'окрашивание в красный .FontStyle = "полужирный курсив" 'выделение полужирным End With
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 3 'окрашивание в красный .FontStyle = "полужирный курсив" 'выделение полужирным End With
Kuzmich, макрос срабатывает на всех 5-ти записях в столбце А но лишь 1-е условие и то неправильно (он просто окрашивает в красный цвет текст) даже если установить дату сегодня 16/09/20 ХОТЯЯЯЯЯЯ тут наверное мне не датой СЕГОДНЯ ИГРАТЬ НУЖНО а датой поверкой оборудования
И вот тут вот сработало 2-е условие но малость не так: [img][/img]
Вот смотрите, имеется оборудование :КНТ протокол периодической аттестации №581-19 от 10.02.2021г. Данное оборудование сегодня прошла поверку и получила аттестат который действует год (есть оборудование которое действует два или три года) В своем примере формулой я сделал так:
ячейка G2 момент сегодняшней даты а дата предыдущей проверки я вытягиваю от сюда
Цитата
КНТ протокол периодической аттестации №581-19 от 10.02.2021г.
и плюсую еще год
В вашем решение с помощью макроса я так понимаю что Вы используете ИНДЕКС ДЛСТР (я же работал с одной ячейкой) Мне бы тоже хотелось понять Ваш расчет макросом
[p.s.] и в третьем условии у меня вроде как не получается создать условие выделение желтым-оранжевым. Если дата очередной поверки меньше сегодняшней даты на два месяца то "желтое" (оборудование подлежит поверке и скоро будет просроченное)
Kuzmich, макрос срабатывает на всех 5-ти записях в столбце А но лишь 1-е условие и то неправильно (он просто окрашивает в красный цвет текст) даже если установить дату сегодня 16/09/20 ХОТЯЯЯЯЯЯ тут наверное мне не датой СЕГОДНЯ ИГРАТЬ НУЖНО а датой поверкой оборудования
И вот тут вот сработало 2-е условие но малость не так: [img][/img]
Вот смотрите, имеется оборудование :КНТ протокол периодической аттестации №581-19 от 10.02.2021г. Данное оборудование сегодня прошла поверку и получила аттестат который действует год (есть оборудование которое действует два или три года) В своем примере формулой я сделал так:
ячейка G2 момент сегодняшней даты а дата предыдущей проверки я вытягиваю от сюда
Цитата
КНТ протокол периодической аттестации №581-19 от 10.02.2021г.
и плюсую еще год
В вашем решение с помощью макроса я так понимаю что Вы используете ИНДЕКС ДЛСТР (я же работал с одной ячейкой) Мне бы тоже хотелось понять Ваш расчет макросом
[p.s.] и в третьем условии у меня вроде как не получается создать условие выделение желтым-оранжевым. Если дата очередной поверки меньше сегодняшней даты на два месяца то "желтое" (оборудование подлежит поверке и скоро будет просроченное)lebensvoll
В макросе дата очередной проверки вытягивается из КНТ протокол периодической аттестации №581-19 от 10.02.2021г. В переменной iДата будет 'от 10.02.2021' И эта дата сравнивается с сегодняшней датой (Date), а не с ячейкой G2, как вы думаете
В макросе дата очередной проверки вытягивается из КНТ протокол периодической аттестации №581-19 от 10.02.2021г. В переменной iДата будет 'от 10.02.2021' И эта дата сравнивается с сегодняшней датой (Date), а не с ячейкой G2, как вы думаетеKuzmich
В макросе дата очередной проверки вытягивается из КНТ протокол периодической аттестации №581-19 от 10.02.2021г.
Цитата
В переменной iДата будет 'от 10.02.2021'
А в переменной должно 10.02.21 + 1 один год (в зависимости от оборудования срок 1-н год может измениться на 2 или 3) И сравниваем ее с датой в ячейке Сегодня (на момент проведения испытания дата сегодня может также изменяться. Вдруг оператор задними числом составляет протокол испытания)
Kuzmich, может быть вы подсказали как в макрос формулой УФ сделать. Мне будет легче потом в дальнейшем править его (((( или подскажите как в вашем решении указать дату сегодня в ячейке
Kuzmich, так в том то и смысл
Цитата
В макросе дата очередной проверки вытягивается из КНТ протокол периодической аттестации №581-19 от 10.02.2021г.
Цитата
В переменной iДата будет 'от 10.02.2021'
А в переменной должно 10.02.21 + 1 один год (в зависимости от оборудования срок 1-н год может измениться на 2 или 3) И сравниваем ее с датой в ячейке Сегодня (на момент проведения испытания дата сегодня может также изменяться. Вдруг оператор задними числом составляет протокол испытания)
Kuzmich, может быть вы подсказали как в макрос формулой УФ сделать. Мне будет легче потом в дальнейшем править его (((( или подскажите как в вашем решении указать дату сегодня в ячейкеlebensvoll
Kuzmich, спасибо огромнейшее за отзывчивость, потраченное время и пояснение!!! Понял что что не так это точно
Цитата
Вот это выражение будет дата проверки
[vba]
Код
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0))
[/vba] вот этот SubMatches Вы применили как обсуждается в этой теме My WebPage "Синтаксис регулярных выражений" немного понял но не до конца
уловил и вразумил дата проверки к примеру: от 11.02.2020г [vba]
Код
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then
[/vba] Тут до меня тоже дошло после Вашего пояснения (но долго доходило) заменил на [vba]
Код
Range("G2") Then
[/vba] И если в данной ячейке указать дату 11.02.2021 то в столбце А (должна же окраситься в зеленый цвет, верно)!? Но она почему то красная [img][/img]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'любые изменения на листе Dim i As Long Dim iLastRow Dim iДата As Object With CreateObject("VBScript.RegExp") .Global = True .Pattern = "от (\d{1,2}\.\d{1,2}\.\d{2,4})" iLastRow = Range("A2").End(xlDown).Row Range("A2:A" & iLastRow).Font.ColorIndex = 0 Range("A2:A" & iLastRow).Font.Bold = False For i = 2 To iLastRow If .Test(Cells(i, "A")) Then Set iДата = .Execute(Cells(i, "A"))(0)
'1-е УФ форматривание: Если дата очередной поверки больше сегоднешней то "красное" (просроченная проверка оборудования) '=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))>G2
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Range("G2") Then
With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 3 'окрашивание в красный .FontStyle = "полужирный курсив" 'выделение полужирным .Underline = xlUnderlineStyleSingle 'подчеркивание текста End With
'2-е УФ форматривание: Если дата очередной поверки равна сегоднешней дате то "зеленое" (оборудование подошло к поверке) '=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))=G2
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Range("G2") Then
With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 4 'окрашивание в зеленый .FontStyle = "полужирный курсив" 'выделение полужирным .Underline = xlUnderlineStyleSingle 'подчеркивание текста End With
'3-е УФ форматривание: Если дата очередной поверки меньше сегодняшней даты на два месяца то "желтое" (оборудование подлежит поверке и скоро будет просроченное) '=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))-2;ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))<=ДАТАМЕС(ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)));-2)
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Range("G2") + 60 And _ CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) > Range("G2") Then
With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 27 'окрашивание в желтый .FontStyle = "полужирный курсив" 'выделение полужирным .Underline = xlUnderlineStyleSingle 'подчеркивание текста End With End If End If Next End With End Sub
[/vba]
Kuzmich, спасибо огромнейшее за отзывчивость, потраченное время и пояснение!!! Понял что что не так это точно
Цитата
Вот это выражение будет дата проверки
[vba]
Код
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0))
[/vba] вот этот SubMatches Вы применили как обсуждается в этой теме My WebPage "Синтаксис регулярных выражений" немного понял но не до конца
уловил и вразумил дата проверки к примеру: от 11.02.2020г [vba]
Код
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then
[/vba] Тут до меня тоже дошло после Вашего пояснения (но долго доходило) заменил на [vba]
Код
Range("G2") Then
[/vba] И если в данной ячейке указать дату 11.02.2021 то в столбце А (должна же окраситься в зеленый цвет, верно)!? Но она почему то красная [img][/img]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'любые изменения на листе Dim i As Long Dim iLastRow Dim iДата As Object With CreateObject("VBScript.RegExp") .Global = True .Pattern = "от (\d{1,2}\.\d{1,2}\.\d{2,4})" iLastRow = Range("A2").End(xlDown).Row Range("A2:A" & iLastRow).Font.ColorIndex = 0 Range("A2:A" & iLastRow).Font.Bold = False For i = 2 To iLastRow If .Test(Cells(i, "A")) Then Set iДата = .Execute(Cells(i, "A"))(0)
'1-е УФ форматривание: Если дата очередной поверки больше сегоднешней то "красное" (просроченная проверка оборудования) '=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))>G2
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Range("G2") Then
With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 3 'окрашивание в красный .FontStyle = "полужирный курсив" 'выделение полужирным .Underline = xlUnderlineStyleSingle 'подчеркивание текста End With
'2-е УФ форматривание: Если дата очередной поверки равна сегоднешней дате то "зеленое" (оборудование подошло к поверке) '=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))=G2
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Range("G2") Then
With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 4 'окрашивание в зеленый .FontStyle = "полужирный курсив" 'выделение полужирным .Underline = xlUnderlineStyleSingle 'подчеркивание текста End With
'3-е УФ форматривание: Если дата очередной поверки меньше сегодняшней даты на два месяца то "желтое" (оборудование подлежит поверке и скоро будет просроченное) '=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))-2;ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))<=ДАТАМЕС(ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)));-2)
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Range("G2") + 60 And _ CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) > Range("G2") Then
With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _ Length:=iДата.Length - 3).Font .ColorIndex = 27 'окрашивание в желтый .FontStyle = "полужирный курсив" 'выделение полужирным .Underline = xlUnderlineStyleSingle 'подчеркивание текста End With End If End If Next End With End Sub
Думаю что так не правильно и вообще думаю не правильно
Если срок годности продукта до 01.01.2022, то сегодня он просрочен. И это вы называете "думаю"?
[vba]
Код
Private Sub Worksheet_Calculate() Dim cl As Range, sDate$, dDate As Date, xDate& On Error Resume Next Me.Range("A:D").Font.ColorIndex = 0 For Each cl In Intersect(Me.UsedRange.Cells, Me.Columns(1)) If Len(cl) Then sDate = (Left(Mid(cl.Value, InStrRev(cl.Value, " ") + 1), 10)) sDate = Left(sDate, 9) & Val(Right(sDate, 1)) + Me.Range("F2") dDate = CDate(Left(Mid(cl.Value, InStrRev(cl.Value, " ") + 1), 10)) xDate = InStrRev(cl.Value, " ") + 1 If dDate > Date Then With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font .FontStyle = "полужирный курсив" .Underline = xlUnderlineStyleSingle .Color = vbRed End With ElseIf dDate = Me.Range("G2") Then With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font .FontStyle = "полужирный курсив" .Underline = xlUnderlineStyleSingle .Color = vbGreen End With ElseIf dDate + (Application.EoMonth(Date, 0) - Application.EoMonth(Date, -2)) > Date And dDate < Date Then With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font .FontStyle = "полужирный курсив" .Underline = xlUnderlineStyleSingle .Color = vbYellow End With End If End If Next End Sub
[/vba] Наличие на листе (в любой ячейке) формулы =СЕГОДНЯ() обязательно!
Думаю что так не правильно и вообще думаю не правильно
Если срок годности продукта до 01.01.2022, то сегодня он просрочен. И это вы называете "думаю"?
[vba]
Код
Private Sub Worksheet_Calculate() Dim cl As Range, sDate$, dDate As Date, xDate& On Error Resume Next Me.Range("A:D").Font.ColorIndex = 0 For Each cl In Intersect(Me.UsedRange.Cells, Me.Columns(1)) If Len(cl) Then sDate = (Left(Mid(cl.Value, InStrRev(cl.Value, " ") + 1), 10)) sDate = Left(sDate, 9) & Val(Right(sDate, 1)) + Me.Range("F2") dDate = CDate(Left(Mid(cl.Value, InStrRev(cl.Value, " ") + 1), 10)) xDate = InStrRev(cl.Value, " ") + 1 If dDate > Date Then With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font .FontStyle = "полужирный курсив" .Underline = xlUnderlineStyleSingle .Color = vbRed End With ElseIf dDate = Me.Range("G2") Then With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font .FontStyle = "полужирный курсив" .Underline = xlUnderlineStyleSingle .Color = vbGreen End With ElseIf dDate + (Application.EoMonth(Date, 0) - Application.EoMonth(Date, -2)) > Date And dDate < Date Then With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font .FontStyle = "полужирный курсив" .Underline = xlUnderlineStyleSingle .Color = vbYellow End With End If End If Next End Sub
[/vba] Наличие на листе (в любой ячейке) формулы =СЕГОДНЯ() обязательно!RAN
RAN, спасибо за ответ и помощь!!! но все не так: КНТ протокол периодической аттестации №581-19 от 10.02.2020г. 10.02.20 "это дата поверки оборудования" следующая дата "поверки оборудования" будет через год т.е. 10.02.21 Я это делал формулой так
Что Вы что Kuzmich, завязались на текущей дате от сюда: "КНТ протокол периодической аттестации №581-19 от 10.02.2020г." По сути все верно но к данной дате не прибавляете год чтоб начать ее сравнивать с датой сегодня или с ячейкой где будет указана дата (типо сегодня) [img][/img]
Давным, давно как то мне Борода (Александр) помог сделать подобный файл но там решение не макросом да и задача немного другого характера но условие выполнение тоже самое "График аттестации оборудования"
RAN, спасибо за ответ и помощь!!! но все не так: КНТ протокол периодической аттестации №581-19 от 10.02.2020г. 10.02.20 "это дата поверки оборудования" следующая дата "поверки оборудования" будет через год т.е. 10.02.21 Я это делал формулой так
Что Вы что Kuzmich, завязались на текущей дате от сюда: "КНТ протокол периодической аттестации №581-19 от 10.02.2020г." По сути все верно но к данной дате не прибавляете год чтоб начать ее сравнивать с датой сегодня или с ячейкой где будет указана дата (типо сегодня) [img][/img]
Давным, давно как то мне Борода (Александр) помог сделать подобный файл но там решение не макросом да и задача немного другого характера но условие выполнение тоже самое "График аттестации оборудования" lebensvoll
Я же говорю, что вы не думаете. Или, все ваши думы остаются у вас. Мой макрос увеличивает дату не заданное количество лет. Но для всех записей на одно и то же число. Для того, чтобы макрос работал как на картинке, нужно изменить одну строчку.
Я же говорю, что вы не думаете. Или, все ваши думы остаются у вас. Мой макрос увеличивает дату не заданное количество лет. Но для всех записей на одно и то же число. Для того, чтобы макрос работал как на картинке, нужно изменить одну строчку.RAN
lebensvoll Всегда ли следующая дата поверки будет через год ? Мне кажется, что более информативна будет колонка, показывающая количество дней до очередной поверки. И эту ячейку можно окрашивать различными цветами в зависимости от количество дней
lebensvoll Всегда ли следующая дата поверки будет через год ? Мне кажется, что более информативна будет колонка, показывающая количество дней до очередной поверки. И эту ячейку можно окрашивать различными цветами в зависимости от количество днейKuzmich
Всегда ли следующая дата поверки будет через год ?
Нет не всегда Я думал что завяжусь на ячейках напротив записи "КНТ протокол периодической аттестации №581-19 от 10.01.2019г." Также думал и с датой Сегодня поступить. На момент составления (протокола) дата может быть не равна дате СЕГОДНЯ (а к примеру СЕГОДНЯ 11.02.2021 а протокол составляю к примеру 25.01.2021 (задним числом но сегодня) и вот именно эта дата 25.01.2021 и должна была быть в сравнении с "№581-19 от 10.01.2019г. + 1 год (или 2;3) = 10.01.2020;21;22"
Наглядный пример всей этой процедуры в Сообщение № 12 и приложенном файле (там Борода Александр когда то мне помог осуществить задуманное но там не макросы и условие только с датами из ячеек и окрашивание всей ячейки)... А в данной теме работа с текстом вытягивание даты и окрашивание части текста по условию
То что именно такое нельзя осуществить формулами через УФ я уже понял проанализировав этот форум.
Kuzmich,
Цитата
Всегда ли следующая дата поверки будет через год ?
Нет не всегда Я думал что завяжусь на ячейках напротив записи "КНТ протокол периодической аттестации №581-19 от 10.01.2019г." Также думал и с датой Сегодня поступить. На момент составления (протокола) дата может быть не равна дате СЕГОДНЯ (а к примеру СЕГОДНЯ 11.02.2021 а протокол составляю к примеру 25.01.2021 (задним числом но сегодня) и вот именно эта дата 25.01.2021 и должна была быть в сравнении с "№581-19 от 10.01.2019г. + 1 год (или 2;3) = 10.01.2020;21;22"
Наглядный пример всей этой процедуры в Сообщение № 12 и приложенном файле (там Борода Александр когда то мне помог осуществить задуманное но там не макросы и условие только с датами из ячеек и окрашивание всей ячейки)... А в данной теме работа с текстом вытягивание даты и окрашивание части текста по условию
То что именно такое нельзя осуществить формулами через УФ я уже понял проанализировав этот форум.lebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Четверг, 11.02.2021, 17:11
Kuzmich, да я же не думал что вы и RAN, мне пропишите код с переменными и т.д. Я в обычном то режиме записи через Macro Recorder произвожу запись и то теряюсь и начинаю обращаться когда идет все так А тут еще и переменные + "Синтаксис регулярных выражений" для меня вообще темный лес
Kuzmich, да я же не думал что вы и RAN, мне пропишите код с переменными и т.д. Я в обычном то режиме записи через Macro Recorder произвожу запись и то теряюсь и начинаю обращаться когда идет все так А тут еще и переменные + "Синтаксис регулярных выражений" для меня вообще темный лесlebensvoll