Excel VBA - 从一个Range获取第一行并将其放到另一个Range的末尾。阵列?

时间:2013-07-25 12:55:36

标签: arrays excel vba loops range

我有2个范围变量。我希望有一个循环,它接受一个范围变量的第一行,并将其添加到另一个范围变量的末尾。

即:

rng1 = Range("1:10")
rng2 = Range("11:20")

我想从rng2取第11行并将其交给rng1,结果是:

rng1 = Range("1:11")
rng2 = Range("12:20")

每次循环运行时,它将从rng2的顶部开始并到达rng1的末尾。

我试图用Union或Resize来做这件事,但它不按我需要的方式工作。在Java中我知道这可以通过使用Arrays来完成,但我不确定如何在VBA中进行布局。

Set rng1 = rng1.Resize(rng1.Rows.Count + 1, rng1.Columns.Count)
Set rng2 = rng2.Resize(rng2.Rows.Count - 1, rng2.Columns.Count)

任何建议都会受到极大关注。

1 个答案:

答案 0 :(得分:1)

Resize修改范围的大小(在这种情况下是最后一行)。它在第二行不起作用,因为你不想改变最后一行,而是改变最后一行;您可以重新定义rng2以满足预期条件。

Dim rowsToAdd As Integer: rowsToAdd = 1
Dim colName As String: colName = "A"
Set rng1 = rng1.Resize(rng1.Rows.Count + rowsToAdd, rng1.Columns.Count)
Set rng2 = Range(colName & CStr(rng2.Row + rowsToAdd) & ":" & colName & CStr(rng2.Row + rng2.Rows.Count - 1))

此代码提供了示例中显示的功能,即:rng1最后一行增加rowsToAdd,同时重新定义rng2,以便添加rowsToAdd到第一排。 rng2的最后一行保持不变。

请记住,这是一种更具适应性的结构,而不仅仅是“从这个范围中取出并将其放入另一个范围”;它希望将行的变量名称添加到rng1的最后一行和rng2的第一行。