如何比较两个工作簿行和列中的数据,将数据添加到目标工作簿中

我有两个Excel工作簿,即“Source.xlsx”和“Target.xlsx”的数据为:

Source.xlsx

ABCDE Signal From To Conductor Cable #112 68 145 1 1935 #113 78 146 2 1936 #114 88 147 3 1937 #115 98 148 4 1938 #116 108 149 1 1939 #117 118 150 2 1940 #118 128 151 3 1941 #119 138 152 4 1942 #120 148 153 1 1943 #121 158 154 2 1944 

Traget.xlsx

  ABCDE From To Conductor Signal Cable 68 145 1935 78 146 1936 88 147 1937 98 148 1938 108 149 1939 118 150 1940 165 151 1941 138 152 1942 122 133 1943 158 154 1944 

要求:

  1. 我想比较两个Excel工作簿(两个)行和列明智的数据。 如果匹配,来自Source的信号和导体列的数据将被添加到目标文件的Signal and Conductor列中。 数据匹配的标准是源文件中的第一行B列,C列和E列,第一行A列,B列和E列等等。

  2. 一旦数据被复制,想要将该行变成绿色,直到数据填充到单元格中。

我试过下面的代码:

 Sub E3ToEPlan() ' E3ToEPlan Macro ' Macro to Check/ Transfer data in E3 and EPlan Excel files Dim sourcebook As Workbook, targetbook As Workbook Dim sourcesheet As Worksheet, targetsheet As Worksheet Dim sourcefilename As String, targetfilename As String sourcefilename = "C:\Source.xlsx" targetfilename = "C:\Target.xlsx" Set sourcebook = Workbooks.Open(sourcefilename) Set targetbook = Workbooks.Open(targetfilename) Set sourcesheet = sourcebook.Worksheets(1) Set targetsheet = targetbook.Worksheets(1) Dim column_count As Long, row_count As Long column_count = sourcesheet.Columns.Count row_count = sourcesheet.Rows.Count 'sourcesheet.Range("A2:A9").Copy 'targetsheet.Range("D2:D9").PasteSpecial 'Condition to match the data in the other workbook Dim i As Integer, j As Integer For i = 0 To column_count 'For j = 0 To column_count If sourcesheet.Cells(i, 2).Value = targetsheet.Cells(i, 1).Value And sourcesheet.Cells( _ i, 3).Value = targetsheet.Cells(i, 2).Value And sourcesheet.Cells(i, 5).Value = targetsheet _ .Cells(i, 5) Then sourcesheet.Cells(i, 1).Value.Copy targetsheet.Cells(i, 4).Value.PasteSpecial sourcesheet.Cells(i, 4).Value.Copy targetsheet.Cells(i, 3).Value.PasteSpecial targetsheet.Cells(i, column_count).Interior.Color = vbGreen End If 'Next j Next i End Sub 

但它在If语句给我错误。 错误

我已经testing了代码,它的工作原理。

有几个问题:

  • 您不能使用Value.Copy Value指的是单元格中的值或公式或文本string的结果
  • Columns.Count统计工作表中的所有Columns ,这同样适用于Rows 。 我添加了其他代码来确定使用的ColumnsRows
  • Excel中的列和行从1开始,因此没有Row 0 Row ,它被用作For i = 0 To column_count的起始行,随后我改变了从1到'LastRow'的行为,我认为你想要遍历每一行。

见下面的代码:

 Option Explicit Sub E3ToEPlan() ' E3ToEPlan Macro ' Macro to Check/ Transfer data in E3 and EPlan Excel files Dim sourcebook As Workbook, targetbook As Workbook Dim sourcesheet As Worksheet, targetsheet As Worksheet Dim sourcefilename As String, targetfilename As String sourcefilename = "C:\Source.xlsx" targetfilename = "C:\Target.xlsx" Set sourcebook = Workbooks.Open(sourcefilename) Set targetbook = Workbooks.Open(targetfilename) Set sourcesheet = sourcebook.Worksheets(1) Set targetsheet = targetbook.Worksheets(1) Dim LastColumn As Long LastColumn = sourcesheet.Cells(1, Columns.Count).End(xlToLeft).Column Dim LastRow As Long With sourcesheet LastRow = .Range("A1").SpecialCells(xlCellTypeLastCell).Row End With 'Condition to match the data in the other workbook Dim CurrentRow As Long Dim SourceShtColB As String, SourceShtColC As String, SourceShtColE As String Dim TargetShtColA As String, TargetShtColB As String, TargetShtColE As String For CurrentRow = 1 To LastRow SourceShtColB = sourcesheet.Cells(CurrentRow, 2).Value TargetShtColA = targetsheet.Cells(CurrentRow, 1).Value SourceShtColC = sourcesheet.Cells(CurrentRow, 3).Value TargetShtColB = targetsheet.Cells(CurrentRow, 2).Value SourceShtColE = sourcesheet.Cells(CurrentRow, 5).Value TargetShtColE = targetsheet.Cells(CurrentRow, 5).Value If SourceShtColB = TargetShtColA And _ SourceShtColC = TargetShtColB And _ SourceShtColE = TargetShtColE Then targetsheet.Cells(CurrentRow, 4) = sourcesheet.Cells(CurrentRow, 1) targetsheet.Cells(CurrentRow, 3) = sourcesheet.Cells(CurrentRow, 4) targetsheet.Cells(CurrentRow, LastColumn).Interior.Color = vbGreen End If Next CurrentRow End Sub