Необходимо скопировать циклом по строкам диапазон таблицы из "временного" листа в "постоянный" при выполнении конкретного условия. Диапазон по столбцам разрывают формулы, поэтому возможно придется делать несколько диапазонов на одну строку или может какой-то более удобный вариант, для примера взял первый диапазон с 6 по 8 столбец, в 9 идет первая формула, потом снова диапазон для копирования с 10 столбца по 15 например.
Условие, это совпадение на двух листах конкатенаций из 3 уникальных аналитик, т.е. если они совпали, то копируем указанный диапазон из одного листа в другой. Структура листов идентична по набору столбцов. Макрос при запуске ругается на функцию копирования.
Общий смысл примерно такой: Есть лист, куда прилетают много значений из ХД, эти значения идут в разрезе 3 уникальных полей (Структура_Должность_Сотрудник), далее эти данные копируются на пользовательский лист "Ввод данных", в котором заносят недостающие цифры.
Может возникнуть такая ситуация, когда обновились данные в ХД, например добавился новый сотрудник и встает вопрос как подкачать новые значения не потеряв старые (структура строк ломается), уже внесенные пользователем. Самый простой способ, который я придумал, это скопировать уже заполненные данные во временный лист, затем вставить обновленные данные из ХД и по ключу вернуть ранее заполненный цифры из временного листа обратно. На последнем этапе я пока и завис из-за того, что не знаю как грамотно скопировать диапазон между листами.(Опыт в VBA не большой)
Буду благодарен полезному совету, заранее спасибо!
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