Вы можете использовать приведенный ниже скрипт для этой работы.
Я рассмотрел столбец (Имя компетенции, Дата истечения срока действия, Идентификатор лица) в Листе данных LMSData и столбец (Идентификатор лица, Дата начала, Время начала, Время окончания) для Листа расписания.
Вы можете изменить тип данных в зависимости от ваших требований
Ниже приведены выполненные действия:
Выбор идентификатора человека из расписания.
Фильтр листа LMSData с персоной и копирование видимой записи во временный лист.
- Скопируйте всю эту запись в лист Учебного реестра.
'Sub copyData ()
Dim PersonId, StartDate, StartTime, FinishTime, CompentencyName, ExpiryDate, CompetencyName As String
Dim ScheduleIndex, TempIndex, LearningRosterIndex As Integer
ScheduleIndex = 2
LearningRosterIndex = 2
Do While ThisWorkbook.Sheets("Schedule").Cells(ScheduleIndex, 1).Value <> ""
PersonId = ThisWorkbook.Sheets("Schedule").Cells(ScheduleIndex, 1).Value
StartDate = ThisWorkbook.Sheets("Schedule").Cells(ScheduleIndex, 2).Value
StartTime = ThisWorkbook.Sheets("Schedule").Cells(ScheduleIndex, 3).Value
FinishTime = ThisWorkbook.Sheets("Schedule").Cells(ScheduleIndex, 4).Value
With ThisWorkbook.Sheets("LMSData")
.AutoFilterMode = False
With .Range("A1:C100000")
.AutoFilter Field:=3, Criteria1:=Array(PersonId), Operator:=xlFilterValues
.SpecialCells(xlCellTypeVisible).Copy Destination:=ThisWorkbook.Sheets("Temp").Range("A1")
End With
End With
TempIndex = 2
Do While ThisWorkbook.Sheets("Temp").Cells(TempIndex, 1).Value <> ""
CompetencyName = ThisWorkbook.Sheets("Temp").Cells(TempIndex, 1).Value
ExpiryDate = ThisWorkbook.Sheets("Temp").Cells(TempIndex, 2).Value
ThisWorkbook.Sheets("LearningRoster").Cells(LearningRosterIndex, 1).Value = PersonId
ThisWorkbook.Sheets("LearningRoster").Cells(LearningRosterIndex, 2).Value = StartDate
ThisWorkbook.Sheets("LearningRoster").Cells(LearningRosterIndex, 3).Value = StartTime
ThisWorkbook.Sheets("LearningRoster").Cells(LearningRosterIndex, 4).Value = FinishTime
ThisWorkbook.Sheets("LearningRoster").Cells(LearningRosterIndex, 5).Value = CompetencyName
ThisWorkbook.Sheets("LearningRoster").Cells(LearningRosterIndex, 6).Value = ExpiryDate
LearningRosterIndex = LearningRosterIndex + 1
TempIndex = TempIndex + 1
Loop
ThisWorkbook.Sheets("Temp").Range("A1:C10000").ClearContents
With ThisWorkbook.Sheets("LMSData")
.AutoFilterMode = False
With .Range("A1:C100000")
.AutoFilter Field:=3, Criteria1:="*", Operator:=xlFilterValues
End With
End With
ScheduleIndex = ScheduleIndex + 1
Loop
End Sub
`