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

Вход

Регистрация

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

 

= Мир MS Excel/Использование условия if, для закрашенной ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Использование условия if, для закрашенной ячейки
KaminoontY Дата: Понедельник, 08.10.2018, 13:31 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте.
Я новичок как в использовании VBA, так и на самом форме. Извиняюсь, если где то выразился некорректно.
Часть задачи, которую я пытаюсь решить заключается в следующих пунктах:
1) Пройтись по строкам, которые заполненные данными
2) При помощи условия if определить закрашена ли ячейка в желтый или синий цвета
(Диапазон ячеек в строке закрашивается
в желтый согласно номеру введённой строки, при помощи
Код
b = InputBox("Введите номер строки")

в синий, согласна некому условию. В совокупности желтая строка с набором синих строк является отобранным блоком данных (рис .1.).

3) При определении незакрашенной строки, начать выполнения макроса с отбора следующего блока данных, т.е. закрашивания строки в желтый и подбору к ней строк в соответствии с неким условием попутно закрашивая их в синий, но при этом избегая уже использованных данных.
4) Отобранный блок данных копируется на отдельную страницу, в то время как поиск блоком данных продолжается.
Конкретно меня интересует, можно ли при помощи условия if отследить ячейки по цвету, т.е. пункт 2.


Благодарю за информацию, также прилагаю пример данной задачи, где мне необходимо добавить условие из пункта 2.
[vba]
Код
Sub Ф1()

Dim b As Long, d As Long, _
N_nd As Long, _
N_ct1 As Long, N_ct2 As Long, N_ct3 As Long, N_ct4 As Long, _
Tg_ct1 As Long, Tg_ct2 As Long, Tg_ct3 As Long, Tg_ct4 As Long, _
Tvh_OK As Long, Pza_KVD As Long, _
LastRow2 As Long, LastRow1 As Long, f As Long, _
N_vd As Long

'строки'
'1'
b = InputBox("Введите номер строки")
'2'
d = 8

'определение последней заполненной ячеки'

f = Sheets("Ф1").UsedRange.Row + Sheets("Ф1").UsedRange.Rows.Count - 1

LastRow1 = Sheets("1").Cells(3, 3).Row + Sheets("1").UsedRange.Rows.Count - 1

Range(Cells(b, 1), Cells(b, 17)).Interior.Color = RGB(246, 249, 135)

Sheets("Ф1").Range(Cells(b, 1), Cells(b, 17)).Copy Sheets("1").Cells(LastRow1, 1)

For x% = 1 To f

If Not b = d Then

N_nd = Abs(Cells(b, 3) - Cells(d, 3))

N_vd = Abs(Cells(b, 4) - Cells(d, 4))

N_ct1 = Abs(Cells(b, 5) - Cells(d, 5))
N_ct2 = Abs(Cells(b, 6) - Cells(d, 6))

N_ct3 = Abs(Cells(b, 5) - Cells(b, 6))

N_ct4 = Abs(Cells(d, 5) - Cells(d, 6))

Tg_ct1 = Abs(Cells(b, 9) - Cells(d, 9))
Tg_ct2 = Abs(Cells(b, 15) - Cells(d, 15))

Tg_ct3 = Abs(Cells(b, 9) - Cells(b, 15))

Tg_ct4 = Abs(Cells(d, 9) - Cells(d, 15))

Tvh_OK = Abs(Cells(b, 10) - Cells(d, 10))

Pza_KVD = Abs(Cells(b, 13) - Cells(d, 13))

LastRow2 = Sheets("1").Cells(3, 3).Row + Sheets("1").UsedRange.Rows.Count - 1

If N_nd <= Cells(5, 36) _
And N_ct1 <= Cells(6, 36) _
And N_ct2 <= Cells(6, 36) _
And N_ct3 <= Cells(6, 36) _
And N_ct4 <= Cells(6, 36) _
And Tg_ct1 <= Cells(7, 36) _
And Tg_ct2 <= Cells(7, 36) _
And Tg_ct3 <= Cells(7, 36) _
And Tg_ct4 <= Cells(7, 36) _
And Tvh_OK <= Cells(8, 36) _
And Pza_KVD <= Cells(9, 36) _
And N_vd <= Cells(10, 36) Then

