VBA,基于指定工作表中的标识符列合并工作表

问题描述 投票:0回答:1

我是VBA的新手。我有两张包含两张纸的纸张表1是标题“材料”下的一列中的缩写词汇表和标题“材料描述”下的一列中的说明。表2是一个数据集,其中包含标题“客户名称”下的列,标题“材料”下的列和标题“已开票值”下的列。

例:

Sheet 1      
Material    Material Description
   X               Hot
   B               Cold
   C               Temp
-------------------------------------
Sheet 2       
Material       Invoice Value
   X               2.7645  
   X               3.9
   B               4.6

期望的输出:

Sheet 3
Material        Invoice Value
   Hot               2.7645  
   Hot               3.9
  Cold               4.6

我在尝试着:

  1. 在各个工作表中查找具有指定标题的列
  2. 对于工作表1的每一行“材料”列,找到工作表2中与工作表1中相同“材料”对应的“材料”
  3. 将工作表2中“材料”列的行中的文本替换为工作表1中“材料描述”的相应值

对于第1项,我得到了:

Sub Replace()

    Dim startrow As Long
    Dim custrng As Range
    Dim matdatrng As Range
    Dim valrng As Range
    Dim dscrng As Range
    Dim matname As Range

    startrow = 2

    Set rcustrng = Worksheets("Data").UsedRange.Find("Customer Name", , xlValues, xlWhole)
    Set matdatrng = Worksheets("Data").UsedRange.Find("Material", xlValues, xlWhole)
    Set valrng = Worksheets("Data").UsedRange.Find("Invoiced Value", xlValues, xlWhole)
    Set matname = Worksheets("Names").UsedRange.Find("Material", xlValues, xlWhole)
    Set dscrng = Worksheets("Names").UsedRange.Find("Material Description", xlValues, xlWhole)

End Sub

任何和所有的帮助/建议表示赞赏,我希望将此扩展到三个数据集。

vba excel-vba replace
1个回答
0
投票

我可以通过使用由Mumps提供的以下链接中的代码来完成:

https://www.ozgrid.com/forum/forum/help-forums/excel-general/138286-vba-to-join-tables-with-unique-key-in-first-column

Sub CopyRange()
Application.ScreenUpdating = False
Dim LastRow As Long
LastRow = Sheets("OCData").Cells.Find("*", SearchOrder:=xlByRows,      SearchDirection:=xlPrevious).Row
Dim ID As Range
Dim foundID As Range
For Each ID In Sheets("OCData").Range("C2:C" & LastRow)
    Set foundID = Sheets("NamesList").Range("B:B").Find(ID, LookIn:=xlValues, lookat:=xlWhole)
    If Not foundID Is Nothing Then
        Sheets("NamesList").Range("B" & foundID.Row & ":E" & foundID.Row).Copy Sheets("OCData").Range("J" & ID.Row)
    End If
Next ID
Application.ScreenUpdating = True
End Sub

令人敬畏的代码,节省了我很多时间。

© www.soinside.com 2019 - 2024. All rights reserved.