创建VBA Excel宏以基于主ID匹配将单元格复制到另一张图纸
我想根据条件使用VBA宏自动复制和粘贴单元格 我尝试过使用VLOOKUP和MATCH函数,以及一些用于复制单元格的VBA代码,但似乎无法实现我想要的 我的目标是将Sheet1(LMSData)和Sheet2(Schedule)中的一些单元格复制到另一张工作表(学习花名册),其中[LMSData!A2:A]中的唯一ID=[Schedule!B2:BA]中的人员ID 如果有一个匹配项(或多个匹配项),我想将LMS数据中的能力名称和到期日期复制到Sheet3(LearningFloster)中,并将日程中的PersonID、开始日期、开始时间和完成时间复制到Learning Floster中 上述表格的图片可在此处找到 -LMSData -时间表 -学习名册 我将非常感谢任何帮助,或被指向正确的方向创建VBA Excel宏以基于主ID匹配将单元格复制到另一张图纸,excel,vba,excel-formula,Excel,Vba,Excel Formula,我想根据条件使用VBA宏自动复制和粘贴单元格 我尝试过使用VLOOKUP和MATCH函数,以及一些用于复制单元格的VBA代码,但似乎无法实现我想要的 我的目标是将Sheet1(LMSData)和Sheet2(Schedule)中的一些单元格复制到另一张工作表(学习花名册),其中[LMSData!A2:A]中的唯一ID=[Schedule!B2:BA]中的人员ID 如果有一个匹配项(或多个匹配项),我想将LMS数据中的能力名称和到期日期复制到Sheet3(LearningFloster)中,并将日
谢谢您可以使用下面的脚本来完成这项工作 我考虑过LMSData表中的列(能力名称、到期日期、人员ID)和时间表表中的列(人员ID、开始日期、开始时间、完成时间) 您可以根据需要修改数据类型 以下是执行的步骤:
Dim PersonId、StartDate、StartTime、FinishTime、CompletencyName、ExpiryDate、CompetencyName作为字符串
Dim ScheduleIndex、TempIndex、LearningRosterIndex作为整数
ScheduleIndex=2
LearningRosterIndex=2
执行此工作簿.Sheets(“Schedule”).Cells(ScheduleIndex,1).值“”时
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
使用此工作簿。工作表(“LMSData”)
.AutoFilterMode=False
范围(“A1:C100000”)
.AutoFilter字段:=3,Criteria1:=Array(PersonId),运算符:=xlFilterValues
.SpecialCells(xlCellTypeVisible)。复制目标:=此工作簿.Sheets(“Temp”).Range(“A1”)
以
以
TempIndex=2
执行此工作簿.Sheets(“Temp”).Cells(TempIndex,1).值“”时
CompetencyName=此工作簿.Sheets(“Temp”).Cells(TempIndex,1).Value
ExpiryDate=此工作簿.Sheets(“Temp”).单元格(TempIndex,2).Value
ThisWorkbook.Sheets(“LearningRosterIndex”).Cells(LearningRosterIndex,1)。Value=PersonId
ThisWorkbook.Sheets(“LearningRosterIndex”).Cells(LearningRosterIndex,2)。Value=StartDate
ThisWorkbook.Sheets(“LearningRosterIndex”).Cells(LearningRosterIndex,3)。Value=StartTime
ThisWorkbook.Sheets(“LearningRosterIndex”).Cells(LearningRosterIndex,4)。值=完成时间
ThisWorkbook.Sheets(“LearningRosterIndex”).Cells(LearningRosterIndex,5)。Value=CompetencyName
ThisWorkbook.Sheets(“LearningRosterIndex”).Cells(LearningRosterIndex,6)。Value=ExpiryDate
LearningRosterIndex=LearningRosterIndex+1
TempIndex=TempIndex+1
环
此工作簿。工作表(“临时”)范围(“A1:C10000”)。ClearContents
使用此工作簿。工作表(“LMSData”)
.AutoFilterMode=False
范围(“A1:C100000”)
.AutoFilter字段:=3,准则1:=“*”,运算符:=xlFilterValues
以
以
ScheduleIndex=ScheduleIndex+1
环
端接头
`那么您有什么代码?然后人们可能会提供更正或改进。欢迎使用堆栈溢出。请注意,因为这不是免费的代码编写服务,所以有必要显示您迄今为止所做的尝试以及您遇到的问题或错误(通过显示代码),或者至少显示您所做的研究和努力。否则它只是要求我们为你做所有的工作。阅读可以帮助你改进你的问题。
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