Range(Cells(b, 1), Cells(b, 17)).Interior.Color = RGB(246, 249, 135)

Range(Cells(d, 1), Cells(d, 17)).Interior.Color = RGB(100, 150, 200)

Sheets("Ф1").Range(Cells(d, 1), Cells(d, 17)).Copy Sheets("1").Cells(LastRow2, 1)

   
Else

End If

d = d + 1

Else

d = d + 1

End If

LastRow2 = LastRow2 + 1

Next x

LastRow1 = LastRow1 + 1

b = b + 1

End Sub
[/vba]
К сообщению приложен файл: 1072154.xlsb (7.5 Kb)


Сообщение отредактировал KaminoontY - Понедельник, 08.10.2018, 13:33
 
Ответить
СообщениеЗдравствуйте.
Я новичок как в использовании VBA, так и на самом форме. Извиняюсь, если где то выразился некорректно.
Часть задачи, которую я пытаюсь решить заключается в следующих пунктах:
1) Пройтись по строкам, которые заполненные данными
2) При помощи условия if определить закрашена ли ячейка в желтый или синий цвета
(Диапазон ячеек в строке закрашивается
в желтый согласно номеру введённой строки, при помощи
Код
b = InputBox("Введите номер строки")

в синий, согласна некому условию. В совокупности желтая строка с набором синих строк является отобранным блоком данных (рис .1.).

3) При определении незакрашенной строки, начать выполнения макроса с отбора следующего блока данных, т.е. закрашивания строки в желтый и подбору к ней строк в соответствии с неким условием попутно закрашивая их в синий, но при этом избегая уже использованных данных.
4) Отобранный блок данных копируется на отдельную страницу, в то время как поиск блоком данных продолжается.
Конкретно меня интересует, можно ли при помощи условия if отследить ячейки по цвету, т.е. пункт 2.


Благодарю за информацию, также прилагаю пример данной задачи, где мне необходимо добавить условие из пункта 2.
[vba]
Код
Sub Ф1()

Dim b As Long, d As Long, _
N_nd As Long, _
N_ct1 As Long, N_ct2 As Long, N_ct3 As Long, N_ct4 As Long, _
Tg_ct1 As Long, Tg_ct2 As Long, Tg_ct3 As Long, Tg_ct4 As Long, _
Tvh_OK As Long, Pza_KVD As Long, _
LastRow2 As Long, LastRow1 As Long, f As Long, _
N_vd As Long

'строки'
'1'
b = InputBox("Введите номер строки")
'2'
d = 8

'определение последней заполненной ячеки'

f = Sheets("Ф1").UsedRange.Row + Sheets("Ф1").UsedRange.Rows.Count - 1

LastRow1 = Sheets("1").Cells(3, 3).Row + Sheets("1").UsedRange.Rows.Count - 1

Range(Cells(b, 1), Cells(b, 17)).Interior.Color = RGB(246, 249, 135)

Sheets("Ф1").Range(Cells(b, 1), Cells(b, 17)).Copy Sheets("1").Cells(LastRow1, 1)

For x% = 1 To f

If Not b = d Then

N_nd = Abs(Cells(b, 3) - Cells(d, 3))

N_vd = Abs(Cells(b, 4) - Cells(d, 4))

N_ct1 = Abs(Cells(b, 5) - Cells(d, 5))
N_ct2 = Abs(Cells(b, 6) - Cells(d, 6))

N_ct3 = Abs(Cells(b, 5) - Cells(b, 6))

N_ct4 = Abs(Cells(d, 5) - Cells(d, 6))

Tg_ct1 = Abs(Cells(b, 9) - Cells(d, 9))
Tg_ct2 = Abs(Cells(b, 15) - Cells(d, 15))

Tg_ct3 = Abs(Cells(b, 9) - Cells(b, 15))

Tg_ct4 = Abs(Cells(d, 9) - Cells(d, 15))

Tvh_OK = Abs(Cells(b, 10) - Cells(d, 10))

Pza_KVD = Abs(Cells(b, 13) - Cells(d, 13))

LastRow2 = Sheets("1").Cells(3, 3).Row + Sheets("1").UsedRange.Rows.Count - 1

