Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
caustic
18 / 18 / 0
Регистрация: 30.09.2011
Сообщений: 283
1

Копирование строк с листа на лист при условии их заливки

05.12.2012, 11:56. Просмотров 1806. Ответов 6

Добрый день.

Помогите пожалуйста реализовать на первых порах одну операцию.

Дано:
Книга (в приложении). в ней 2 листа. в них абсолютно одинаковые таблицы, но во втором листе в таблицу добавлены 2 строчки (всегда отмечаются светло-зеленым цветом (.Interior.Color = 10092492) )

Что надо:
Чтобы строчки, где есть светло-зеленая ячейка были скопированы целиком и вставлены соответственно в таблицу на первом листе

Оговорки:
в приложении упрощенная таблица-пример. Обычная запись макроса типа: выделить зеленую строку и вставить по абсолютному адресу на первом листе - не прокатит. строчки добавляются время от времени, в разные блоки (имеется ввиду блок между синими строками), соответственно адрес постоянно будет плавать.

Условия:
Зацепиться можно за синюю "итоговую строчку", т.к. новые строчки (светло-зеленого цвета) добавляются перед ней, + на одну строчку вверх. (как собственно они добавлены на 2ом листе в книге)


с уважением
0
Вложения
Тип файла: xlsx Excel Worksheet - копия.xlsx (11.1 Кб, 14 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2012, 11:56
Ответы с готовыми решениями:

Копирование значения ячейки из одного листа в другой при соблюдений условии
Добрый день! Помогите написать макрос для решения следующей проблемы. Имеется...

Копирование данных на другой лист при условии определенных данных
Добрый день! Нужна помощь чайнику при формировании картотеки сотрудников. Есть...

Копирование с листа на лист
Здравствуйте уважаемые форумчане! У меня такая задачка никак не могу ее...

Копирование таблиц с листа на лист
Реализовать функцию копирования таблицы, расположенной на первом листе книги MS...

Копирование данных с листа на лист
Подскажите как в VBA Excel описать кнопку, чтобы при её нажатии 6 числовых...

6
Скрипт
5445 / 1126 / 49
Регистрация: 15.09.2012
Сообщений: 3,416
05.12.2012, 12:10 2
caustic, а куда вставлять строки на первом листе?
0
caustic
18 / 18 / 0
Регистрация: 30.09.2011
Сообщений: 283
05.12.2012, 12:33  [ТС] 3
Цитата Сообщение от Скрипт Посмотреть сообщение
caustic, а куда вставлять строки на первом листе?
вот это именно та загвоздка которую я не могу реализовать.

я вижу себе это так например:

на 2ом листе: рассчитать, какой по счету была синяя "итоговая" строчка, в которой была найдена светло-зеленая строка, перейти на 1 лист, найти эту самую синюю строчку тут, методом вычисления ее порядкового номера (из 2ого листа) и вставить ее перед ней + на 1ну строку выше.

других зацепок и нет в принципе. только эта синяя строчка.


этот метод можно реализовать?

Добавлено через 9 минут
Кстати: можно зацепится за значение в самих "синих строчках". они уникальны.

Примерно то что я думаю, но не могу сделать:

Visual Basic
1
2
3
4
5
6
7
8
9
Sub Vstavka()
 
For k = 1 To 50
    If Range(Cells(k, 1), Cells(k, 1)).Interior.Color = 10092492 Then    'светло-зеленая  
'двигаться далее от этой св-зелен строки пока не достингу первой синей "итоговой" строчки
'узнать значение в этой итоговой строчке
'перейти на вкладку 1, найти это значение, и вставить перед ней + выше на 1 строку, строчку из 2ого листа со светло-зеленой ячейкой
 
End Sub
0
Скрипт
5445 / 1126 / 49
Регистрация: 15.09.2012
Сообщений: 3,416
05.12.2012, 13:20 4
caustic, допустим вы не используете макросы, то как вручную вы бы перенесли строку со второго листа на первый?
Если вы этого не знаете, то макрос нельзя сделать.
0
caustic
18 / 18 / 0
Регистрация: 30.09.2011
Сообщений: 283
06.12.2012, 13:23  [ТС] 5
Цитата Сообщение от Скрипт Посмотреть сообщение
то как вручную вы бы перенесли строку со второго листа на первый?
Если вы этого не знаете, то макрос нельзя сделать.
я вручную этим и занимаюсь.

я это делаю так:
1) копирую всю строчку со второго листа (где вижу что я отметил ячейку светло-зеленым цветом);
2) перехожу на 1 вкладку, вставляю ее в тот же самый блок (между синими ячейками) в то же самое место, т.е. предпоследней строчкой;

