VBA Excel:将新数据复制到上一行 + 上一数据集的 1

VBA Excel: Copying new data to lastrow + 1 of previous dataset

提问人:Hajoroeters 提问时间:11/7/2023 最后编辑:JohnMHajoroeters 更新时间:11/9/2023 访问量:61

问:

我目前正在处理一个 Excel 宏,我将数据从一个工作表 (sheet1) 获取到另一个 (sheet2),该工作表当前已经在工作。但是,我想确保如果 sheet1 中的数据发生更改(例如,当新的报告季度开始时),新数据不会复制到现有数据上,而是复制到现有数据下方。

我目前有以下代码,它仅根据特定值(“应计第 3 季度 - 2023 年”)复制数据。使用绿色注释,我尝试将数据复制到最后一行 + 1,这不能有效地工作。

请参见以下代码:

Sub Accruals()

    Dim wsCopy As Worksheet
    Dim wsDest As Worksheet
    Dim i As Long
    Dim j As Long
    Dim LastRowCopy As Long
    Dim LastRowDest As Long
    
        Set wsCopy = Worksheets("Sheet1")
        Set wsDest = Worksheets("Sheet2")
    
    LastRowCopy = wsCopy.Cells(Rows.Count, "A").End(xlUp).Row
    LastRowDest = wsDest.Cells(Rows.Count, "A").End(xlUp).Offset(1).Row
    
    j = 1
    
    For i = 1 To LastRowCopy
        If wsCopy.Cells(i, 9).Value = "Accrual Q3 2023 - " Then
            
            wsCopy.Rows(i).Copy
            wsDest.Rows(j + 1).PasteSpecial xlPasteValues
            
            
            'wsCopy.Rows(i).Range("A2:K" & LastRowCopy).Copy
            'wsDest.Rows(j).Range("A" & LastRowDest).PasteSpecial xlPasteValues
            j = j + 1
        End If
    Next i
      
End Sub

我苦苦挣扎的另一个问题是,我根据“2023 年第三季度应计 - ”限制复制的数据。目前,仅选择具有此确切文本的变量。但是,我想知道是否可以进行这种限制,可以指定前几个字母而不是整个文本。在普通的 Excel 中,将使用 Left 函数。这在 VBA 中也可以吗?

我希望收到关于我的两次斗争的意见。

我尝试了各种方法将数据复制到当前数据的最后一行之后。此外,我看了很多 youtube 视频。

VBA Excel-2010

评论

1赞 CDP1802 11/7/2023
无需使用,然后.您可以使用,但更容易的是 * 是任何文本。jwsDest.Rows(LastRowDest).PasteSpecial xlPasteValues).PasteSpecial xlPasteValuesLastRowDest = LastRowDest + 1Left()If wsCopy.Cells(i, 9).Value Like "Accrual*" Then
0赞 Hajoroeters 11/7/2023
效果很好,非常感谢!

答:

0赞 Black cat 11/7/2023 #1

你能试试这个吗?

Sub Accruals()

    Dim wsCopy As Worksheet
    Dim wsDest As Worksheet
    Dim i As Long
    Dim j As Long
    Dim LastRowCopy As Long
    Dim LastRowDest As Long
    
        Set wsCopy = Worksheets("Sheet1")
        Set wsDest = Worksheets("Sheet2")
    
    LastRowCopy = wsCopy.Cells(Rows.Count, "A").End(xlUp).Row
    LastRowDest = wsDest.Cells(Rows.Count, "A").End(xlUp).Row        'modified
    
    j = 1
    
    For i = 1 To LastRowCopy
        If wsCopy.Cells(i, 9).Value = "Accrual Q3 2023 - " Then
            
            wsCopy.Rows(i).Copy
            wsDest.Rows(LastRowDest + j).PasteSpecial xlPasteValues 'modified
            
            
            'wsCopy.Rows(i).Range("A2:K" & LastRowCopy).Copy
            'wsDest.Rows(j).Range("A" & LastRowDest).PasteSpecial xlPasteValues
            j = j + 1
        End If
    Next i
      
End Sub

Left 函数也可以在 VBA 中使用。Microsoft Left 函数

评论

0赞 Hajoroeters 11/7/2023
效果很好,非常感谢!