答案 0 :(得分:0)
如果我不熟悉某些VBA功能,我会创建一个如下所示的小例程并使用该功能:
Option Explicit
Sub Demo()
Dim Rng As Range
Dim Rng1 As Range
Dim Rng2 As Range
Dim Rng3 As Range
With Worksheets("Sheet1")
Set Rng1 = .Range("A1:D5")
Set Rng2 = .Range("A6:D10")
Set Rng = Union(Rng1, Rng2)
Debug.Print "Rng1=" & Rng1.Address & " Rng2=" & Rng2.Address
Debug.Print " Rng=" & Rng.Address
Debug.Print "Notice that Union has combined the two ranges because they are contiguous"
Debug.Print
Set Rng1 = .Range("A1:D5")
Set Rng2 = .Range("F1:F6")
Set Rng = Union(Rng1, Rng2)
Debug.Print "Rng1=" & Rng1.Address & " Rng2=" & Rng2.Address
Debug.Print " Rng=" & Rng.Address
Debug.Print "Notice that Union could not combined these two ranges because they are not contiguous"
Debug.Print
Set Rng1 = .Range("A1:D5")
Set Rng2 = .Columns("B")
Set Rng = Intersect(Rng1, Rng2)
Debug.Print "Rng1=" & Rng1.Address & " Rng2=" & Rng2.Address
Debug.Print " Rng=" & Rng.Address
Debug.Print "Intersect gives the overlap between two ranges"
Debug.Print
End With
End Sub
上面的宏演示了Union
和Intersect
提供的一些功能。
您需要注意的关键点:
尝试使用我的宏,然后展开它以更好地符合您的要求。
响应更多信息请求的额外部分
我认为您关心的是处理不连续的列。
在我的第一条评论中,我用Dim Rng As Range
说,以下将Rng设置为说范围:
Set Rng = Range("A1:AD50")
Set Rng = Range(Cells(1, 1), Cells(50, 30))
另外,A1:AD50是一个可以在运行时创建的字符串,1,1,50和30可以被变量替换。
您有时会看到如下语句:
Set Rng = Range("A1:AD" & RowLast)
其中RowLast
已通过多种技术之一设置为最后一次使用的行。
我不相信我曾经使用过如上所述的陈述,因为我更喜欢:
Set Rng = Range(TopLeftCell, BottomRightCell)
其中TopLeftCell
和BottomRightCell
的格式为:
Cells(Row, Column)
在Cells(Row, Column)
中,Row
必须是整数或整数变量。 Column
可以是字符串(“A”,“B”,“C”等)或整数(1,2,3等)或字符串变量或整数变量。我通常发现整数变量最方便,因为我可以写:
For ColCrnt = 1 To 30
Cells(RowCrnt, ColCrnt).Value = ???
Next
在上面我写了Range
或Cells
,它引用了活动工作表。我几乎从不需要引用活动工作表,因为大多数宏都处理应该明确引用的特定工作表。引用活动工作表意味着您必须依赖用户在启动宏时激活正确的工作表,或者必须使用慢速Worksheet.Activate
方法。
最好写点像
With Worksheets("Data")
RowLast = .Cells(.Rows.Count, "A").End(xlUp).Row ' Last row with a value in column A
ColLast = .Cells(1, .Columns.Count).End(xlToLeft).Row ' Last column with a value in row 1
Set Rng = .Range(.Cells(1, 1), .Cells(RowLast, ColLast))
End With
最后,我想补充一点,您将在任何在线Excel VBA教程的开头附近找到所有这些信息。一两个小时寻找你喜欢的教程,然后通过它完成它将及时回报自己保存得非常快。