由第一个工作表复制的宏Excel第二个工作表值

时间:2017-07-20 06:42:39

标签: excel vba excel-vba

我在同一个Excel中有2张。

第一个Excel工作表包含以下字段

 No       Material           10th july  11th july
  1   DATUM DCP ESD Black                    
  2   DATUM DCP ESD Blue         

我的第二个工作表包含以下字段

No     Date             Material            Stock size+Wastage
  1  10th july      DATUM DCP ESD Black          283.47 
  2  10th july      DATUM DCP ESD Black          661.6
  3  11th july      DATUM DCP ESD Blue           665.6  
  4  11th july      DATUM DCP ESD Black           50.8

我希望在第一个工作表中显示以下预期结果: -

 No      Material             10th july  11th july
  1   DATUM DCP ESD Black      945.07    50.8         
  2   DATUM DCP ESD Blue                 665.6

3 个答案:

答案 0 :(得分:4)

忘记宏,只需使用数据透视表 在将更多数据添加到拉出的集合后,您始终可以刷新数据透视表。

这是数据透视表的外观: pic of pivot table of the data

如何设置数据透视表中的字段:
how i set up the fields in the pivot table

答案 1 :(得分:2)

这里不需要VBA。忽略第一张工作表并从第二张工作表创建一个数据透视表。

答案 2 :(得分:0)

Sub summ()
    With Worksheets("Sheet2")
        .Range("B2:B" & Range("B" & "65536").End(xlUp).row).Name = "Dates"
        .Range("C2:C" & Range("C" & "65536").End(xlUp).row).Name = "Materials"
        .Range("D2:D" & Range("D" & "65536").End(xlUp).row).Name = "Numbers"
    End With
    With Worksheets("Sheet1")
        .Cells(2, 3).FormulaR1C1 = _
            "=SUMPRODUCT( (Worksheets("Sheet2")!Dates=R1C) * (Worksheets("Sheet2")!Materials=RC1) * (Worksheets("Sheet2")!Numbers)"
        .Range(Cells(2, 3).Address).AutoFill _
            Destination:=Range(Cells(2, 3).Address, Cells(2, Y)), Type:=xlFillDefault
        .Range(Cells(2, X).Address).AutoFill _
            Destination:=Range(Cells(2, Y).Address, Cells(X, Y)), Type:=xlFillDefault
End Sub  

其中“Sheet1”和“Sheet2”分别是第一张和第二张的名称 其中X是最后一次使用的行(number_of_materials - 1) 其中Y是最后一次使用的列(number_of_dates - 1) 由于这不是一项复杂的任务,我建议使用公式,而不是宏。