Страницы: 1
RSS
Копирование диапазона, адрес которого задан с переменной, Копирование диапазона, адрес которого задан с переменной
 
Коллеги, прошу помощи.

Необходимо скопировать циклом по строкам диапазон таблицы из "временного" листа в "постоянный" при выполнении конкретного условия. Диапазон по столбцам разрывают формулы, поэтому возможно придется делать несколько диапазонов на одну строку или может какой-то более удобный вариант, для примера взял первый диапазон с 6 по 8 столбец, в 9 идет первая формула, потом снова диапазон для копирования с 10 столбца по 15 например.

Условие, это совпадение на двух листах конкатенаций из 3 уникальных аналитик, т.е. если они совпали, то копируем указанный диапазон из одного листа в другой. Структура листов идентична по набору столбцов. Макрос при запуске ругается на функцию копирования.


Общий смысл примерно такой: Есть лист, куда прилетают много значений из ХД, эти значения идут в разрезе 3 уникальных полей (Структура_Должность_Сотрудник), далее эти данные копируются на пользовательский лист "Ввод данных", в котором заносят недостающие цифры.

Может возникнуть такая ситуация, когда обновились данные в ХД, например добавился новый сотрудник и встает вопрос как подкачать новые значения не потеряв старые (структура строк ломается), уже внесенные пользователем. Самый простой способ, который я придумал, это скопировать уже заполненные данные во временный лист, затем вставить обновленные данные из ХД и по ключу вернуть ранее заполненный цифры из временного листа обратно. На последнем этапе я пока и завис из-за того, что не знаю как грамотно скопировать диапазон между листами.(Опыт в VBA не большой)

Буду благодарен полезному совету, заранее спасибо!

Ссылка на файл с таблицей.https://yadi.sk/i/HkIM5PkqqjGb3
Код
   Sub Копирование()
    

    
    '##########################################
    '####  КОПИРОВАНИЕ ИЗ ВРЕМЕННОГО ЛИСТА ####
    '##########################################
    
    SheetName_Goal = "Ввод данных"
    SheetName_Goal_tmp = "Ввод данных (2)"
    
    Dim i As Integer
        
    Count_Copy = ActiveWorkbook.Sheets(SheetName_Goal).Cells(Rows.Count, 3).End(xlUp).Row

    
                    For i = 3 To Count_Copy
                        If ActiveWorkbook.Sheets(SheetName_Goal).Cells(i, 4) = ActiveWorkbook.Sheets(SheetName_Goal_tmp).Cells(i, 4) Then
                            ActiveWorkbook.Sheets(SheetName_Goal).Cells(i, 5) = 1

                             ActiveWorkbook.Sheets(SheetName_Goal_tmp).Range(Cells(i, 6), Cells(i, 8)).Copy
                             ActiveWorkbook.Sheets(SheetName_Goal).Range(Cells(i, 6), Cells(i, 8)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                :=False, Transpose:=False

                        Else
                            ActiveWorkbook.Sheets(SheetName_Goal).Cells(i, 5) = 0
                        End If
                    Next
                    

    End Sub
 
Так работает
Код
Sub Копирование()

    Dim Sh_Goal As Worksheet, Sh_Goal_tmp As Worksheet
    '##########################################
    '####  КОПИРОВАНИЕ ИЗ ВРЕМЕННОГО ЛИСТ  ####
    '##########################################
    SheetName_Goal = "Ввод данных"
    SheetName_Goal_tmp = "Ввод данных (2)"
    Set Sh_Goal = ActiveWorkbook.Worksheets(SheetName_Goal)
    Set Sh_Goal_tmp = ActiveWorkbook.Worksheets(SheetName_Goal_tmp)

    Dim i As Long
    With Sh_Goal
    Count_Copy = .Cells(.Rows.Count, 3).End(xlUp).Row
    For i = 3 To Count_Copy
        If .Cells(i, 4) = Sh_Goal_tmp.Cells(i, 4) Then
            .Cells(i, 5) = 1
            .Cells(i, 6).Resize(1, 3) = Sh_Goal_tmp.Range("F" & i).Resize(1, 3).Value
        Else
            Sh_Goal.Cells(i, 5) = 0
        End If
    Next
End With
End Sub
Изменено: Doober - 04.04.2016 23:39:56
 
Doober, спасибо громадное, вы меня очень выручали, работает на ура, открыл для себя resize! :) Успехов вам!
Страницы: 1
Наверх