If N_nd <= Cells(5, 36) _
And N_ct1 <= Cells(6, 36) _
And N_ct2 <= Cells(6, 36) _
And N_ct3 <= Cells(6, 36) _
And N_ct4 <= Cells(6, 36) _
And Tg_ct1 <= Cells(7, 36) _
And Tg_ct2 <= Cells(7, 36) _
And Tg_ct3 <= Cells(7, 36) _
And Tg_ct4 <= Cells(7, 36) _
And Tvh_OK <= Cells(8, 36) _
And Pza_KVD <= Cells(9, 36) _
And N_vd <= Cells(10, 36) Then

Range(Cells(b, 1), Cells(b, 17)).Interior.Color = RGB(246, 249, 135)

Range(Cells(d, 1), Cells(d, 17)).Interior.Color = RGB(100, 150, 200)

Sheets("Ф1").Range(Cells(d, 1), Cells(d, 17)).Copy Sheets("1").Cells(LastRow2, 1)

   
Else

End If

d = d + 1

Else

d = d + 1

End If

LastRow2 = LastRow2 + 1

Next x

LastRow1 = LastRow1 + 1

b = b + 1

End Sub
[/vba]

Автор - KaminoontY
Дата добавления - 08.10.2018 в 13:31
_Boroda_ Дата: Понедельник, 08.10.2018, 13:41 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16681
Репутация: 6483 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
можно ли при помощи условия if отследить ячейки по цвету

Вы про вот так?
[vba]
Код
If Cells(1, 1).Interior.Color = 65535 Then
[/vba]

Вместо Cells(1, 1) - Ваша ячейка


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
можно ли при помощи условия if отследить ячейки по цвету

Вы про вот так?
[vba]
Код
If Cells(1, 1).Interior.Color = 65535 Then
[/vba]

Вместо Cells(1, 1) - Ваша ячейка

Автор - _Boroda_
Дата добавления - 08.10.2018 в 13:41
KaminoontY Дата: Понедельник, 08.10.2018, 18:46 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, да скорее всего так, буду пробовать. Спасибо.
 
Ответить
Сообщение_Boroda_, да скорее всего так, буду пробовать. Спасибо.

Автор - KaminoontY
Дата добавления - 08.10.2018 в 18:46
KaminoontY Дата: Понедельник, 08.10.2018, 19:19 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, Данный вариант не подошел, так как складывается впечатление, что [vba]
Код
If Cells(1, 1).Interior.Color = 65535 Then
[/vba] не проверяет условие закрашена ли ячейка в цвет "65535". Попробовал подставить в свой код, однако все ячейки просто закрашиваются в желтый, не зависимо от того были ли они закрашены ранее.
[vba]
Код
Sub Ф1()

Dim b As Long, d As Long, _
N_nd As Long, _
N_ct1 As Long, N_ct2 As Long, N_ct3 As Long, N_ct4 As Long, _
Tg_ct1 As Long, Tg_ct2 As Long, Tg_ct3 As Long, Tg_ct4 As Long, _
Tvh_OK As Long, Pza_KVD As Long, _
LastRow2 As Long, LastRow1 As Long, f As Long, _
N_vd As Long

'строки'
'1'
b = InputBox("Введите номер строки")
'2'
d = 8

'смена цвета режимов от 1-56'

'определение последней заполненной ячеки'

f = Sheets("Ф1").UsedRange.Row + Sheets("Ф1").UsedRange.Rows.Count - 1

LastRow1 = Sheets("1").Cells(3, 3).Row + Sheets("1").UsedRange.Rows.Count - 1

For n% = 1 To f

If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then

Range(Cells(b, 1), Cells(b, 17)).Interior.Color = 65535

Sheets("Ф1").Range(Cells(b, 1), Cells(b, 17)).Copy Sheets("1").Cells(LastRow1, 1)

For x% = 1 To f

If Not Cells(d, 1).Interior.Color = 60000 Or Cells(d, 1).Interior.Color = 6553 Then

If Not b = d Then

N_nd = Abs(Cells(b, 3) - Cells(d, 3))

N_vd = Abs(Cells(b, 4) - Cells(d, 4))

N_ct1 = Abs(Cells(b, 5) - Cells(d, 5))
N_ct2 = Abs(Cells(b, 6) - Cells(d, 6))

