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