Vba 如何按行和列比较两个工作簿中的数据,在目标工作簿中添加数据
我有两本excel工作簿,即“Source.xlsx”和“Target.xlsx”,其数据如下: Source.xlsxVba 如何按行和列比较两个工作簿中的数据,在目标工作簿中添加数据,vba,excel,excel-2010,Vba,Excel,Excel 2010,我有两本excel工作簿,即“Source.xlsx”和“Target.xlsx”,其数据如下: Source.xlsx A B C D E Signal From To Conductor Cable #112 68 145 1 1935 #113 78 146 2 1936 #114 88 147 3 1937 #115
A B C D E
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
A B C D E
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
Traget.xlsx
A B C D E
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
A B C D E
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
要求:
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语句中给了我错误 我已经对代码进行了测试,它可以正常工作 有几个问题:
- 您不能使用
值。Copy
值是指单元格中的值,即公式或文本字符串的结果
对工作表中的所有列。计数
进行计数,这同样适用于列
。我添加了其他代码来确定使用的行
和列
行
- Excel中的列和行从1开始,因此没有
0,它被用作i=0的行
的起始行,随后我将其从1更改为“LastRow”,我假设您希望遍历每一行到列_count
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
循环中
I
的初始值为0
,您不能有单元格(0,2)
您需要嵌套循环才能在第二张表中找到正确的行,@Jean您的答案正确。感谢您的回复。除了我在您的答案中所做的编辑之外,还有其他方法可以将整行的颜色设置为其他颜色吗?您好,@Divyanshu只需将最后一个If
语句的最后一行更改为以下内容:targetsheet.Rows(CurrentRow).Interior.color=vbGreen