Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建VBA Excel宏以基于主ID匹配将单元格复制到另一张图纸_Excel_Vba_Excel Formula - Fatal编程技术网

创建VBA Excel宏以基于主ID匹配将单元格复制到另一张图纸

创建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)中,并将日

我想根据条件使用VBA宏自动复制和粘贴单元格

我尝试过使用VLOOKUP和MATCH函数,以及一些用于复制单元格的VBA代码,但似乎无法实现我想要的

我的目标是将Sheet1(LMSData)和Sheet2(Schedule)中的一些单元格复制到另一张工作表(学习花名册),其中[LMSData!A2:A]中的唯一ID=[Schedule!B2:BA]中的人员ID

如果有一个匹配项(或多个匹配项),我想将LMS数据中的能力名称和到期日期复制到Sheet3(LearningFloster)中,并将日程中的PersonID、开始日期、开始时间和完成时间复制到Learning Floster中

上述表格的图片可在此处找到

-LMSData

-时间表

-学习名册

我将非常感谢任何帮助,或被指向正确的方向


谢谢

您可以使用下面的脚本来完成这项工作

我考虑过LMSData表中的列(能力名称、到期日期、人员ID)和时间表表中的列(人员ID、开始日期、开始时间、完成时间)

您可以根据需要修改数据类型

以下是执行的步骤:

  • 从计划表中选择人员ID

  • 使用personid过滤LMSData表,并将可见记录复制到临时表中

  • 将所有记录复制到学习花名册中
  • '子副本数据()

    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