Добрый день! Решаю задачу с условием: при выделении определенным цветом ячейки диапазона ХХ:ХХ листа "источник" данные из ячейки должны отобразиться на соответствующем листе каб№ХХ аналогичного диапазона, без заливки, только содержимое ячейки. Пример прилагается. Заливка из основной палитры цветов, оттенки не используются. Идея использовать макрос пока не дошла до завершения, пока только идея:) Прошу подсказок т.к. не знаток в этой области, спасибо! Работать будет в 10й версии пакета офис. Пример версии 2003
Добрый день! Решаю задачу с условием: при выделении определенным цветом ячейки диапазона ХХ:ХХ листа "источник" данные из ячейки должны отобразиться на соответствующем листе каб№ХХ аналогичного диапазона, без заливки, только содержимое ячейки. Пример прилагается. Заливка из основной палитры цветов, оттенки не используются. Идея использовать макрос пока не дошла до завершения, пока только идея:) Прошу подсказок т.к. не знаток в этой области, спасибо! Работать будет в 10й версии пакета офис. Пример версии 2003NeWru
Добрый день. Для файла-примера вот такой код. [vba]
Код
Sub qqq() With Sheets("источник") For c = 2 To 7 For r = 2 To 4
If .Cells(r, c).Interior.Color = 10498160 Then 'фиол каб1 Sheets("КАБ№1").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color = 15773696 Then 'голубой каб2 Sheets("КАБ№2").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color = 65535 Then 'желтый каб3 Sheets("КАБ№3").Cells(r, c).Value = .Cells(r, c).Value End If Next r Next c End With End Sub
[/vba]
Добрый день. Для файла-примера вот такой код. [vba]
Код
Sub qqq() With Sheets("источник") For c = 2 To 7 For r = 2 To 4
If .Cells(r, c).Interior.Color = 10498160 Then 'фиол каб1 Sheets("КАБ№1").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color = 15773696 Then 'голубой каб2 Sheets("КАБ№2").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color = 65535 Then 'желтый каб3 Sheets("КАБ№3").Cells(r, c).Value = .Cells(r, c).Value End If Next r Next c End With End Sub
Kamikadze_N, выделите в источнике С3 желтым, нажмите добавить данные, затем выделите фиолетовым, добавить данные, затем снова желтым, добавить данные. Итог: в каб1 (фиолет) С3 не исчезнет. аналогично "запоминаются" старые данные в других каб. Приходится перед каждым редактированием источника "чистить" каб
Kamikadze_N, выделите в источнике С3 желтым, нажмите добавить данные, затем выделите фиолетовым, добавить данные, затем снова желтым, добавить данные. Итог: в каб1 (фиолет) С3 не исчезнет. аналогично "запоминаются" старые данные в других каб. Приходится перед каждым редактированием источника "чистить" кабNeWru
Сообщение отредактировал NeWru - Среда, 27.07.2016, 08:25
Sub qqq() With Sheets("èñòî÷íèê") For c = 2 To 7 For r = 2 To 4
If .Cells(r, c).Interior.Color = 10498160 Then 'ôèîë êàá1 Sheets("ÊÀÁ¹1").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color = 15773696 Then 'ãîëóáîé êàá2 Sheets("ÊÀÁ¹2").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color = 16777215 Then 'íåò öâåòà êàá3 Sheets("ÊÀÁ¹3").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color <> 10498160 And .Cells(r, c).Interior.Color <> 15773696 And _ .Cells(r, c).Interior.Color <> 16777215 Then Sheets("ÊÀÁ¹1").Cells(r, c).Value = .Cells(1, 1).Value Sheets("ÊÀÁ¹2").Cells(r, c).Value = .Cells(1, 1).Value Sheets("ÊÀÁ¹3").Cells(r, c).Value = .Cells(1, 1).Value End If Next r Next c End With End Sub
[/vba]
NeWru, Добавьте в код проверку. [vba]
Код
Sub qqq() With Sheets("èñòî÷íèê") For c = 2 To 7 For r = 2 To 4
If .Cells(r, c).Interior.Color = 10498160 Then 'ôèîë êàá1 Sheets("ÊÀÁ¹1").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color = 15773696 Then 'ãîëóáîé êàá2 Sheets("ÊÀÁ¹2").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color = 16777215 Then 'íåò öâåòà êàá3 Sheets("ÊÀÁ¹3").Cells(r, c).Value = .Cells(r, c).Value End If If .Cells(r, c).Interior.Color <> 10498160 And .Cells(r, c).Interior.Color <> 15773696 And _ .Cells(r, c).Interior.Color <> 16777215 Then Sheets("ÊÀÁ¹1").Cells(r, c).Value = .Cells(1, 1).Value Sheets("ÊÀÁ¹2").Cells(r, c).Value = .Cells(1, 1).Value Sheets("ÊÀÁ¹3").Cells(r, c).Value = .Cells(1, 1).Value End If Next r Next c End With End Sub
NeWru, или можно сделать очистку на отдельную кнопку [vba]
Код
Sub Clear() Sheets("КАБ№1").Range("B2:G4").ClearContents Sheets("КАБ№2").Range("B2:G4").ClearContents Sheets("КАБ№3").Range("B2:G4").ClearContents End Sub
[/vba]
NeWru, или можно сделать очистку на отдельную кнопку [vba]
Код
Sub Clear() Sheets("КАБ№1").Range("B2:G4").ClearContents Sheets("КАБ№2").Range("B2:G4").ClearContents Sheets("КАБ№3").Range("B2:G4").ClearContents End Sub
Kamikadze_N, вот спасибо! Об этом я и говорил, теперь правильно! А если таблица кабХХ в другом диапазоне будет, например ниже на строку и правее на столбец, то в макрос добавятся новые переменные к имеющимся "r" и "с" чтобы не съехали данные ?
Kamikadze_N, вот спасибо! Об этом я и говорил, теперь правильно! А если таблица кабХХ в другом диапазоне будет, например ниже на строку и правее на столбец, то в макрос добавятся новые переменные к имеющимся "r" и "с" чтобы не съехали данные ?NeWru
Чиста не мог пройти мимо со своим косметическим перфекционизмом: [vba]
Код
Sub qqq() Dim sheetName As String With Sheets("источник") For c = 2 To 7 For r = 2 To 4 Select Case .Cells(r, c).Interior.Color Case RGB(112, 48, 160) '=10498160 'фиол каб1 sheetName = "КАБ№1" Case RGB(0, 176, 240) '=15773696 'голубой каб2 sheetName = "КАБ№2" Case RGB(255, 255, 255) '=16777215 'нет цвета каб3 sheetName = "КАБ№3" Case Else sheetName = "" End Select If sheetName <> "" Then Sheets(sheetName).Cells(r, c).Value = .Cells(r, c).Value Else Sheets("КАБ№1").Cells(r, c).ClearContents Sheets("КАБ№2").Cells(r, c).ClearContents Sheets("КАБ№3").Cells(r, c).ClearContents End If Next r Next c End With End Sub
[/vba] P.S. Чтобы не пугать друг друга страшенными восьмизначными числами цветов, заменим их вызовами функции RGB. Ее параметры в каждом конкретном случае можно узнать, вызвав на ячейке с нужным цветом окно заливки "Цвет заливки \ Другие цвета \ Спектр" и прочитав значения в полях "Красный", "Зеленый", "Синий" (при этом в поле "Цветовая модель" должно быть указано "RGB").
Чиста не мог пройти мимо со своим косметическим перфекционизмом: [vba]
Код
Sub qqq() Dim sheetName As String With Sheets("источник") For c = 2 To 7 For r = 2 To 4 Select Case .Cells(r, c).Interior.Color Case RGB(112, 48, 160) '=10498160 'фиол каб1 sheetName = "КАБ№1" Case RGB(0, 176, 240) '=15773696 'голубой каб2 sheetName = "КАБ№2" Case RGB(255, 255, 255) '=16777215 'нет цвета каб3 sheetName = "КАБ№3" Case Else sheetName = "" End Select If sheetName <> "" Then Sheets(sheetName).Cells(r, c).Value = .Cells(r, c).Value Else Sheets("КАБ№1").Cells(r, c).ClearContents Sheets("КАБ№2").Cells(r, c).ClearContents Sheets("КАБ№3").Cells(r, c).ClearContents End If Next r Next c End With End Sub
[/vba] P.S. Чтобы не пугать друг друга страшенными восьмизначными числами цветов, заменим их вызовами функции RGB. Ее параметры в каждом конкретном случае можно узнать, вызвав на ячейке с нужным цветом окно заливки "Цвет заливки \ Другие цвета \ Спектр" и прочитав значения в полях "Красный", "Зеленый", "Синий" (при этом в поле "Цветовая модель" должно быть указано "RGB").Gustav