N_ct3 = Abs(Cells(b, 5) - Cells(b, 6))

N_ct4 = Abs(Cells(d, 5) - Cells(d, 6))

Tg_ct1 = Abs(Cells(b, 9) - Cells(d, 9))
Tg_ct2 = Abs(Cells(b, 15) - Cells(d, 15))

Tg_ct3 = Abs(Cells(b, 9) - Cells(b, 15))

Tg_ct4 = Abs(Cells(d, 9) - Cells(d, 15))

Tvh_OK = Abs(Cells(b, 10) - Cells(d, 10))

Pza_KVD = Abs(Cells(b, 13) - Cells(d, 13))

LastRow2 = Sheets("1").Cells(3, 3).Row + Sheets("1").UsedRange.Rows.Count - 1

If N_nd <= Cells(5, 36) _
And N_ct1 <= Cells(6, 36) _
And N_ct2 <= Cells(6, 36) _
And N_ct3 <= Cells(6, 36) _
And N_ct4 <= Cells(6, 36) _
And Tg_ct1 <= Cells(7, 36) _
And Tg_ct2 <= Cells(7, 36) _
And Tg_ct3 <= Cells(7, 36) _
And Tg_ct4 <= Cells(7, 36) _
And Tvh_OK <= Cells(8, 36) _
And Pza_KVD <= Cells(9, 36) _
And N_vd <= Cells(10, 36) Then

Range(Cells(d, 1), Cells(d, 17)).Interior.Color = 60000

Sheets("Ф1").Range(Cells(d, 1), Cells(d, 17)).Copy Sheets("1").Cells(LastRow2, 1)

   
Else
End If

Else
End If

Else
End If
d = d + 1
LastRow2 = LastRow2 + 1

Next x

Else
End If

LastRow1 = LastRow1 + 1

b = b + 1

Next n

End Sub
[/vba]
Существует ли как нибудь другой способ отбросить использованные данные, чтобы продолжит отбор из оставшихся?


Сообщение отредактировал KaminoontY - Понедельник, 08.10.2018, 19:22
 
Ответить
Сообщение_Boroda_, Данный вариант не подошел, так как складывается впечатление, что [vba]
Код
If Cells(1, 1).Interior.Color = 65535 Then
[/vba] не проверяет условие закрашена ли ячейка в цвет "65535". Попробовал подставить в свой код, однако все ячейки просто закрашиваются в желтый, не зависимо от того были ли они закрашены ранее.
[vba]
Код
Sub Ф1()

Dim b As Long, d As Long, _
N_nd As Long, _
N_ct1 As Long, N_ct2 As Long, N_ct3 As Long, N_ct4 As Long, _
Tg_ct1 As Long, Tg_ct2 As Long, Tg_ct3 As Long, Tg_ct4 As Long, _
Tvh_OK As Long, Pza_KVD As Long, _
LastRow2 As Long, LastRow1 As Long, f As Long, _
N_vd As Long

'строки'
'1'
b = InputBox("Введите номер строки")
'2'
d = 8

'смена цвета режимов от 1-56'

'определение последней заполненной ячеки'

f = Sheets("Ф1").UsedRange.Row + Sheets("Ф1").UsedRange.Rows.Count - 1

LastRow1 = Sheets("1").Cells(3, 3).Row + Sheets("1").UsedRange.Rows.Count - 1

For n% = 1 To f

If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then

Range(Cells(b, 1), Cells(b, 17)).Interior.Color = 65535

Sheets("Ф1").Range(Cells(b, 1), Cells(b, 17)).Copy Sheets("1").Cells(LastRow1, 1)

For x% = 1 To f

If Not Cells(d, 1).Interior.Color = 60000 Or Cells(d, 1).Interior.Color = 6553 Then

If Not b = d Then

N_nd = Abs(Cells(b, 3) - Cells(d, 3))

N_vd = Abs(Cells(b, 4) - Cells(d, 4))

N_ct1 = Abs(Cells(b, 5) - Cells(d, 5))
N_ct2 = Abs(Cells(b, 6) - Cells(d, 6))

N_ct3 = Abs(Cells(b, 5) - Cells(b, 6))

