Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Vba 如何按行和列比较两个工作簿中的数据,在目标工作簿中添加数据_Vba_Excel_Excel 2010 - Fatal编程技术网

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

Vba 如何按行和列比较两个工作簿中的数据,在目标工作簿中添加数据,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

我有两本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    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
要求:

  • 我想比较两个excel工作簿中的数据(表1 (两者)行和列。如果匹配,则从信号和 源中的导体列将添加到目标文件的信号中 和导体柱。匹配数据的标准是第1行 源文件中的B列、C列和E列以及第一行A列, 分别为B列和E列,依此类推

  • 复制数据后,希望将该行涂成绿色,直到数据填充到单元格中

  • 我尝试了以下代码:

    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的
      到列_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
    

    循环中
    I
    的初始值为
    0
    ,您不能有
    单元格(0,2)
    您需要嵌套循环才能在第二张表中找到正确的行,@Jean您的答案正确。感谢您的回复。除了我在您的答案中所做的编辑之外,还有其他方法可以将整行的颜色设置为其他颜色吗?您好,@Divyanshu只需将最后一个
    If
    语句的最后一行更改为以下内容:
    targetsheet.Rows(CurrentRow).Interior.color=vbGreen