Здравствуйте! Нужен макрос, который: найдет все строки содержащие в столбце D определенную цифру (в примере это цифра 1 и 2), проверит, что у найденных строк столбцы имеют дату в определенной строке (в примере это строка 1) и в каждой ячейке, которая соответствует описанным выше условиям вывести значение (не формулу, а именно значение), соответствующее ячейке на одну ниже и правее (т.е. в ячейке F4 должно отобразиться значение G5) если значение отобразилось, т.е. в ячейку что-то добавилось, красить ее определенным цветом. Если не добавилось, оставлять не закрашенной.
Сейчас работает через формулу =ЕСЛИ(И((ЕПУСТО(G5)=ЛОЖЬ);ЕЧИСЛО(F1);$D$4=2);G5;"") и цвет устанавливается вручную (или через условное форматирование). Проблема в том, что формулы нужно руками копировать в нужные строки (т.е. сам определяю, в какой строке 1 или 2 и копирую туда) Файл прикрепил с примером прикрепил.
Перевел формулу в код и сделал вывод только значениями. Но, все равно приходится указывать нужные строки руками и ячейки не перекрашиваются. Немного скорректировал формулу, что бы в в первой проверяемой ячейке искало не "число", а просто проверяло, что она не пустая. [vba]
Здравствуйте! Нужен макрос, который: найдет все строки содержащие в столбце D определенную цифру (в примере это цифра 1 и 2), проверит, что у найденных строк столбцы имеют дату в определенной строке (в примере это строка 1) и в каждой ячейке, которая соответствует описанным выше условиям вывести значение (не формулу, а именно значение), соответствующее ячейке на одну ниже и правее (т.е. в ячейке F4 должно отобразиться значение G5) если значение отобразилось, т.е. в ячейку что-то добавилось, красить ее определенным цветом. Если не добавилось, оставлять не закрашенной.
Сейчас работает через формулу =ЕСЛИ(И((ЕПУСТО(G5)=ЛОЖЬ);ЕЧИСЛО(F1);$D$4=2);G5;"") и цвет устанавливается вручную (или через условное форматирование). Проблема в том, что формулы нужно руками копировать в нужные строки (т.е. сам определяю, в какой строке 1 или 2 и копирую туда) Файл прикрепил с примером прикрепил.
Перевел формулу в код и сделал вывод только значениями. Но, все равно приходится указывать нужные строки руками и ячейки не перекрашиваются. Немного скорректировал формулу, что бы в в первой проверяемой ячейке искало не "число", а просто проверяло, что она не пустая. [vba]
Да, работает отлично! спасибо:) Немного скорректировал под себя: 1) убрал повторный запуск (по нажатию на кнопку второй раз) для расчета для условия "ячейка в столбце D=1". Не очень удобно нажимать второй раз, лучше добавлю в отдельный макрос и создам цепочку из макросов. 2) сделал удаление данных из ячейки и ее обесцвечивание, если ячейка ниже и правее пустая. Тот код, который получился у меня после упрощения [vba]
Код
Sub wwww() Dim lrow&, lcol&, ir&, ic& lrow = Cells(Rows.Count, 4).End(xlUp).Row lcol = Cells(1, Columns.Count).End(xlToLeft).Column For ir = 1 To lrow If Cells(ir, 4) = 2 Then For ic = 6 To lcol If Cells(1, ic) <> "" And Cells(ir + 1, ic + 1) = "" Then Cells(ir, ic) = "": Cells(ir, ic).Interior.Color = xlNone If Cells(1, ic) <> "" And Cells(ir + 1, ic + 1) <> "" Then Cells(ir, ic) = Cells(ir + 1, ic + 1): Cells(ir, ic).Interior.Color = vbYellow Next ic End If Next ir End Sub
[/vba] Остался один вопрос уровня "полный новичок": как понять, что делает макрос (т.е. как это работает)?
Надеюсь, что я правильно понимаю: [vba]
Код
For ir = 1 To lrow 'задаем параметру ir все значения от 1 до последней строки
[/vba] [vba]
Код
If Cells(ir, 4) = 2 Then 'если ячейка по строке ir и столбцу D = 2, тогда выполняем следующий пункт
[/vba] [vba]
Код
For ic = 6 To lcol 'задаем параметру ic все значения от столбца F до последнего столбца
[/vba] [vba]
Код
If Cells(1, ic) <> "" And Cells(ir + 1, ic + 1) <> "" Then Cells(ir, ic) = Cells(ir + 1, ic + 1): Cells(ir, ic).Interior.Color = vbYellow 'если ячейка по строке 1 и столбцу сформированному параметром ic не пустая И ячейка ниже+правее от сформированной параметрами ir ic не пустая, то выбирается значение ячейки ниже+правее и красится в желтый
Да, работает отлично! спасибо:) Немного скорректировал под себя: 1) убрал повторный запуск (по нажатию на кнопку второй раз) для расчета для условия "ячейка в столбце D=1". Не очень удобно нажимать второй раз, лучше добавлю в отдельный макрос и создам цепочку из макросов. 2) сделал удаление данных из ячейки и ее обесцвечивание, если ячейка ниже и правее пустая. Тот код, который получился у меня после упрощения [vba]
Код
Sub wwww() Dim lrow&, lcol&, ir&, ic& lrow = Cells(Rows.Count, 4).End(xlUp).Row lcol = Cells(1, Columns.Count).End(xlToLeft).Column For ir = 1 To lrow If Cells(ir, 4) = 2 Then For ic = 6 To lcol If Cells(1, ic) <> "" And Cells(ir + 1, ic + 1) = "" Then Cells(ir, ic) = "": Cells(ir, ic).Interior.Color = xlNone If Cells(1, ic) <> "" And Cells(ir + 1, ic + 1) <> "" Then Cells(ir, ic) = Cells(ir + 1, ic + 1): Cells(ir, ic).Interior.Color = vbYellow Next ic End If Next ir End Sub
[/vba] Остался один вопрос уровня "полный новичок": как понять, что делает макрос (т.е. как это работает)?
Надеюсь, что я правильно понимаю: [vba]
Код
For ir = 1 To lrow 'задаем параметру ir все значения от 1 до последней строки
[/vba] [vba]
Код
If Cells(ir, 4) = 2 Then 'если ячейка по строке ir и столбцу D = 2, тогда выполняем следующий пункт
[/vba] [vba]
Код
For ic = 6 To lcol 'задаем параметру ic все значения от столбца F до последнего столбца
[/vba] [vba]
Код
If Cells(1, ic) <> "" And Cells(ir + 1, ic + 1) <> "" Then Cells(ir, ic) = Cells(ir + 1, ic + 1): Cells(ir, ic).Interior.Color = vbYellow 'если ячейка по строке 1 и столбцу сформированному параметром ic не пустая И ячейка ниже+правее от сформированной параметрами ir ic не пустая, то выбирается значение ячейки ниже+правее и красится в желтый
Dim lrow& - это то же самое, что Dim lrow as Long - объявление переменных целого типа а дальше просто формулы для определения последней заполненной строки в четвёртом столбце и последнего заполненного столбца в первой строке
Dim lrow& - это то же самое, что Dim lrow as Long - объявление переменных целого типа а дальше просто формулы для определения последней заполненной строки в четвёртом столбце и последнего заполненного столбца в первой строкеPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816