Здравствуйте! Ежемесячно вынужден вручную проверять таблицу от коллег. Таблица заполняется людьми далекими от Excel еще больше, чем я, в результате чего постоянно возникают трудности. Суть: имеется артикулы разбросанные на листе1 в произвольном порядке, в их наименованиях часто путают rus и eng символы. У меня есть список с артикулами, по которым все готово, его я размещаю на 2-м листе. Далее нужно подсветить на 1-м листе артикулы, присутствующие в списке на 2-м листе. Вроде все просто, но условное форматирование не различает 2-й список по нормальному, т.к. часть его разбита через Alt+Enter, часть символов на 1-м листе не в той раскладке и сам артикул может находиться в середине текста, размещенного в одной ячейке. В итоге каждый артикул я вбиваю в поиске через "*", чтобы избежать проблем с латиницей и вручную подсвечиваю все. В VBA не силен, вполне вероятно достаточно скорректировать список на втором листе записав его на каждой новой строке через "*" в нужных местах? Не уверен, что формулы тут помогут - как через формулы менять цвет заливки я не знаю. Так же не представляю, как возможно реализовать решение через макросы. Буду благодарен за Ваши идеи. К сожалению, на работе аврал и убить 2-3 часа ну гугл поиск возможности нет, вынужден писать сюда.
Здравствуйте! Ежемесячно вынужден вручную проверять таблицу от коллег. Таблица заполняется людьми далекими от Excel еще больше, чем я, в результате чего постоянно возникают трудности. Суть: имеется артикулы разбросанные на листе1 в произвольном порядке, в их наименованиях часто путают rus и eng символы. У меня есть список с артикулами, по которым все готово, его я размещаю на 2-м листе. Далее нужно подсветить на 1-м листе артикулы, присутствующие в списке на 2-м листе. Вроде все просто, но условное форматирование не различает 2-й список по нормальному, т.к. часть его разбита через Alt+Enter, часть символов на 1-м листе не в той раскладке и сам артикул может находиться в середине текста, размещенного в одной ячейке. В итоге каждый артикул я вбиваю в поиске через "*", чтобы избежать проблем с латиницей и вручную подсвечиваю все. В VBA не силен, вполне вероятно достаточно скорректировать список на втором листе записав его на каждой новой строке через "*" в нужных местах? Не уверен, что формулы тут помогут - как через формулы менять цвет заливки я не знаю. Так же не представляю, как возможно реализовать решение через макросы. Буду благодарен за Ваши идеи. К сожалению, на работе аврал и убить 2-3 часа ну гугл поиск возможности нет, вынужден писать сюда.sanpai
sanpai, добрый день, исходя из того, что вы описали, я бы начал с организации справочника артикулов на Листе 2 в виде один артикул=одна ячейка, без всяких Alt-Enter. Далее неясно как ваши пользователи заполняют значения на лист, возможно стОит сделать защищенную форму с выбором значений из выпадающего списка. Тогда необходимость проверки либо совсем отпадет, либо значительно упростится.
sanpai, добрый день, исходя из того, что вы описали, я бы начал с организации справочника артикулов на Листе 2 в виде один артикул=одна ячейка, без всяких Alt-Enter. Далее неясно как ваши пользователи заполняют значения на лист, возможно стОит сделать защищенную форму с выбором значений из выпадающего списка. Тогда необходимость проверки либо совсем отпадет, либо значительно упростится.Kostya_Ye
Kostya_Ye, создал лист 3, в котором разбил список на отдельные ячейки, убрал лишние надписи. Условным форматированием удалось добиться подсветки всех значений, которые на 100% совпадают с значением в ячейке. Но, к примеру, 05с1255-48 и 05с125501-48 это одно и то же. Если через Ctrl+F вбивать, я просто вбиваю "05*1255*-48", условное форматирование же, видимо, воспринимает значения в ячейке буквально и не подсвечивает подобное. Можно, конечно, вбить на 3-м листе все варианты, но т.к. артикулов куча, а окончания 01,02,03 и т.п. на конце артикулов могут добавляться постоянно, этот вариант не подходит.
Kostya_Ye, создал лист 3, в котором разбил список на отдельные ячейки, убрал лишние надписи. Условным форматированием удалось добиться подсветки всех значений, которые на 100% совпадают с значением в ячейке. Но, к примеру, 05с1255-48 и 05с125501-48 это одно и то же. Если через Ctrl+F вбивать, я просто вбиваю "05*1255*-48", условное форматирование же, видимо, воспринимает значения в ячейке буквально и не подсвечивает подобное. Можно, конечно, вбить на 3-м листе все варианты, но т.к. артикулов куча, а окончания 01,02,03 и т.п. на конце артикулов могут добавляться постоянно, этот вариант не подходит.sanpai
Тут нашел нечто похожее, но от обратного. К сожалению, в VBA разобраться не смог. Сам файл с примером с того сайта, вложил. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range If Target.Cells.Count > 1 Then Exit Sub 'Для столбцов C, М... If Not Intersect(Target, Range("C3:C1000, M3:M1000")) Is Nothing Then Application.EnableEvents = False With Target.Offset(0, -1) If Target = "" Then .Value = "" .Interior.ColorIndex = xlNone Else Set Rng = Sheets("Остатки").Range("MyRange").Find(what:=Target, LookIn:=xlValues, lookAt:=xlWhole) If Not Rng Is Nothing Then .Value = "Есть" .Interior.Color = 5287936 Else .Value = "Нет" .Interior.ColorIndex = 3 End If End If End With End If 'Для возврата (столбцы G, Q...) If Not Intersect(Target, Range("G3:G1000, Q3:Q1000")) Is Nothing Then Application.EnableEvents = False With Target Set Rng = Sheets("Остатки").Range("MyRange").Find(what:=Target, LookIn:=xlValues, lookAt:=xlWhole) If Not Rng Is Nothing Then .Font.ColorIndex = 1 Else .Font.ColorIndex = 3 End If End With End If Application.EnableEvents = True End Sub
[/vba]
Тут нашел нечто похожее, но от обратного. К сожалению, в VBA разобраться не смог. Сам файл с примером с того сайта, вложил. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range If Target.Cells.Count > 1 Then Exit Sub 'Для столбцов C, М... If Not Intersect(Target, Range("C3:C1000, M3:M1000")) Is Nothing Then Application.EnableEvents = False With Target.Offset(0, -1) If Target = "" Then .Value = "" .Interior.ColorIndex = xlNone Else Set Rng = Sheets("Остатки").Range("MyRange").Find(what:=Target, LookIn:=xlValues, lookAt:=xlWhole) If Not Rng Is Nothing Then .Value = "Есть" .Interior.Color = 5287936 Else .Value = "Нет" .Interior.ColorIndex = 3 End If End If End With End If 'Для возврата (столбцы G, Q...) If Not Intersect(Target, Range("G3:G1000, Q3:Q1000")) Is Nothing Then Application.EnableEvents = False With Target Set Rng = Sheets("Остатки").Range("MyRange").Find(what:=Target, LookIn:=xlValues, lookAt:=xlWhole) If Not Rng Is Nothing Then .Font.ColorIndex = 1 Else .Font.ColorIndex = 3 End If End With End If Application.EnableEvents = True End Sub