VBA:将数据复制到新工作表中,同时保持其相对性

VBA:将数据复制到新工作表中,同时保持其相对性,vba,excel,Vba,Excel,我的excel文件中有两张表,一张是客户的后端数据(日期、数量、费率等),另一张是汇总表,只有在交易“打开”时才列出这些信息。因此,后端数据表有一列说明事务是否打开,如果打开,则将其复制到摘要表中。因此,汇总表的行数基本上是不断变化的。这是我的代码(附言,它是有效的)。这段代码基本上是复制粘贴交易打开时的信息,删除交易不再打开时的信息,然后删除任何空行 我的主要问题是: 我希望这个代码是相对的,这样我就可以在汇总表的上面和下面插入行,而不影响数据 如果数据存在于汇总表之外,我不希望它被删除。基

我的excel文件中有两张表,一张是客户的后端数据(日期、数量、费率等),另一张是汇总表,只有在交易“打开”时才列出这些信息。因此,后端数据表有一列说明事务是否打开,如果打开,则将其复制到摘要表中。因此,汇总表的行数基本上是不断变化的。这是我的代码(附言,它是有效的)。这段代码基本上是复制粘贴交易打开时的信息,删除交易不再打开时的信息,然后删除任何空行

我的主要问题是:

  • 我希望这个代码是相对的,这样我就可以在汇总表的上面和下面插入行,而不影响数据
  • 如果数据存在于汇总表之外,我不希望它被删除。基本上,我希望代码只在特定的单元格范围内工作(命名范围是否有用?)


  • ws1.Range(“A”&i,“D”&i).PasteSpecial
    中,而不是使用
    i
    确定要粘贴到该工作表中的行。例如,“在最后使用的行之后”或“在具有特定名称的行之前”(例如
    Range(“BeforeThisRow”)。偏移量(-1,0)。row
    是命名范围之前的行)等,然后使用此行号而不是
    i
    粘贴到此处这取决于你如何确定这个行号,因为我们不知道你的工作表是什么样子。谢谢你的回复!我已经添加了摘要表的屏幕截图(包括一个命名的范围摘要)。如何将信息粘贴到命名范围的第1行,然后粘贴到第2行,以此类推?我试着循环它,但没有成功。我想你可以使用
    ws1.Range(“Summary”).Rows(I).PasteSpecial
    。这将粘贴到相对于汇总范围的行
    i
    Option Explicit
    
    Sub Main()
    
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim Last_Row2 As Long, i As Integer
    
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    
    Last_Row2 = ws2.Range("A" & Rows.Count).End(xlUp).Row
    
    Application.ScreenUpdating = False
    
    With ws2
    For i = 1 To Last_Row2 Step 1
    
        If .Range("F" & i).Value = "OPEN" Then
    
            ' copy pastes the info if the transaction is OPEN
    
    ws2.Range("B" & i, "E" & i).Copy
    ws1.Range("A" & i, "D" & i).PasteSpecial
    
        ElseIf .Range("F" & i).Value = "" Then
    
            ' deletes the info if the transaction is no longer OPEN
    
    ws1.Range("A" & i, "D" & i).ClearContents
    
        End If
    Next i
    End With
    
    Application.ScreenUpdating = True
    
            ' deletes blank rows in Summary Sheet
    
    Dim iCounter As Long
    
    Worksheets("Sheet1").Range("A3:D50").Select
    
    With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    For iCounter = Selection.Rows.Count To 1 Step -1
    If WorksheetFunction.CountA(Selection.Rows(iCounter)) = 0 Then
    Selection.Rows(iCounter).EntireRow.Delete
    End If
    Next iCounter
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    
    End With
    
    ws1.Cells(1, 1).Select
    
    End Sub