问题
I am trying to copy multiple ranges using Excel VBA. I understand that in order to select multiple ranges, syntax similar to that below is used:
Range("A1:B4000, F1:F4000").Select
This works fine in selecting the appropriate range. However, the following:
Range("A1:B4000, F1:F4000").Copy
...only copies the A1:B4000 range. This is the first problem I am facing.
Secondly, I would like to dynamically copy the data to the bottom row, which is not necessarily row #4000. If selecting a single range, the syntax is as follows:
Range("A1", Range("B1").End(xlDown)).Copy
The above code successfully copies everything from A1 to the bottom of the B column. I can't find any material on the net explaining how to do this for multiple selections.
What I'm essentially trying to do is copy A1:B(bottom) and F1:F(bottom), but the above two issues are stopping me. I assume this is a syntax issue..?
回答1:
Use the "Union" method.
Dim range1 as Range, range2 as Range, multipleRangeAs Range
Set range1 = Sheets("Sheet1").Range("A1:B4000")
Set range2 = Sheets("Sheet1").Range("F1:F4000")
Set multipleRange= Union(range1, range2)
Then you can mess around with mutipleRange as per normal.
回答2:
@Scott Holtzman provided the solution in a comment:
I would just adjust the following, since the OP asked for dynamic range names, Set range1 = Range("A1:B" & Range("B" & Rows.Count).End(xlUp).Row) to get the real last cell in column B. Do the same for column F as well
来源:https://stackoverflow.com/questions/12465368/copy-multiple-ranges-with-vba