Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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 将数据相应地分配给新列,并根据值合并重复数据_Vba_Excel - Fatal编程技术网

Vba 将数据相应地分配给新列,并根据值合并重复数据

Vba 将数据相应地分配给新列,并根据值合并重复数据,vba,excel,Vba,Excel,我是一名动画师,编程对我来说还是很新的,但之前我的老板给我分配了一份工作,将两个不同的xls文件合并成一个。我设法在这里研究了一些代码,并使用VBA代码根据新的工作簿标题复制和粘贴数据 例如,下面是文件 Username Name Date Image Attempt Date Image Status 222 AA Aug No 1 182 BB Mar Yes 0 100

我是一名动画师,编程对我来说还是很新的,但之前我的老板给我分配了一份工作,将两个不同的xls文件合并成一个。我设法在这里研究了一些代码,并使用VBA代码根据新的工作簿标题复制和粘贴数据

例如,下面是文件

  Username  Name  Date  Image   Attempt  Date  Image   Status
    222      AA    Aug    No       1 
    182      BB    Mar   Yes       0
    100      CC    Aug    No       1
    787      DD    Mar   Yes       0
但是现在我在从另一个xls文件移动下面的数据时遇到了麻烦。并根据“用户名”和“名称”标题合并它们。因为它包含新的数据列

    Username  Name  Date   Image    Status  
    222        AA   2013    Color     good 
    182        BB   2011    B/W       bad
    100        CC   2011    B/W       bad
    669        EE   2013    Color     good
我需要把它们变成下面这样的东西

  Username  Name  Date  Image   Attempt  Date  Image   Status
    222      AA    Aug    No       1     2013   Color   good
    182      BB    Mar   Yes       0     2011   B/W     bad
    100      CC    Aug    No       1     2011   B/W     bad 
    787      DD    Mar   Yes       0     2013   Color   good 
    669      EE                          2013   Color   good

如果有任何关键字或指南将对我有很大帮助。

这将带来所有数据,并将wb1中尚未包含的任何数据添加到文件末尾,日期、图像和尝试下的空白处

Dim wb1, wb2 as Workbooks
Dim ws1, ws2 as Worksheets
Dim c3ll1, c3ll2, range1, range2 as Range

Set wb1 = Workbooks("Name1")
Set wb2 = Workbooks("Name2")
Set ws1 = wb1.Worksheets("name")
Set ws2 = wb2.Worksheets("name")

lastrow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row

Set range2 = ws2.Range("A2:A" & lastrow2)

For each c3ll2 in range2
    a = 0
    lastrow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
    Set range1 = ws1.Range("A2:A" & lastrow1)
    activerow2 = c3ll2.Row

    For each c3ll1 in range1
        If c3ll1.Value = c3ll2.Value then
            activerow1 = c3ll1.Row
            ws1.Cells(activerow1, 6) = ws2.Cells(activerow2, 3)
            ws1.Cells(activerow1, 7) = ws2.Cells(activerow2, 4)
            ws1.Cells(activerow1, 8) = ws2.Cells(activerow2, 5)
            a = 1                                                   'Username is found
        End if
    Next c3ll1

    If a = 0 then                       'If Username is not found print at end
        ws1.Cells(lastrow1 + 1, 1) = ws2.Cells(activerow2, 1)
        ws1.Cells(lastrow1 + 1, 2) = ws2.Cells(activerow2, 2)
        ws1.Cells(lastrow1 + 1, 6) = ws2.Cells(activerow2, 3)
        ws1.Cells(lastrow1 + 1, 7) = ws2.Cells(activerow2, 4)
        ws1.Cells(lastrow1 + 1, 8) = ws2.Cells(activerow2, 5)
    End If
Next c3ll2

我已经打开工作簿2,但当我运行F8时。它显示代码集ws2=wb2。工作表(“名称”)您是否将“名称”更改为工作表的名称?是的,我有一个打开新工作簿的代码。因此,我总共有两个工作簿。但是每个工作表都在不同的工作簿中。如果您只打开一个新工作簿并保存它,这样您就可以知道它的名称,并可以在代码中设置它,这会更容易。除非这是一个你将一直在做的自动化过程。