Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вывод значения соседней ячейки при особом условии + цвет - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод значения соседней ячейки при особом условии + цвет (Макросы/Sub)
Вывод значения соседней ячейки при особом условии + цвет
SSre Дата: Воскресенье, 16.05.2021, 11:23 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 2 ±
Замечаний: 0% ±

Здравствуйте!
Нужен макрос, который:
найдет все строки содержащие в столбце D определенную цифру (в примере это цифра 1 и 2),
проверит, что у найденных строк столбцы имеют дату в определенной строке (в примере это строка 1)
и в каждой ячейке, которая соответствует описанным выше условиям вывести значение (не формулу, а именно значение), соответствующее ячейке на одну ниже и правее (т.е. в ячейке F4 должно отобразиться значение G5)
если значение отобразилось, т.е. в ячейку что-то добавилось, красить ее определенным цветом. Если не добавилось, оставлять не закрашенной.

Сейчас работает через формулу =ЕСЛИ(И((ЕПУСТО(G5)=ЛОЖЬ);ЕЧИСЛО(F1);$D$4=2);G5;"") и цвет устанавливается вручную (или через условное форматирование).
Проблема в том, что формулы нужно руками копировать в нужные строки (т.е. сам определяю, в какой строке 1 или 2 и копирую туда)
Файл прикрепил с примером прикрепил.


Перевел формулу в код и сделал вывод только значениями. Но, все равно приходится указывать нужные строки руками и ячейки не перекрашиваются.
Немного скорректировал формулу, что бы в в первой проверяемой ячейке искало не "число", а просто проверяло, что она не пустая.
[vba]
Код
Sub Макрос1()
    Range("F4:U4").Select
    Range("F4:U4").FormulaR1C1 = "=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-3]C),R4C4=2),R[1]C[1],"""")"
        Range("F4:U4").Value = Range("F4:U4").Value
    Range("F3:U3").Select
    Range("F3:U3").FormulaR1C1 = "=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-2]C),R3C4=1),R[1]C[1],"""")"
        Range("F3:U3").Value = Range("F3:U3").Value
            
End Sub
[/vba]
К сообщению приложен файл: _1.xlsx(10.1 Kb) · 8585157.jpg(28.6 Kb)


Сообщение отредактировал SSre - Воскресенье, 16.05.2021, 12:18
 
Ответить
СообщениеЗдравствуйте!
Нужен макрос, который:
найдет все строки содержащие в столбце D определенную цифру (в примере это цифра 1 и 2),
проверит, что у найденных строк столбцы имеют дату в определенной строке (в примере это строка 1)
и в каждой ячейке, которая соответствует описанным выше условиям вывести значение (не формулу, а именно значение), соответствующее ячейке на одну ниже и правее (т.е. в ячейке F4 должно отобразиться значение G5)
если значение отобразилось, т.е. в ячейку что-то добавилось, красить ее определенным цветом. Если не добавилось, оставлять не закрашенной.

Сейчас работает через формулу =ЕСЛИ(И((ЕПУСТО(G5)=ЛОЖЬ);ЕЧИСЛО(F1);$D$4=2);G5;"") и цвет устанавливается вручную (или через условное форматирование).
Проблема в том, что формулы нужно руками копировать в нужные строки (т.е. сам определяю, в какой строке 1 или 2 и копирую туда)
Файл прикрепил с примером прикрепил.


Перевел формулу в код и сделал вывод только значениями. Но, все равно приходится указывать нужные строки руками и ячейки не перекрашиваются.
Немного скорректировал формулу, что бы в в первой проверяемой ячейке искало не "число", а просто проверяло, что она не пустая.
[vba]
Код
Sub Макрос1()
    Range("F4:U4").Select
    Range("F4:U4").FormulaR1C1 = "=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-3]C),R4C4=2),R[1]C[1],"""")"
        Range("F4:U4").Value = Range("F4:U4").Value
    Range("F3:U3").Select
    Range("F3:U3").FormulaR1C1 = "=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-2]C),R3C4=1),R[1]C[1],"""")"
        Range("F3:U3").Value = Range("F3:U3").Value
            
End Sub
[/vba]

Автор - SSre
Дата добавления - 16.05.2021 в 11:23
Pelena Дата: Воскресенье, 16.05.2021, 15:13 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17625
Репутация: 3925 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Здравствуйте.
Не уверена, что правильно поняла
К сообщению приложен файл: _1.xlsm(18.4 Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Не уверена, что правильно поняла

Автор - Pelena
Дата добавления - 16.05.2021 в 15:13
SSre Дата: Воскресенье, 16.05.2021, 16:19 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 2 ±
Замечаний: 0% ±

Не уверена, что правильно поняла

Да, работает отлично! спасибо:)
Немного скорректировал под себя:
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 не пустая, то выбирается значение ячейки ниже+правее и красится в желтый
[/vba]

Беда в том, что я не понимаю:
[vba]
Код
    Dim lrow&, lcol&, ir&, ic&
    lrow = Cells(Rows.Count, 4).End(xlUp).Row
    lcol = Cells(1, Columns.Count).End(xlToLeft).Column
[/vba]
[vba]
Код

            Next ic
        End If
    Next ir
[/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 не пустая, то выбирается значение ячейки ниже+правее и красится в желтый
[/vba]

Беда в том, что я не понимаю:
[vba]
Код
    Dim lrow&, lcol&, ir&, ic&
    lrow = Cells(Rows.Count, 4).End(xlUp).Row
    lcol = Cells(1, Columns.Count).End(xlToLeft).Column
[/vba]
[vba]
Код

            Next ic
        End If
    Next ir
[/vba]

Автор - SSre
Дата добавления - 16.05.2021 в 16:19
Pelena Дата: Воскресенье, 16.05.2021, 16:25 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 17625
Репутация: 3925 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Dim lrow& - это то же самое, что Dim lrow as Long - объявление переменных целого типа
а дальше просто формулы для определения последней заполненной строки в четвёртом столбце и последнего заполненного столбца в первой строке


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеDim lrow& - это то же самое, что Dim lrow as Long - объявление переменных целого типа
а дальше просто формулы для определения последней заполненной строки в четвёртом столбце и последнего заполненного столбца в первой строке

Автор - Pelena
Дата добавления - 16.05.2021 в 16:25
SSre Дата: Воскресенье, 16.05.2021, 16:33 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 2 ±
Замечаний: 0% ±


Огромное Вам спасибо!
 
Ответить
Сообщение
Огромное Вам спасибо!

Автор - SSre
Дата добавления - 16.05.2021 в 16:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод значения соседней ячейки при особом условии + цвет (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования Jobsora jooble
© 2010-2021 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!