Vba 查找空单元格,然后循环以获取新数据
我有一个电子表格,它包含31个不同的选项卡,包含每日数据,然后将其汇总为每月选项卡,然后将每天的数据转换为软件上载。为了加快我的过程,我尝试将每天的上传一次合并到另一个选项卡中,而不是每天手动复制/粘贴。目前,为了查看每天的上传,我正在将B3单元格中的号码更改为我需要的日期,它将为我提供上传数据 编辑: 我希望这将如何工作是宏将把1放在上传选项卡的单元格B3中,获取A10:I34中的数据,将其粘贴到上传文件选项卡A列中的第一个空单元格,然后返回上传选项卡,将单元格B3更改为2,复制A10:I34中的数据,将其粘贴到上传文件选项卡A列中的下一个空单元格。。。重复此操作,直到第31天的数据粘贴到“上载文件”选项卡上 数据位于名为上载的选项卡中 选项卡上载时唯一可以更改的单元格是单元格B3 数据范围为A10:I34 数据需要在选项卡上载文件上粘贴值 上载文件在第1行中包含软件所需的格式化数据 编辑: 在粘贴每天的数据后,宏需要查找下一个空行 循环需要在第31天停止 我现在的问题是,我无法让它返回到上传选项卡,将日期更改为第二天,然后继续空单元格循环。它只是将数据粘贴到原始数据上,或者不将单元格值更改到第二天。下面是我改变日子的方法 编辑3:我调整了它,它现在可以工作了。请看一看,如果你认为它可以改进,请告诉我。为/下一步添加 有什么建议吗?以前的尝试只是在Upload Files(上传文件)选项卡上选择了上一次数据结束的确切单元格,但在Upload(上传)选项卡中添加行意味着我必须手动重新计算将粘贴哪些单元格,这与手动完成整件事一样耗时Vba 查找空单元格,然后循环以获取新数据,vba,excel,loops,Vba,Excel,Loops,我有一个电子表格,它包含31个不同的选项卡,包含每日数据,然后将其汇总为每月选项卡,然后将每天的数据转换为软件上载。为了加快我的过程,我尝试将每天的上传一次合并到另一个选项卡中,而不是每天手动复制/粘贴。目前,为了查看每天的上传,我正在将B3单元格中的号码更改为我需要的日期,它将为我提供上传数据 编辑: 我希望这将如何工作是宏将把1放在上传选项卡的单元格B3中,获取A10:I34中的数据,将其粘贴到上传文件选项卡A列中的第一个空单元格,然后返回上传选项卡,将单元格B3更改为2,复制A10:I34
谢谢,我在代码中添加了一些注释供您理解:
Sub Test1()
Dim Count As Integer
Dim lLastRow As Long
Dim i As Long
Count = 2
' This would give you the last used row in the Sheet
lLastRow = Worksheets("Upload Files").Cells(Worksheets("Upload Files").Rows.Count, 1).End(xlUp).Row
For i = 1 To lLastRow
' You don't specify if you are trying to do anything in this section inside de Loop
' but if you just want to cound for the last row, you can remove the loop.
Next i
If Worksheets("Upload").Range("B3").Value < 32 Then
' Dont need this.
'Worksheets("Upload").Range("B3").Select
Worksheets("Upload").Range("B3").Value = Worksheets("Upload").Range("B3").Value + 1
' Here it would be nice if you specify from what Sheet you are copying this range. I guess is Upload.
Worksheets("Upload").Range("A10:I34").Copy
Worksheets("Upload Files").Range("A" & Count).PasteSpecial xlPasteValues
End If
End Sub
我想你想要的是如下的东西:
Option Explicit
Sub upload()
Dim targetSht As Worksheet
Set targetSht = Worksheets("Upload Files")
Dim i As Long
With Worksheets("Upload")
For i = 1 To 31
.Range("B3").Value = i
Application.Calculate
With .Range("A10:I34")
targetSht.Cells(targetSht.Rows.Count, 1).End(xlUp).Offset(1).Resize(.Rows.Count, .Columns.Count).Value = .Value
End With
Next
End With
End Sub
问题可能是每次运行宏时都将计数重置为2?此外,您复制的区域没有指定工作表。计数重置是有意的,数据无法粘贴到第1行,因此当它查找下一个空单元格时,必须从A2开始。我甚至没有注意到那张纸上的错误!非常感谢。还有一点呢?我想每次都需要从2开始,因为上传完成后,我会将以前的上传文件选项卡复制到一个新的选项卡以供参考,然后从上传文件选项卡中删除所有数据,因此,我认为从顶部重新开始比从最后一个计数值开始更有意义。我建议使用Long而不是Integer。Excel的行数超过Integer所能处理的,在VBA中使用Integer没有任何好处。Integer是他使用的变量。我用long表示添加的两个变量。但是是的@malbane,不需要使用整数作为Pᴇʜ提到。将要复制的最大行数是1085,这对integer来说太多了吗?希望代码在粘贴到第二个选项卡后能够返回,并在第二天获得。因此,理论上,它会从Upload选项卡获取第1天的数据,将其粘贴到Upload files选项卡上的第一个空行,然后返回Upload选项卡获取第2天的数据,然后将其粘贴到第一天的数据下。
Option Explicit
Sub upload()
Dim targetSht As Worksheet
Set targetSht = Worksheets("Upload Files")
Dim i As Long
With Worksheets("Upload")
For i = 1 To 31
.Range("B3").Value = i
Application.Calculate
With .Range("A10:I34")
targetSht.Cells(targetSht.Rows.Count, 1).End(xlUp).Offset(1).Resize(.Rows.Count, .Columns.Count).Value = .Value
End With
Next
End With
End Sub