Здравствуйте. Помогите, пожалуйста, с макросом. Необходимо сделать строки в зависимости от текста в ячейках из колонки "Тариф" зелеными. Искомые ячейки с текстом, например, "Телевидение" и "Экономный дом". Как я понимаю, сначала стоит выделить все ячейки, содержащие нужный текст, затем сместить область выделения на ячейку влево и на две ячейки вправо и выполнить заливку нужным цветом. На данный момент дошел до следующего:
[vba]
Код
Sub CellSelection() Dim RezPoiska As Range, firstAddress$ Set RezPoiska = Cells.Find(What:="Телевидение", LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If RezPoiska Is Nothing Then Exit Sub firstAddress = RezPoiska.Address RezPoiska.Select Do Set RezPoiska = Cells.FindNext(RezPoiska) If RezPoiska.Address = firstAddress Then Exit Do Union(Selection, RezPoiska).Select Loop
With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = 0.399975585192419 .PatternTintAndShade = 0 End With
End Sub
[/vba]
В идеале, текст в некоторых строках в зависимости от текста в колонке "Тариф" (напр., "Практичный" и "Интернет 100") выделить жирным. На Лист1 в прикрепленном файле исходные таблицы, на Лист2 необходимый результат.
Здравствуйте. Помогите, пожалуйста, с макросом. Необходимо сделать строки в зависимости от текста в ячейках из колонки "Тариф" зелеными. Искомые ячейки с текстом, например, "Телевидение" и "Экономный дом". Как я понимаю, сначала стоит выделить все ячейки, содержащие нужный текст, затем сместить область выделения на ячейку влево и на две ячейки вправо и выполнить заливку нужным цветом. На данный момент дошел до следующего:
[vba]
Код
Sub CellSelection() Dim RezPoiska As Range, firstAddress$ Set RezPoiska = Cells.Find(What:="Телевидение", LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If RezPoiska Is Nothing Then Exit Sub firstAddress = RezPoiska.Address RezPoiska.Select Do Set RezPoiska = Cells.FindNext(RezPoiska) If RezPoiska.Address = firstAddress Then Exit Do Union(Selection, RezPoiska).Select Loop
With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = 0.399975585192419 .PatternTintAndShade = 0 End With
End Sub
[/vba]
В идеале, текст в некоторых строках в зависимости от текста в колонке "Тариф" (напр., "Практичный" и "Интернет 100") выделить жирным. На Лист1 в прикрепленном файле исходные таблицы, на Лист2 необходимый результат.Mikhail_N
Mikhail_N, Посмотрите вариант с условным форматированием, без макросов (на первом листе). Поскольку у вас достаточно большой список значений для выделения, то я для удобства вынес их в отдельные столбцы. Можете добавлять еще значения.
Mikhail_N, Посмотрите вариант с условным форматированием, без макросов (на первом листе). Поскольку у вас достаточно большой список значений для выделения, то я для удобства вынес их в отдельные столбцы. Можете добавлять еще значения.i691198
Mikhail_N, записанный макрос с манипуляциями автофильтра, подкраска и выделение....косячек-при изменении жирным остается там, где раньше было жирным. не учел при записи макроса.
Mikhail_N, записанный макрос с манипуляциями автофильтра, подкраска и выделение....косячек-при изменении жирным остается там, где раньше было жирным. не учел при записи макроса.cmivadwot
Pelena, i691198, спасибо за помощь, проблема с условным форматированием в том, что для того, чтобы сделать список по примеру до "покраски", я каждый раз сначала создаю Excel файл, затем выгружаю адреса из программы и макросом привожу их в читаемый вид: может быть 5 домов, может 10, может 30. Вторая проблема - всего по предварительным подсчетам существует примерно 800 комбинаций названий тарифов, четверть из них не должны быть зеленые. Тарифы вроде "Телевидение" и "Экономный дом" встречаются чаще всего, но иногда попадаются редкие, вроде "Дом с телефоном цифровой, Расширенный". В теории, можно было бы использовать один и тот же файл с настроенным форматированием или копировать условие каждый раз, но, наверняка, макросом было бы удобнее. Если, конечно, у Excel вообще не возникнет проблем с таким объемом условий.
cmivadwot, отлично, спасибо, этот код уже можно докрутить.
Pelena, i691198, спасибо за помощь, проблема с условным форматированием в том, что для того, чтобы сделать список по примеру до "покраски", я каждый раз сначала создаю Excel файл, затем выгружаю адреса из программы и макросом привожу их в читаемый вид: может быть 5 домов, может 10, может 30. Вторая проблема - всего по предварительным подсчетам существует примерно 800 комбинаций названий тарифов, четверть из них не должны быть зеленые. Тарифы вроде "Телевидение" и "Экономный дом" встречаются чаще всего, но иногда попадаются редкие, вроде "Дом с телефоном цифровой, Расширенный". В теории, можно было бы использовать один и тот же файл с настроенным форматированием или копировать условие каждый раз, но, наверняка, макросом было бы удобнее. Если, конечно, у Excel вообще не возникнет проблем с таким объемом условий.
cmivadwot, отлично, спасибо, этот код уже можно докрутить.Mikhail_N
Mikhail_N, Все выше предложенные решения даны для вашего конкретного примера, а из вашего последнего сообщения становится понятно,что требуется какое то общее решение для разных вариантов. В таком случае от вас требуются дополнительные пояснения. Надеюсь, что структура исходных данных на листе экселя после "выгрузки" и "обработки макросом" будет такой же, как в примере. Т.е. будут меняться названия тарифов и количество строк. И тут основная непонятка - в вашем примере одна часть строчек с названиями тарифов форматируются цветной заливкой, а другая жирным шрифтом. А по какому принципу? Если есть какая то точная зависимость, то это все можно реализовать макросом. Пояснения за вами. Пока могу предложить такой полуручной вариант - сочетание макроса и условного форматирования. Кликаем кнопку "Тарифы", в столбце "Н" отображается список имеющихся на листе тарифов, а в столбце "I" флажки. Отмечаем галочками строки для выделения жирным шрифтом, всё остальное будет выделено цветной заливкой.
Mikhail_N, Все выше предложенные решения даны для вашего конкретного примера, а из вашего последнего сообщения становится понятно,что требуется какое то общее решение для разных вариантов. В таком случае от вас требуются дополнительные пояснения. Надеюсь, что структура исходных данных на листе экселя после "выгрузки" и "обработки макросом" будет такой же, как в примере. Т.е. будут меняться названия тарифов и количество строк. И тут основная непонятка - в вашем примере одна часть строчек с названиями тарифов форматируются цветной заливкой, а другая жирным шрифтом. А по какому принципу? Если есть какая то точная зависимость, то это все можно реализовать макросом. Пояснения за вами. Пока могу предложить такой полуручной вариант - сочетание макроса и условного форматирования. Кликаем кнопку "Тарифы", в столбце "Н" отображается список имеющихся на листе тарифов, а в столбце "I" флажки. Отмечаем галочками строки для выделения жирным шрифтом, всё остальное будет выделено цветной заливкой. i691198
Помогите, пожалуйста, с макросом. Необходимо сделать строки в зависимости от текста в ячейках из колонки "Тариф" зелеными
[vba]
Код
Sub iColorRows() Dim iRange As Range Dim i As Long Dim iLastRow As Long Dim FirstAdr As String Dim arr arr = Split("Телевидение,Экономный дом", ",") iLastRow = Cells(Rows.Count, "A").End(xlUp).Row Range("A2:D" & iLastRow).Interior.ColorIndex = 2 For i = 0 To UBound(arr) Set iRange = Columns(2).Find(arr(i), , xlValues, xlWhole) FirstAdr = iRange.Address Do Range("A" & iRange.Row & ":D" & iRange.Row).Interior.ColorIndex = 4 Set iRange = Columns(2).FindNext(iRange) Loop While iRange.Address <> FirstAdr Next End Sub
[/vba]
Цитата
Помогите, пожалуйста, с макросом. Необходимо сделать строки в зависимости от текста в ячейках из колонки "Тариф" зелеными
[vba]
Код
Sub iColorRows() Dim iRange As Range Dim i As Long Dim iLastRow As Long Dim FirstAdr As String Dim arr arr = Split("Телевидение,Экономный дом", ",") iLastRow = Cells(Rows.Count, "A").End(xlUp).Row Range("A2:D" & iLastRow).Interior.ColorIndex = 2 For i = 0 To UBound(arr) Set iRange = Columns(2).Find(arr(i), , xlValues, xlWhole) FirstAdr = iRange.Address Do Range("A" & iRange.Row & ":D" & iRange.Row).Interior.ColorIndex = 4 Set iRange = Columns(2).FindNext(iRange) Loop While iRange.Address <> FirstAdr Next End Sub
Mikhail_N, еще одна сводная.. по улицам домам, квартирам.... для чего нужно подкрашивать? анализ по домам, квартирам, тарифам? что дает подкраска??
Mikhail_N, еще одна сводная.. по улицам домам, квартирам.... для чего нужно подкрашивать? анализ по домам, квартирам, тарифам? что дает подкраска??cmivadwot
i691198, требовалось решение для конкретного примера из Сообщения № 1, благодаря этому решению я смог самостоятельно прописать в макрос названия других необходимых тарифов. По поводу заливки/жирного, разница в том, что какие-то тарифы включают в себя использование ТВ, а в каких-то только интернет, тарифы только с интернетом выделяем жирным. Названия у тарифов разные, почти никак не связанные: Практичный, Интернет 100, Динамичный и т. д. Решение с галочками интересное, спасибо.
Kuzmich, благодарю за способ, взял на вооружение. cmivadwot, спасибо, ответил вам в ЛС по поводу сводных таблиц. Подкраска/выделение дает наглядность, чтобы было сразу видно определенные тарифы, в нашем случае "Телевидение", "Экономный дом" и др.
Прошу прощения, возможно, я неправильно выразился. Подошел код из Сообщения № 5 от cmivadwot, тему можно закрывать, если нужно. Всем спасибо за помощь, еще раз.
i691198, требовалось решение для конкретного примера из Сообщения № 1, благодаря этому решению я смог самостоятельно прописать в макрос названия других необходимых тарифов. По поводу заливки/жирного, разница в том, что какие-то тарифы включают в себя использование ТВ, а в каких-то только интернет, тарифы только с интернетом выделяем жирным. Названия у тарифов разные, почти никак не связанные: Практичный, Интернет 100, Динамичный и т. д. Решение с галочками интересное, спасибо.
Kuzmich, благодарю за способ, взял на вооружение. cmivadwot, спасибо, ответил вам в ЛС по поводу сводных таблиц. Подкраска/выделение дает наглядность, чтобы было сразу видно определенные тарифы, в нашем случае "Телевидение", "Экономный дом" и др.
Прошу прощения, возможно, я неправильно выразился. Подошел код из Сообщения № 5 от cmivadwot, тему можно закрывать, если нужно. Всем спасибо за помощь, еще раз.Mikhail_N