匹配两张纸之间的值并将相应的值复制到初始纸张两次

时间:2015-12-16 00:48:52

标签: excel vba excel-vba

我有一张四张工作簿 - 一张合并工作表,从其他项目中提取所有信息(Sheet2-4)。合并工作表将用作另一个Excel工作表的源文件,该工作表将用于编辑和更新无法从以下报表填充的字段(Sheet2-4)。我无法使用Access或其他数据库类型来控制我无法控制的约束。

Sheet1 : Consolidated_Sheet  
Sheet2 : Incentive_Report_Raw_Data  
Sheet3 : Offer_Report_Raw_Data  
Sheet4 : SQR_Report_Raw_Data  

第1步:将数据从Sheet3整合到合并工作表 - 作品

Sub InitialMigration()
Dim sourceColumn As Range, targetColumn As Range

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("B")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("D")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("AH")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("H")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("AV")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("L")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("AW")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("M")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("D")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("N")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("I")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("O")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("AS")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("P")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("BC")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("W")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("AO")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("Z")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("AN")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("AB")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("AK")
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("Y")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("AM") 'Pricing
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("AD")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("F") 'Campaign Owner
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("I")

sourceColumn.Copy [targetColumn]

Set sourceColumn = Worksheets("Offer_Report_Raw_Data").Columns("AG") 'Product
Set targetColumn = Worksheets("Consolidated_Sheet").Columns("F")

sourceColumn.Copy [targetColumn]
End Sub

步骤2:我需要将Consolidated_Sheet(列U)中的值与SQR(列J)中的值匹配,然后将同一行SQR(列F)中的值复制到相应的初始值行在Consolidated_Sheet(列O)中。  匹配(CS-U)到(SQR-J)然后复制(SQR-F)到(CS-O)。

注意:两张不同工作表上的行不匹配。

我在小范围内尝试了这个并取得了有限的成功 - 一行并且它可以工作,但我找不到一种方法让它在更大的数据集中工作 - (~2,000 +行)。我在互联网上找到了这个,这是我能找到的最接近的东西 - 老实说我不知道​​我是否问过正确的方法。

Sub Submission()
Set wks1 = Worksheets("Consolidated_Sheet")
Set wks2 = Worksheets("SQR_Report_Raw_Data")


With wks1

End With
If wks1.Range("U") = wks2.Range("J") Then
wks2.Range("F").Copy wks1.Range("O") '<< cpy to 2nd WS
End If
End Sub

第3步:在Consolidated_Sheet和Incentive_Report_Raw_Data之间需要执行上一个练习中的要求。

请注意,这些原始数据表将每周更新,我会说这是为了能够不断更新所有内容。理想情况下是一步一步的过程。

1 个答案:

答案 0 :(得分:0)

你的第一部分是功能性的,但是如果你使用一个小的Sub来进行实际的复制,可以缩短一点(因此更容易维护):

100

最后一部分有点复杂,但在下面的示例中,所有逻辑都在10 Sub中,因此您可以从Sub InitialMigration() CopyColumn "B", "D" CopyColumn "AH", "H" CopyColumn "AV", "L" CopyColumn "AW", "M" CopyColumn "D", "N" CopyColumn "I", "O" CopyColumn "AS", "P" CopyColumn "BC", "W" CopyColumn "AO", "Z" CopyColumn "AN", "AB" '...ETC ETC End Sub 'Utility sub: Copy col letter S to col letter D Sub CopyColumn(S As String, D As String) Worksheets("Offer_Report_Raw_Data").Columns(S).Copy _ Worksheets("Consolidated_Sheet").Columns(D) End Sub 重复调用此参数,其中包含以下参数:

  • 您要查找的列
  • 您想要检查哪一列
  • 匹配时从哪里选择值
  • 将该值放入
  • 的列

以下是代码:

DoLookup
祝你好运!