繁体   English   中英

根据标准将数据从一张表合并到另一张表,并仅填充特定单元格

[英]Merge data from one sheet to another based on criteria and only populate specific cells

我有两个想要合并的数据源。

表 1

Sheet1 上的数据源包含 2 列:AccountID 和 Cost。 源位于单元格 A3:B3(数据行从 A4 开始)中,用于 1 到 N 条记录。 辅助单元格包含要在此源中使用的所有记录的年份值。 它位于单元格 D1 中。

表 2

Sheet2 上的数据源包含 6 列,范围为 A1:F1(数据从第 2 行开始):Year、AccountID、Location、Phone#、Email 类型和成本。 数据持续 1 到 N 条记录。

我希望根据每个数据范围(Sheet1 列 A,Sheet2 列 B)的 AccountID 加入两个表的记录,其中年份(来自 Sheet1,D1)被添加到 Sheet2 数据的所有记录中。 和由 AccountID 匹配的记录。 数据被追加/添加到最后一个可用行的 Sheet2 中。

示例 #1

AccountID“1234”在 Sheet1 上,但不在 Sheet2 上。 年份值 (Sheet1.D1) 包含 2020,最终结果将在 Sheet2 中添加一个新行,其中 AccountID 为“1234”,即关联的成本值。 和 2020 年。

示例#2

AccountID“1234”在 sheet1 和 Sheet2 上。 Sheet2 上的记录的年份值为 2019。Sheet1 上的记录具有与之关联的 2020 年(Sheet1.D1 单元格值),最终结果将在 Sheet2 中为 AccountID 的“1234”有两行数据,一个用于2019 年的记录和 2020 年的记录。 如在 Sheet1 数据源中发现的那样,后者将不包括 Location、Phone# 或 Email 类型值,因为它们未指定

表 1

表 2

附加 Sheet1 数据后的 Sheet2

也许是这样的?

Sub test()
Set rng_ID = Sheets("Sheet2").Range("B:B") 'set ID range on sheet2
oYear = Sheets("Sheet1").Range("D1").Value 'get year value on sheet1
Set Rng = Sheets("Sheet1").Range("A4", Sheets("Sheet1").Range("A4").End(xlDown)) 'set ID range on sheet1

With Sheets("Sheet2")
For Each cell In Rng 'loop to each cell in ID range on sheet1
oCost = cell.Offset(0, 1).Value 'set the cost value
Set c = rng_ID.Find(cell.Value, lookat:=xlWhole) 'find if the cell value is in ID range on sheet2
    If Not c Is Nothing Then 'if found
    Set xCopy = .Range(c, c.Offset(0, 4)) 'set the range found to be copied
    c.Offset(1, 0).EntireRow.Insert 'insert entire row below the found cell
    xCopy.Copy Destination:=c.Offset(1, 0) 'copy the range above then paste
    c.Offset(1, -1).Value = oYear 'fill the year
    c.Offset(1, 4).Value = oCost 'file the cost
    Else 'if not found
    Set oFill = Sheets("Sheet2").Range("B500000").End(xlUp).Offset(1, 0) 'set the last blank cell in column B sheet2
    oFill.Offset(0, -1).Value = oYear 'fil the year
    oFill.Offset(0, 4).Value = oCost 'fill the cost
    oFill.Value = cell.Value 'fill the ID
    End If
Next cell
End With

'unmark the line below which one you want     
'Call SortByYearThenByID
'Call SortByIDThenByYear
End sub

我尝试使用排序代码添加它,也许是你想要的结果

Sub SortByYearThenByID()
Set rngSort = Sheets("Sheet2").Range("A1", Range("F1").End(xlDown))

Sheets("Sheet2").Sort.SortFields.Clear
        rngSort.Sort Key1:=rngSort.Columns(1), Key2:=rngSort.Columns(2), Order1:=xlAscending, Header:=yes
End Sub

Sub SortByIDThenByYear()
Set rngSort = Sheets("Sheet2").Range("A1", Range("F1").End(xlDown))
Sheets("Sheet2").Sort.SortFields.Clear
        rngSort.Sort Key1:=rngSort.Columns(2), Key2:=rngSort.Columns(1), Order1:=xlAscending, Header:=yes
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM