如何解决VBA循环将列块复制/粘贴到具有动态范围的另一个工作表中
我通常在这里找到答案,但是我已经被这个问题困扰了几天了。
我正在处理2张纸,一张包含新数据,一张包含历史数据。
在每张纸上,我都有列的“块”,这些块始终为4列宽,中间有一个空白列。并且具有不同的行长。
例如,在A到D列中有数据,然后是空白列,在F到I列中有数据,依此类推。如下:
Item1| | | | |Item2| | | |
Title|Title|Title|Title| |Title|Title|Title|Title|
data |data |data |data | |data |data |data |data |
data |data |data |data | |data |data |data |data |
| | | | |data |data |data |data |
目标:需要检查商品编号(例如:第一个图块的A1单元格)是否等于目标工作表(相同的A1单元格)上的商品编号。
需要将第3行(包含实际数据的第一行)中的数据复制到该列的第一个块的最后一行,直到包含数据的最后一行之后的第二张工作表。并为每个列块创建一个循环,直到源工作表的最后一列为止。
问题:列块的行长不同。目标表上的内容相同,每个块的行长都不同。这就是为什么我需要为每个块使用动态范围的原因。
我的代码在下面,我设法通过使用列字母使其适用于列的第一块,但是当我尝试将动态范围与变量一起使用时,它什么也没做(也没有错误消息),所以我不知道我在做什么错。
Sub copydata()
Dim wb As Workbook
Set wb = ThisWorkbook
Dim shta As Worksheet
Dim sht1 As Worksheet
Set shta = wb.Sheets("source")
Set sht1 = wb.Sheets("target")
Dim c As Long
Dim LastCol As Long 'last column sheet source
lrws As Long 'last row of source column
frwt As Long 'first available row in target column
Dim rngs As Range
Dim rngt As Range
Const frsrc As Long = 3 'first row on source column to copy from
For c = 1 To LastCol
If shta.Cells(1,c).Value = sht1.Cells(1,c).Value Then 'ensure data item are the same
lrws = shta.Cells(Rows.Count,c).End(xlUp).Row
frwt = sht1.Cells(Rows.Count,c).End(xlUp).Row + 1
LastCol = shta.Cells(frsrc,Columns.Count).End(xlToLeft).Column
Set rngs = shta.Range(c & frsrc).Resize(lrws,4) 'source range of first block of columns
Set rngtg = sht1.Range(c & frwt & ":" & c & frwt).Resize(rngs.Rows.Count) 'target range for first block of column
rntg.Value = rngs.Value
c = c + 4 'move to the next block of column
Else: MsgBox "Need to check table formatting"
End If
Next c
End Sub
可能有比每次移动一列列更好/更容易的方法,但这是我能想到的唯一方法。 我是VBA的新手,非常感谢您可能提出的任何评论/反馈。 提前非常感谢您!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。