Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Excel 动态mnacro比较两个表,如果在一个表上找不到行,则添加行;如果找到行但某些信息不同,则更新信息_Excel_Copy_Paste_Vba - Fatal编程技术网

Excel 动态mnacro比较两个表,如果在一个表上找不到行,则添加行;如果找到行但某些信息不同,则更新信息

Excel 动态mnacro比较两个表,如果在一个表上找不到行,则添加行;如果找到行但某些信息不同,则更新信息,excel,copy,paste,vba,Excel,Copy,Paste,Vba,我一直在写这个Excel宏,希望能得到一些帮助。我正在尝试创建一个动态宏,它将比较两个不同工作表中的两个表,如果不同,则更新一行的信息,如果不存在,则将新行复制到新表中。两个表都包含相同的信息列,并且每个数据行都有唯一的产品代码。按下按钮后,如果在新表中未找到表1中该行的产品代码,则该行将被复制。如果在新表中找到产品代码,但列中的其他信息不同,则其他信息将在新表中更新。如果找到产品代码且其他信息相同,则不会复制该行。在表1中,我需要尽可能多的行 注意:我认为VLOOKUP可能是成功编写这个宏的途

我一直在写这个Excel宏,希望能得到一些帮助。我正在尝试创建一个动态宏,它将比较两个不同工作表中的两个表,如果不同,则更新一行的信息,如果不存在,则将新行复制到新表中。两个表都包含相同的信息列,并且每个数据行都有唯一的产品代码。按下按钮后,如果在新表中未找到表1中该行的产品代码,则该行将被复制。如果在新表中找到产品代码,但列中的其他信息不同,则其他信息将在新表中更新。如果找到产品代码且其他信息相同,则不会复制该行。在表1中,我需要尽可能多的行

注意:我认为VLOOKUP可能是成功编写这个宏的途径……下面是我迄今为止的尝试

Sub Copy_Attempt()

Application.ScreenUpdating = False

Dim s1 As Worksheet, s2 As Worksheet

Set s1 = Sheets("Raw Data")
Set s2 = Sheets("BAS Linkage Master")

Dim i As Integer
Dim j As Integer


Dim Proj_ID As String
Dim Lookup_Range As Range
Dim Linkage_Lookup_Range As Range
Dim Raw_Percent_Complete As String
Dim Linkage_Percent_Complete As String

Set Lookup_Range = s1.Range("A1:O1000")

Set Linkage_Lookup_Range = s2.Range("A6:N1000")

For i = 2 To 1000

        Proj_ID = s1.Range("F" & i).Value

        Raw_Percent_Complete = Application.WorksheetFunction.VLookup(Proj_ID, Lookup_Range, 10, False)

Next

For j = 7 To 1000

        Linkage_Percent_Complete = s2.Range("I" & j).Value

Next

If Raw_Percent_Complete = Linkage_Percent_Complete Then

            ' DO NOT COPY THAT ROW OVER

Else



    Percent_Complete = Range("I" & j).Value

            'UPDATE PERCENT COMPLETE FOR THAT SPECIFIC PRODUCT CODE


End If

Sheets("Raw Data").Activate

Columns("H").EntireColumn.Delete

Range("A2:P1000").Select
Selection.Copy

Sheets("BAS Linkage Master").Activate
Range("A" & Rows.Count).End(xlUp).Offset(1).Select

Selection.PasteSpecial

      '  Sheets("Welcome").Activate

     '   Range("A11:O11").ClearContents

Sheets("Raw Data").Activate

Range("A2:N10000").ClearContents

Application.CutCopyMode = False
Application.ScreenUpdating = True

Sheets("BAS Linkage Master").Activate

End Sub

这是一个很好的小脚本,可以查找差异并突出显示差异

