VBA列自动合并?

我正在用VBA编写一个程序,首先从一系列单元格中编译一个Range,然后循环遍历这个范围来收集单元格中的数据。

问题是我需要范围来维护添加单元格的顺序,以便我可以在正确的顺序中收集数据。 如果数据在相邻的列中,则范围会将其转换为行堆栈。

看我的意思,如果你运行这个程序:

Sub test_function()

Dim My_Range As Range

Dim My_Cell As Variant

昏暗我作为整数

我= 0

Set My_Range = Union(ActiveSheet.Range(“A1:A5”),ActiveSheet.Range(“B1:B5”))

对于My_Range中的每个My_Cell

i = i + 1 My_Cell.Value = i 

下一个My_Cell

结束小组

您可以看到该范围是由相邻的两列数据(A1:A5和B1:B5)编译的,而不是此EXPECTED输出:

1 6

2 7

3 8

4 9

5 10

你得到

1 2

3 4

5 6

7 8

9 10

它将重现此行为,即使您一次添加一个单元格使用设置My_Range = ActiveSheet.Range(“A1”)设置My_Range =联合(My_Range,ActiveSheet.Range(“A2”))设置My_Range =联合(My_Range,ActiveSheet .Range(“A3”))等…

有什么办法来保存我添加单元格到一个范围的顺序? 或者是分开的相邻范围的唯一途径? 至less(如果我不能保持确切的顺序)是否有办法做第一行和第二行?

-Daniel

我会build议build立范围的集合。 然后,您可以遍历集合,这将保持添加范围的顺序。 如果您需要参照联合范围,则可以随后将它们合并。

例如:-

(未经testing的代码)

 Dim ranges As New Collection ranges.Add(ranges.Count, ActiveSheet.Range("A1")) ranges.Add(ranges.Count, ActiveSheet.Range("C6")) // etc. // then you can loop through the ranges in the order in which they were added Dim rg As Range For Each rg in ranges // do something with the range Next rg // you can also get a reference to the union if you want Dim unionRange as Range Set unionRange = ranges(0) Dim rg2 As Range For Each rg2 in ranges Set unionRange = Application.Union(unionRange, rg2) Next rg2 // do something with the union