提问人:Hajoroeters 提问时间:11/7/2023 最后编辑:JohnMHajoroeters 更新时间:11/9/2023 访问量:61
VBA Excel:将新数据复制到上一行 + 上一数据集的 1
VBA Excel: Copying new data to lastrow + 1 of previous dataset
问:
我目前正在处理一个 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 视频。
答:
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
效果很好,非常感谢!
评论
j
wsDest.Rows(LastRowDest).PasteSpecial xlPasteValues).PasteSpecial xlPasteValues
LastRowDest = LastRowDest + 1
Left()
If wsCopy.Cells(i, 9).Value Like "Accrual*" Then