【问题标题】:Excel VBA - Take First Row from one Range and give it to the end of another Range. Array?Excel VBA - 从一个范围中取出第一行并将其放在另一个范围的末尾。大批?
【发布时间】:2013-07-25 09:11:32
【问题描述】:

我有 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 中,我知道这可以通过使用数组来完成,但我不确定在 VBA 中如何布局。

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

任何建议将不胜感激。

【问题讨论】:

  • Set rng2 = rng2.offset(1,0).Resize(rng2.Rows.Count - 1, rng2.Columns.Count)

标签: arrays excel vba loops range


【解决方案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 的第一行。

【讨论】:

  • 它将用于每个范围内的 EntireRow,因此 colName 可以省略。所以这将从 rng2 中取出第一行,使其不再计入 rng2 变量中,并将其放在 rng1 的最后一行?
  • @user1305569 建议的代码执行您想要的操作。请不要盲目使用;但要了解它的作用以及它为什么这样做。在蒂姆·威廉姆斯的评论中,您可以看到实现所需目标的不同方式(不能仅仅依靠调整大小;还必须重新定义范围)。依靠您喜欢的方法,但主要是让想法清晰:请记住,您在两个不同的现实中使用相同的代码。如果可以帮助您获得正确的图片,那么编写更长的代码会好 1000 倍。 PS:最好包含列字母以避免出现问题。
猜你喜欢
  • 2013-10-14
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
相关资源
最近更新 更多