Public Sub CompareSheets()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim cell As Range, rng As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set rng = ws1.Range("A1:B20")
For Each cell In rng
    Celladdress = cell.Address
    If cell <> ws2.Range(Celladdress) Then
        cell.Interior.Color = vbYellow
        ws2.Range(Celladdress).Interior.Color = vbYellow
    End If
Next cell

End Sub
公共子比较表()
将ws1标注为工作表,将ws2标注为工作表
变暗单元格作为范围,rng作为范围
设置ws1=工作表(“表1”)
设置ws2=工作表(“表2”)
设置rng=ws1.范围(“A1:B20”)
对于rng中的每个单元
Celladdress=单元格地址
如果单元格ws2.Range(单元格地址),则
cell.Interior.Color=vbYellow
ws2.Range(Celladdress).Interior.Color=vbYellow
如果结束
下一个细胞
端接头
可以使用相同的概念将值从一个表复制到另一个表

Public Sub CompareSheets()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim cell As Range, rng As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set rng = ws1.Range("A1:B20")
For Each cell In rng
    Celladdress = cell.Address
    If cell <> ws2.Range(Celladdress) Then
        ws2.Range(Celladdress).Value = ws1.Range(Celladdress).Value
    End If
Next cell

End Sub
公共子比较表()
将ws1标注为工作表,将ws2标注为工作表
变暗单元格作为范围,rng作为范围
设置ws1=工作表(“表1”)
设置ws2=工作表(“表2”)
设置rng=ws1.范围(“A1:B20”)
对于rng中的每个单元
Celladdress=单元格地址
如果单元格ws2.Range(单元格地址),则
ws2.Range(Celladdress).Value=ws1.Range(Celladdress).Value
如果结束
下一个细胞
端接头

这是一个很好的小脚本,可以查找差异并突出显示差异

Public Sub CompareSheets()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim cell As Range, rng As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set rng = ws1.Range("A1:B20")
For Each cell In rng
    Celladdress = cell.Address
    If cell <> ws2.Range(Celladdress) Then
        cell.Interior.Color = vbYellow
        ws2.Range(Celladdress).Interior.Color = vbYellow
    End If
Next cell

End Sub
公共子比较表()
将ws1标注为工作表,将ws2标注为工作表
变暗单元格作为范围,rng作为范围
设置ws1=工作表(“表1”)
设置ws2=工作表(“表2”)
设置rng=ws1.范围(“A1:B20”)
对于rng中的每个单元
Celladdress=单元格地址
如果单元格ws2.Range(单元格地址),则
cell.Interior.Color=vbYellow
ws2.Range(Celladdress).Interior.Color=vbYellow
如果结束
下一个细胞
端接头
可以使用相同的概念将值从一个表复制到另一个表

Public Sub CompareSheets()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim cell As Range, rng As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set rng = ws1.Range("A1:B20")
For Each cell In rng
    Celladdress = cell.Address
    If cell <> ws2.Range(Celladdress) Then
        ws2.Range(Celladdress).Value = ws1.Range(Celladdress).Value
    End If
Next cell

End Sub
公共子比较表()
将ws1标注为工作表,将ws2标注为工作表
变暗单元格作为范围,rng作为范围
设置ws1=工作表(“表1”)
设置ws2=工作表(“表2”)
设置rng=ws1.范围(“A1:B20”)
对于rng中的每个单元
Celladdress=单元格地址
如果单元格ws2.Range(单元格地址),则
ws2.Range(Celladdress).Value=ws1.Range(Celladdress).Value
如果结束
下一个细胞
端接头

RYGY7272非常感谢您!信不信由你,我仍然没有完全弄明白这一点,并且意识到我的问题没有得到很好的解释。我用图表制作了一个word文档,完美地解释了它,如果你能弄明白的话,我会付钱给你的!非常感谢你!信不信由你,我仍然没有完全弄明白这一点,并且意识到我的问题没有得到很好的解释。我用图表制作了一个word文档,完美地解释了它,如果你能弄明白的话,我会付钱给你的!