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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2012, 00:40   #1
Piano_Dreamer
Пользователь
 
Регистрация: 25.08.2012
Сообщений: 11
Счастье Окраска строк по условию (нестандартная задача)

Доброго времени суток!

Облазил интернет в поисках нужного мне решения, но нужного так и не нашел или сейчас не соображаю как это сделать. Образовываться VBA начал сравнительно недавно, так что пока сам свою проблему решить не могу...
Помогите пожалуйста написать код для такого примера:

Есть таблица-отчет по отгрузке продукции такого плана:

Заказчик ! Объект ! № ! Дата ! Продукция! Кол-во ! Отгружено ! Осталось

А вниз уже идут записи о заявках и отгрузке по заказам. Так вот, начиная со следующей строки необходимо чтобы записи в которых столбцы 1, 2, 3, 4 одинаковы красились попеременно то в белый (без заливки), то в серый цвет, а сверху и снизу обрамлялись линией определенного типа (скажем если по одному заказу есть несколько позиций, то в середине линии между строками - тонкие, а сам контур (сверху и снизу), окружающий позиции - толстый).
Примечание: об одном и том же заказе свидетельствует тождество данных в строках столбцов 1, 2, 3, 4 текущей и следующей записи.

Условное форматирование - не подходит, потому что:
1. Я получил требуемый результат, воспользовавшись вспомагательным столбцом и формулой, но формулу необходимо постоянно размножать, а при добавлении новых строк - правила условного форматирования дублируються, разбиваются, сьезжают, короче - не то!
2. Пользуясь тем же самым условным форматированием при отборе записей фильтром, форматирование может накладываться - может идти две белых полоски из разных заказов одна за одной и пр. (это случается потому, что условное форматирование берет форматирует как скрытые, так и видимые ячейки);
3. Желательно написать макрос, для того, чтобы он уже после фильтрации по определенным критериям красил или не красил записи отвечающие нужному условию;
4. Если можно - нужно чтобы макрос обрабатывал некоторый специфический диапазон (чтобы не проверял всю таблицу, а лишь количество видимых записей) - если честно не знаю как задать подсчет значений, которые были отображены после применения фильтра), ну как бы, чтобы экономить время и память.

Спасибо за внимание

Последний раз редактировалось Piano_Dreamer; 19.09.2012 в 00:47.
Piano_Dreamer вне форума Ответить с цитированием
Старый 19.09.2012, 01:22   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Есть таблица-отчет по отгрузке продукции такого плана...
У кого есть? у нас - нет...
Прикрепите к сообщению файл Excel в архиве, для начала

Цитата:
Условное форматирование - не подходит, потому что:
1. Я получил требуемый результат, воспользовавшись вспомагательным столбцом и формулой, но формулу необходимо постоянно размножать, а при добавлении новых строк - правила условного форматирования дублируються, разбиваются, сьезжают, короче - не то!
может, вы как-то не так писали формулы? )

Цитата:
2. Пользуясь тем же самым условным форматированием при отборе записей фильтром, форматирование может накладываться - может идти две белых полоски из разных заказов одна за одной и пр. (это случается потому, что условное форматирование берет форматирует как скрытые, так и видимые ячейки);
После применения фильтра строки должны перекрашиваться?
EducatedFool вне форума Ответить с цитированием
Старый 20.09.2012, 01:11   #3
Piano_Dreamer
Пользователь
 
Регистрация: 25.08.2012
Сообщений: 11
По умолчанию Таблица

Все таки почти добился я желаемого результата, но к сожалению, при использовании инструмента "Условное форматирование" в одном случае при вставке новых строк, инструмент делит правила, а в другом все нормально.
В общем, подробнее расписано все в подписях в приложенном файле. Спасибо за уделенное время, всего доброго!

P.S.: код прописанный в файле еще находиться в доработке и основан на только недавно полученных знаниях из интернета и является моими первыми попытками в написании процедур VBA... Так что, если что, буду рад конструктивной критике! =)
Вложения
Тип файла: rar ФЕМ.rar (64.5 Кб, 30 просмотров)

Последний раз редактировалось Piano_Dreamer; 20.09.2012 в 01:16.
Piano_Dreamer вне форума Ответить с цитированием
Старый 20.09.2012, 01:52   #4
nolte
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 18
По умолчанию

Ух не уследил за мыслею
nolte вне форума Ответить с цитированием
Старый 26.09.2012, 22:40   #5
Piano_Dreamer
Пользователь
 
Регистрация: 25.08.2012
Сообщений: 11
По умолчанию

Мне нужно покрасить строки по условию совпадения некоторых клеток в строке текущей и следующей записи. При чем если следующая запись по нескольким значением клеток совпадает с текущей то их окрасить в один цвет (скажем серый) и сделать обрамление совпадающих записей толстой рамкой, а если следующая запись отличается - то она должна быть уже белого цвета (если есть далее записи с одинаковыми клетками то и их в тот же цвет, если нету - то обратно в серый).

Короче как это сделано в файле, только чтобы при скрытии или сортировке для поочередно идущих строк с совпадающими клетками обрамить их толстой рамкой (только горизонтальные) а в середине более тонкие линии (только горизонтальные) и заливку сделать одного цвета (серого), а если след. запись отличается теми же клетками (но не всеми, а только первыми несколькими), рамки так же само, только окрасить в белый к примеру (или оставить без заливки).

В общем, чтобы заливка шла попеременно если первые несколько клеток текущей записи не совпадают со следующей, как бы я их не сортировал и не скрывал, чтоб следующей считалась строка, которая видима и идет сразу под текущей. Внутри окрашеного диапазона сделать рамку из тонких горизонтальных линий, а снаружи - из толстых.
Преодолеваю трудности в пользовании, использую условное форматирование раскрашивая записи по значениям вспомогательного столбца, но когда скрываю или сортирую записи - их красит не всегда верно. Так я пока и не могу найти решение...

Последний раз редактировалось Piano_Dreamer; 26.09.2012 в 22:46.
Piano_Dreamer вне форума Ответить с цитированием
Старый 27.09.2012, 01:04   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Не люблю я с цветами и сетками играться.
Пример покраски работает
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        Dim X, lLastRow, S1 As String, S2 As String
        lLastRow = Me.Cells(Me.Rows.Count, 1).End(xlUp).Row
        With Me.Range("A5:I" & lLastRow).Interior
                .Pattern = xlNone
                .TintAndShade = 0
                .PatternTintAndShade = 0
        End With
        X = Me.Range(Me.Cells(1, 1), Me.Cells(lLastRow, 4))
        For n = 5 To UBound(X) - 1
                S1 = X(n, 1) & X(n, 2) & X(n, 3) & X(n, 4)
                S2 = X(n + 1, 1) & X(n + 1, 2) & X(n + 1, 3) & X(n + 1, 4)
                If S1 <> "" And S1 = S2 Then
                        Me.Range("A" & n & ":I" & n + 1).Interior.TintAndShade = -0.16
                End If
        Next
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление строк по условию. Shkoda Microsoft Office Excel 1 02.12.2011 19:28
Нестандартная задача(atantion please) sem_1989 HTML и CSS 3 12.07.2011 21:11
нестандартная задача в паскале vadek13 Помощь студентам 5 22.05.2009 22:49
Нестандартная задача с цветами ячеек ДБГрид! Abbatik БД в Delphi 2 02.02.2008 18:02