带循环的复制粘贴,彼此之间的范围不同

问题描述 投票:0回答:1

我是vba的新手。我想有一个代码,可以将最多200个不同的范围(B4:B48,C4:C48,D4:D48 ... GT4:GT48)复制到单元格(B50),并将不同的范围置于彼此之下。

因此,第一个范围(B4:B48)应该放在单元格B50中,第二个范围(C4:C48)应该放在单元格B95中,等等。

我想这段代码将需要循环,但是:并非所有200个范围都被填充,如果有空范围,则不需要复制该范围。每个范围可以包含不同数量的项目,尽管最大不同项目数始终为42。

谢谢您能进一步帮助我!

我添加了一个示例,这些功能只是使它更具视觉效果,但在vba代码中并不需要。

enter image description here

arrays excel vba loops copy-paste
1个回答
0
投票

首先,您需要一个一个地复制每个范围。

如果您的范围B4:B48, C4:C48,D4:D48...GT4:GT48遵循的规则就像总是向右移一列,那么您可以使用遍历所有列的循环。 B是第2列,GT是第202列。因此,您可以像

那样循环
Dim iCol As Long
For iCol = 2 To 202
    'your code here
Next iCol

然后可以将范围例如B4:B48动态写为

ws.Range(ws.Cells(4, iCol), ws.Cells(48, iCol))

wich表示如果iCol = 2,则Cells(4, iCol)B4Cells(48, iCol)B48,因此它表示这两个像元之间的范围。请注意,ws代表您的工作表,您应该在开始时指定该名称,以便可以使用该快捷方式ws

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("YourSheetName")

您还需要在B列中找到最后使用的单元格,以确定需要粘贴范围的位置。一个很好的方法是:

Dim LastUsedRow As Long
LastUsedRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

所以现在B列中的下一个空闲行是LastUsedRow + 1,这是您应该粘贴的位置。

尝试一下,如果遇到困难,请做一些研究。我给了你很多你需要的东西。其余的应该是真正的基本内容,您可以通过阅读一些基本教程或google轻松了解。

最后两件事会阻止您遇到常见问题:

  1. 我建议始终激活Option Explicit:在VBA编辑器中,转到工具选项Require Variable Declaration并正确声明所有变量。

  2. 您可能会受益于阅读How to avoid using Select in Excel VBA

© www.soinside.com 2019 - 2024. All rights reserved.