gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:36:48 24 4
gpt4 key购买 nike

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

来源.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

Traget.xlsx
 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
    两者)行和列明智。如果匹配,则来自信号的数据和
    来自 Source 的导体列将添加到 Target 文件的 Signal
    和导体柱。匹配数据的标准是第一行
    源文件中的 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 语句中给了我错误。 error

    最佳答案

    我已经测试了代码并且它可以工作。

    有几个问题:

  • 你不能使用 Value.Copy Value指单元格中的值公式或文本字符串的结果
  • Columns.Count计算所有 Columns在工作表中,这同样适用于 Rows .我添加了其他代码来确定使用量 ColumnsRows
  • Excel 中的列和行从 1 开始,因此没有 Row 0,用作 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

    关于vba - 如何按行和列比较两个工作簿中的数据,将数据添加到目标工作簿中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41276542/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com