2013-07-25 62 views
0

我有2个范围变量。我想有一个循环,它接受一个范围变量的第一行并将其添加到另一个范围变量的末尾。Excel VBA - 从一个范围取第一行,并将其放到另一个范围的末尾。阵列?

即:

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

我想从RNG2采取行11,并给它RNG1这样的结果是:

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

每个回路运行时,它会从时间rng2的顶部,并给出rng1的结尾。

我试图用Union或Resize做到这一点,但它并不按照我需要的方式工作。在Java中,我知道这可以通过使用数组完成,但我不知道如何在VBA中进行布局。

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

任何建议将大大appriciated。

+2

'设置rng2 = rng2.offset(1,0).Resize(rng2.Rows.Count - 1,rng2.Columns.Count)' –

回答

1

Resize修改范围的大小(因此在这里是最后一行)。它在第二行不起作用,因为你不想改变最后一行,而是开始一行;您可以重新定义rng2以符合预期条件。通过增加rowsToAddrng1最后一行,并同步,重新定义rng2使得rowsToAdd被添加到它的第一行:

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)) 

此代码提供在实施例中所示的功能,即是。最后一行rng2保持不变。

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

+0

这将是EntireRow在这些范围的每个范围内,因此可以留下colName出。因此,这将采用rng2的第一行,以便它不再计入rng2变量中,并将其放在rng1的最后一行上? – user1305569

+0

@ user1305569建议的代码执行所需的操作。请不要盲目使用它;但了解它的功能以及它为什么这样做。在Tim Williams的评论中,你可以看到不同的方式来实现你想要的东西(不能只依靠调整大小;但是也可以重新定义范围)。依靠你喜欢的方法,但主要是想法清楚:记住你在两种不同的现实中使用相同的代码。如果让你有一个合适的图片,写一点长的代码会好1000倍。 PS:最好包括列信以避免问题。 – varocarbas

相关问题