*не заменяю какую либо строчку, а именно вставляю уже между ними

Добавлено через 23 часа 57 минут
решение нашел:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Explicit
 
Sub Vstavka()
Dim Tabl1 As Range, Tabl2 As Range
Dim Row2&, i As Integer
With Sheets("Лист1")
Set Tabl1 = .UsedRange
End With
 With Sheets("Лист2")
Set Tabl2 = .UsedRange
End With
Row2 = Tabl2.Rows.Count
Application.ScreenUpdating = False
For i = 1 To Row2
    If Tabl1.Cells(i, 1) <> Tabl2.Cells(i, 1) Then
        Tabl1.Rows(i & ":" & i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
       Tabl2.Rows(i & ":" & i).Copy _
    Destination:=Tabl1.Rows(i & ":" & i)
    End If
Next
Application.ScreenUpdating = True
End Sub
у меня только один вопрос по макросу.
как подкорректировать эту часть кода:

Visual Basic
1
2
Tabl2.Rows(i & ":" & i).Copy _
Destination:=Tabl1.Rows(i & ":" & i)
так, чтобы вставлялась строчка на лист1, но без копирования форматированя строки со второго листа, а только лишь значения зеленой ячейки?
0
Скрипт
5445 / 1126 / 49
Регистрация: 15.09.2012
Сообщений: 3,416
06.12.2012, 13:32 6
Visual Basic
1
Tabl1.Rows(i & ":" & i).Value = Tabl2.Rows(i & ":" & i).Value
0
caustic
18 / 18 / 0
Регистрация: 30.09.2011
Сообщений: 283
06.12.2012, 15:34  [ТС] 7
Цитата Сообщение от Скрипт Посмотреть сообщение
Visual Basic
1
Tabl1.Rows(i & ":" & i).Value = Tabl2.Rows(i & ":" & i).Value
не совсем.
скажу проще:
нужно чтобы копировалось значение только из 1 ячейки.. а не значения всей строчки.

как макрос работает:
нашел недостающую строчку на лист1, вставил строчку на лист1 где не хватает ее, и скопировал всю строку на это место из лист2

я хочу:
нашел недостающую строчку на лист1, вставил строчку на лист1 где не хватает ее, скопировал и вставил только значение ячейки из лист2 которую он не нашел.

Добавлено через 1 час 7 минут
обмозговал до нужного мне результата:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Explicit
 
Sub Vstavka112()
Dim Tabl1 As Range, Tabl2 As Range
Dim Row2&, i As Integer
With Sheets("Лист1")
Set Tabl1 = .UsedRange
End With
 With Sheets("Лист2")
Set Tabl2 = .UsedRange
End With
Row2 = Tabl2.Rows.Count
Application.ScreenUpdating = False
For i = 1 To Row2
    If Tabl1.Cells(i, 1) <> Tabl2.Cells(i, 1) Then
        Tabl1.Rows(i & ":" & i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
       Tabl2.Cells(i, 1).Copy _
    Destination:=Tabl1.Cells(i, 1)
    End If
Next
Application.ScreenUpdating = True
End Sub
Добавлено через 38 минут
Наверное стоит тут продолжить постить, не создавая новую тему, ибо у меня еще один вопрос по этому же макросу, где я один я точно не справлюсь)

как научить вышепредставленный мною макрос сравнивать цвет заливки ячейки, и если цвет заливки на "лист1" различен с заливкой этой же ячейки на "лист2", то заливать ячейку на "лист1" тем же самым цветом той же ячейки но с "лист2"
0
06.12.2012, 15:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 15:34

Копирование ячеек столбца одного листа и переноса на другой лист
Доброго времени суток всем вам, уважаемые форумчане. В виду рабочей...

Копирование данных из разных ячеек одного листа на другой лист
Ребят, доброго всем вечера. Требуется помощь. VBA в рамках предмета под...

Экономное копирование из одного листа в другой (добавление готовых накладных на лист для печати в excel)
Здравствуйте, подскажите, пожалуйста макрос который будет компактно копировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru