Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2010, 08:47   #1
Silent_Knauf
 
Регистрация: 13.11.2010
Сообщений: 4
По умолчанию Условное форматирование с 14 условиями

Всем доброго времени суток!
Если коротко: как написать то же самое менее криво?
Теперь подробно:
На лист 1 в столбец А вносятся марки и размеры продукции в виде "КТ {марка}-{размер}. Всего 14 марок и порядка 300 размеров. На листе 3 указаны существующие марки и их цветовое обозначение. Количество и названия марок могут изменяться примерно раз в год.
Что хочу: чтобы после ввода на листе 1 марки и размера ячейка окрашивалась в цвет этой марки с листа 3. Пока что реализовала на if ...then..., но мне кажется, что существуют более красивые решения.
Заранее спасибо.
Вложения
Тип файла: rar цвет в зависимости от значения.rar (11.3 Кб, 15 просмотров)
Silent_Knauf вне форума Ответить с цитированием
Старый 13.11.2010, 16:33   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если бы все значения были введены точно так, как Вы говорите ("КТ {марка}-{размер}"), то код был бы существенно проще. В Вашем примере есть разные типы строк (с пробелами вместо тире и т.п.). Но и это не страшно.
Посмотрите пример во вложении. Количество значений и цветов не ограничено.
Вложения
Тип файла: rar цвет в зависимости от значения_2.rar (10.9 Кб, 26 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 13.11.2010, 17:21   #3
Silent_Knauf
 
Регистрация: 13.11.2010
Сообщений: 4
По умолчанию

Спасибо. Теперь буду разбираться, почему и как это работает. Моих знаний на такое не хватает.
Silent_Knauf вне форума Ответить с цитированием
Старый 18.11.2010, 11:32   #4
Silent_Knauf
 
Регистрация: 13.11.2010
Сообщений: 4
По умолчанию

У меня сильно тормозит доступ к форуму, поэтому выкладываю код с моими комментариями в тело сообщения. Теперь программа меняет цвет всей строки в зависимости от содержимого 1 столбца по тем же правилам. Я правильно поняла ваш код?
Код:
Split(b, " ")(0)
-- а для чего нужен ноль?
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
' По событию "Изменение ячеек листа 1" запускается процедура.
    If Target.Column <> 1 Then Exit Sub
' Если изменились ячейки не первого столбца, то выход.
    If Target.Count > 1 Then Exit Sub
' Если выделено более 1 ячейки, то выход.
' Осталась только возможность, что произошло изменение одной ячейки в столбце 1.
    If Target = "" Then _
    ' Если в измененной ячейке пусто
        Rows(Target.Row).Select
        'Выделить весь ряд с этой ячейкой
        Selection.Interior.ColorIndex = xlNone: Exit Sub
        'Присвоить ему параметр "нет цвета" и выйти
        'Target.Interior.ColorIndex = xlNone: Exit Sub
    ' то присвоить цвету этой ячейки значение "нет цвета" и выйти
    End If
    Dim x As Range, s As String
    ' x - ячейка, s - строка
    s = Application.Trim(Replace(Split(Target, "-")(0), "KT ", ""))
    ' функцией split разрезаем изменившуюся ячейку (Target) на "до тире" и "после тире"
    ' функцией Replace в этой ячейке заменяем "КТ " на пустоту
    ' И отрезаем от вего этого пробелы и спереди и сзади.
    ' Получилось название марки в измененной ячейке
    Set x = Sheets(3).[A:A].Find(Split(s, " ")(0))
    ' Находим марку в измененной ячейке на листе 3 в столбце А
    If x Is Nothing Then Exit Sub
    ' Если ее там нет, то выход
    If x.Interior.ColorIndex <> xlNone Then _
    Rows(Target.Row).Select
' Выделяем весь ряд с обрабатываемой ячейкой
    With Selection.Interior
        .ColorIndex = x.Interior.ColorIndex
        .Pattern = xlSolid
        'Присваиваем ему цвет, взятый со страницы 3
    End With
    'Target.Interior.ColorIndex = x.Interior.ColorIndex
' Если у найденной ячейки с листа 3 есть цвет, то присваиваем его измененной ячейке

End Sub
Silent_Knauf вне форума Ответить с цитированием
Старый 18.11.2010, 11:58   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вы все правильно поняли. Но...
1. Метод Select без острой необходимости лучше не применять. Поэтому, вместо фрагмента вашего кода
Код:
Rows(Target.Row).Select
(в котором, кстати говоря есть некорректные выражения If...End If), лучше использовать
Код:
Rows(Target.Row).Interior.ColorIndex = xlNone: Exit Sub
Аналогично и вместо фрагмента
Код:
If x.Interior.ColorIndex <> xlNone Then _
    Rows(Target.Row).Select
With Selection.Interior
    .ColorIndex = x.Interior.ColorIndex
    .Pattern = xlSolid
End With
в котором, также, метод With нужно использовать ТОЛЬКО при выполнении условия, т.е. внутри If...End If, лучше использовать
Код:
If x.Interior.ColorIndex <> xlNone Then Rows(Target.Row).Interior.ColorIndex = x.Interior.ColorIndex
2. Функция Split возвращает массив, состоящий из элементов обрабатываемой строки, с количеством элементов равным количеству фрагментов, разделенных указанным разделителем. Например, применив:
Код:
a = Split("aaa-bbb-ccc-ddd", "-")
получим массив a, состоящий из 4-х элементов: "aaa", "bbb", "ccc" и "ddd". Причем, счет элементов этого массива начинается с 0. Поэтому, если нам нужен элемент "aaa", то мы можем его получить так: x = a(0). Все это можно записать одной строкой:
Код:
x = Split("aaa-bbb-ccc-ddd", "-")(0)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.11.2010, 12:51   #6
Silent_Knauf
 
Регистрация: 13.11.2010
Сообщений: 4
По умолчанию

Благодарю. А где можно прочитать про Select? Почему его лучше не использовать?
Silent_Knauf вне форума Ответить с цитированием
Старый 18.11.2010, 13:15   #7
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
А где можно прочитать про Select?
Когда-то, давненько уже, меня тоже мучал этот вопрос))
В результате, на соседнем форуме была обширная тема Эти "ненавистные" .Activate, .Select и т.п.. Рекомендую!
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
условное форматирование tanka123 Microsoft Office Excel 39 27.01.2016 11:34
Условное форматирование tmpnik Microsoft Office Excel 4 06.07.2010 06:36
Условное форматирование asas2010 Microsoft Office Excel 0 30.03.2010 16:26
Условное форматирование ZORRO2005 Microsoft Office Excel 6 29.09.2008 16:46
Условное форматирование Asu Microsoft Office Excel 2 18.10.2007 10:14