我有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)
任何建议都会受到极大关注。
答案 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
的第一行。