N_ct4 = Abs(Cells(d, 5) - Cells(d, 6))

Tg_ct1 = Abs(Cells(b, 9) - Cells(d, 9))
Tg_ct2 = Abs(Cells(b, 15) - Cells(d, 15))

Tg_ct3 = Abs(Cells(b, 9) - Cells(b, 15))

Tg_ct4 = Abs(Cells(d, 9) - Cells(d, 15))

Tvh_OK = Abs(Cells(b, 10) - Cells(d, 10))

Pza_KVD = Abs(Cells(b, 13) - Cells(d, 13))

LastRow2 = Sheets("1").Cells(3, 3).Row + Sheets("1").UsedRange.Rows.Count - 1

If N_nd <= Cells(5, 36) _
And N_ct1 <= Cells(6, 36) _
And N_ct2 <= Cells(6, 36) _
And N_ct3 <= Cells(6, 36) _
And N_ct4 <= Cells(6, 36) _
And Tg_ct1 <= Cells(7, 36) _
And Tg_ct2 <= Cells(7, 36) _
And Tg_ct3 <= Cells(7, 36) _
And Tg_ct4 <= Cells(7, 36) _
And Tvh_OK <= Cells(8, 36) _
And Pza_KVD <= Cells(9, 36) _
And N_vd <= Cells(10, 36) Then

Range(Cells(d, 1), Cells(d, 17)).Interior.Color = 60000

Sheets("Ф1").Range(Cells(d, 1), Cells(d, 17)).Copy Sheets("1").Cells(LastRow2, 1)

   
Else
End If

Else
End If

Else
End If
d = d + 1
LastRow2 = LastRow2 + 1

Next x

Else
End If

LastRow1 = LastRow1 + 1

b = b + 1

Next n

End Sub
[/vba]
Существует ли как нибудь другой способ отбросить использованные данные, чтобы продолжит отбор из оставшихся?

Автор - KaminoontY
Дата добавления - 08.10.2018 в 19:19
_Boroda_ Дата: Понедельник, 08.10.2018, 19:44 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16681
Репутация: 6483 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так у Вас же у самого написано
[vba]
Код
If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then
            Range(Cells(b, 1), Cells(b, 17)).Interior.Color = 65535
[/vba]
- если ячейка не желтая и не 60000 (заметьте, у синего код не 60000, а 16777215), то крась все в желтый. Вот он и красит

* Добавлено
Абсолютно согласен с двумя последующими ораторами


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Понедельник, 08.10.2018, 20:30
 
Ответить
СообщениеТак у Вас же у самого написано
[vba]
Код
If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then
            Range(Cells(b, 1), Cells(b, 17)).Interior.Color = 65535
[/vba]
- если ячейка не желтая и не 60000 (заметьте, у синего код не 60000, а 16777215), то крась все в желтый. Вот он и красит

* Добавлено
Абсолютно согласен с двумя последующими ораторами

Автор - _Boroda_
Дата добавления - 08.10.2018 в 19:44
Апострофф Дата: Понедельник, 08.10.2018, 20:20 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 457
Репутация: 126 ±
Замечаний: 0% ±

Excel 1997
- если ячейка не желтая и не 60000
интуитивно (и по опыту) в примере
[vba]
Код
If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then
[/vba]
написано:
Цитата
если ячейка не желтая или равна 60000 то
 
Ответить
Сообщение
- если ячейка не желтая и не 60000
интуитивно (и по опыту) в примере
[vba]
Код
If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then
[/vba]
написано:
Цитата
если ячейка не желтая или равна 60000 то

Автор - Апострофф
Дата добавления - 08.10.2018 в 20:20
RAN Дата: Понедельник, 08.10.2018, 20:24 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then

Ярко жёлто - синий пример, как делать НЕ надо.
Если ячейка не желтая, то какая разница, или она зеленая, или она фиолетовая (в крапинку)?
Условие уже выполнено.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then

Ярко жёлто - синий пример, как делать НЕ надо.
Если ячейка не желтая, то какая разница, или она зеленая, или она фиолетовая (в крапинку)?
Условие уже выполнено.

Автор - RAN
Дата добавления - 08.10.2018 в 20:24
  • Страница 1 из 1
  • 1
Поиск:

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