Страницы: 1
RSS
Макрос Копировать вставить значения по цвету ячейки
 
Добрый день. Коллеги, я не разбираюсь в VBA от слова совсем. Но кое что со стряпал, огромная просьба помочь разобраться.
Вообщем задача такая в таблице друг под другом есть столбец желтых ячеек (цвет: 65535) и столбец зеленых ячеек (цвет: 5296274) есть задача скопировать только результат из желтых ячеек в зеленые последовательно, причем между желтыми и зелеными ячейками могут быть ячейки другого цвета и количество желтых и зеленых ячеек может быть разным. Задача чтобы получилось примерно так: желтые 1,2,3,4,5 зеленые: 1,2,3,4,5,1,2 (ну то есть если зеленых больше то копирование было бы по кругу).

Я наваял макрос ниже, но он что делает, проходит по желтым ячейкам и результат из 1 желтой ячейки он копирует во все зеленые, потом результат из второй ячейки во все зеленые и так пока не пройдет все желтые..... Буду очень благодарен помощи или совету
Код
Sub copYel() 'копирование из желты в зел
 For a = 3 To 33
 For c = 3 To 33
 Set b = ActiveSheet.Cells(a, 9)
 Set d = ActiveSheet.Cells(c, 9)
 If b.Interior.Color = 65535 Then
 b.Copy
 If d.Interior.Color = 5296274 Then d.PasteSpecial xlPasteValues
 End If
 Next c
 Next a
 End Sub
 
Цитата
gorogankin написал:
Вообщем задача такая в таблице друг под другом есть столбец...
нет у нас ни таблицы, ни столбцов с желтыми и зелеными ячейками :(...
Без них тяжко разбираться.
 
Прошу прощение, во вложении таблица с макросом
 
gorogankin, было бы еще не плохо показать, что должно получиться.
И, желательно, несколько вариантов (желтых больше, чем зеленых; зеленых больше, чем желтых; и т.п.).
 
Во вложении скрины картинок что должно быть.
Изменено: gorogankin - 16.07.2020 17:56:51
 
gorogankin, а в самом файле (не картинкой)  показать Было - стало никак? замените файл. И ещё раз объясните, что делать в случае неравенства количества жёлтых и зелёных.
 
...и еще- желтые и зеленые ячейки находятся в заранее известных диапазонах? или их (ячейки) сначала нужно найти по всему листу?
 
Цитата
Юрий М написал:
показать Было - стало никак? замените файл.
Дело в том, что картинками я прислал не "было-стало", а вариации, как могут располагаться ячейки их бесчисленное множество, это только 2 вариации, ну то есть диапазон желтых-зеленых это как раз динамичный диапазон. На одном листе он может быть как на первой картинке, на втором листе как на второй и это еще не конечный вариант.

Еще раз попробую объяснить смысл всего действа:
Есть некоторая таблица где некоторое количество желтых ячеек заполняются макросом автоматически по принципу такому (столбец всегда один и тот же), а количество желтых строк с пропусками (с прозрачными ячейками) и с ячейками другого цвета (в них формулы, которые трогать нельзя). Так вот он заполняет все желтые ячейки определенными числами, но вот ниже желтых есть зеленые ячейки, в которых будет повторятся все что есть в желтых, по кругу. Как на картинке ниже.
Ну то есть столбец будет содержать несколько блоков (с желтыми ячейками, в которых количество этих желтых ячеек одинаково, но может варьироваться, ну то есть сейчас это 7 строк, но может быть и 6, а может быть 8 ). Но количество ячеек в блоке зеленом всегда будет равно количеству ячеек в блоке желтом. Но вот блоков желтых и зеленых может быть разное количество, в одном файле желтых может быть 2, а зеленый всего 1, на втором листе желтых может быть 4, а зеленых 8. Единственное что хочу сказать что итоговое количество желтых + зеленых блоков всегда будет одинаково и равно 12, но мне в некоторых листах не потребуется столько ячеек и я просто ручками сделаю например 1 и 2 блоки желтыми, а 3 зеленым, а другие просто обесцвечу, поэтому я взял за принцип заполняемость ячеек по цвету ячейки.
Цитата
Михаил Витальевич С. написал:
и еще- желтые и зеленые ячейки находятся в заранее известных диапазонах?
да общий диапазон ячеек желтые+зеленые будет всегда одним, располагаться всегда в одном и том же столбце, то есть искать по всему листу их не нужно.
Код
For a = 3 To 33
Set b = ActiveSheet.Cells(a, 9)
Set d = ActiveSheet.Cells(c, 9)
я поэтому и оформляю for именно так, ну то есть 3 - это 3 строка на листе начало общего диапазона, а 33 конец, а цифра 9 это как раз таки 9 столбец (но я в итоговом макросе могу изменить эти параметры, это же макрос пример).

Я не знаю может как вариант я хотел попроще, может вот всем 12 блокам присвоить имя? и тогда будет копироваться четко весь поименный блок желтый, в в весь поименный блок зеленый.

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

Ток один момент, а нельзя все таки задать вместо выделения диапазона, начальную и конечную точки диапазона, ну то есть как я писал, начало и конец они известны
 
msi2102, я вообщем разобрался, просто добавил в макрос вот этот код
Код
Range("i6", Range("i138").End(xlUp)).Select
 
gorogankin, Замените
Код
Set Ran = Selection
на
Код
Set Ran = Range("I6:I138")
Изменено: msi2102 - 17.07.2020 12:55:27
 
Цитата
gorogankin написал:
Range("i6", Range("i138").End(xlUp)).Select
так проще:
Код
Range("I6:I138").Select
 
msi2102,  пробовал выдает ошибку
то есть если написать вот так, то норм:
Код
Range("I6:I138").Select
Set Ran = Selection
а если, вот как ниже, то пишет ошибку:
Код
Set Ran = Range("I6:I138").Select
 
Цитата
gorogankin написал:
Set Ran = Range("I6:I138").Select
Цитата
msi2102 написал:
Set Ran = Range("I6:I138")
Найдите десять отличий
Изменено: msi2102 - 17.07.2020 13:52:34
 
А зачем вообще Select?
 
msi2102, да, невнимательно прочитал, спасибо еще раз большое за реализацию, очень сильно выручили
Страницы: 1
Наверх