本小节介绍所有单元格的引用、多个区域的引用、当前区域、已用区域的引用,以及区域的并和交的引用等内容。[大谦Excel,dqexcel点com]
引用所有单元格
引用工作表中的所有单元格,可以使用工作表对象的cells属性。使用另外两种方式,还可以通过引用所有行或所有列来实现。
>>> sht.Cells.Select()
>>> sht.Range(sht.Cells(1,1),sht.Cells(sht.Cells.Rows.Count,sht.Cells.Columns.Count)).Select()
引用所有行
>>> sht.Rows.Select()
引用所有列
>>> sht.Columns.Select()
引用所有行
>>> sht.api.Rows.Select()
引用所有列
>>> sht.api.Columns.Select()
一次引用多个区域
用列表工作表对象的Range(range)属性一次引用多个区域时,多个区域之间用逗号间隔,区域用区域左上角单元格和右下角单元格的坐标表示,坐标之间用冒号间隔。下面一次引用和选择工作表sht中的A2, B3:C8, E2:F5等3个区域。
>>> sht.Range("A2, B3:C8, E2:F5").Select()
效果如图2-3所示。
图2-3 一次引用多个区域
引用指定单元格的当前区域
下面介绍单元格当前区域的引用。首先,什么是给定单元格的当前区域?图2-4中阴影部分表示的是单元格C3的当前区域。所以,单元格的当前区域,指的是从该单元格向上下左右四个方向扩展,直到包含数据的矩形区域第一次被空格组成的矩形环包围,即在四个方向上都是空行或空列(在区域的范围内为空行空列,不是指整个行是空行空列),这个区域就是该单元格的当前区域。
图2-4 单元格C3的当前区域
引用给定单元格的当前区域,使用单元格对象的current_region属性,API方式下使用CurrentRegion属性。
>>> sht.Range("C3").CurrentRegion.Select()
引用工作表的已用区域
工作表的已用区域,指的是工作表中包含所有数据的最小区域。使用UsedRange属性引用指定工作表的已用区域。
>>> sht.UsedRange.Select()
对于工作表sht中给定的单元格数据,它的已用区域如图2-5所示。
图2-5 工作表的已用区域
引用区域的集合
区域的集合运算包括区域的并运算和区域的交运算。如图2-6中,两个矩形区域放在一起,有部分重叠。它们的并包括全部阴影部分,它们的交为二者的重叠部分,即图中深色阴影部分。
图2-6 区域的并与交
用Application对象的Union方法获取两个区域的并,用Intersect方法获取两个区域的交。下面计算区域B4:D8和C2:F5的并和交。
>>> app.Union(sht.Range("B4:D8"), sht.Range("C2:F5")).Select()
>>> app.Intersect(sht.Range("B4:D8"), sht.Range("C2:F5")).Select()
扩展引用当前工作表中的单元格区域
前面我们介绍了区域的偏移,它是通过将区域整体平移来获取新的区域。这里介绍另外一种方式,即通过对已有单元格向上下左右扩展来获得新的区域。使用单元格对象的Resize(resize)方法扩展区域。
Resize方法只能得到原单元格扩展后的位置上的单元格。所以,对于后者,首先获取区域的右下角单元格,与原单元格重新组合成一个区域。
只给一个参数时,表示上下方向的扩展,大于1时表示向下扩展,小于1时表示向上扩展。给两个参数时,如果第一个参数的值为1,表示左右方向的扩展,大于1时表示向右扩展,小于1时表示向左扩展。如果两个参数都不为1,表示上下和左右两个方向都有扩展。
下面演示通过对指定单元格C2进行上下、左右和行列三个方向扩展来得到新的区域,选择它们。
>>> sht.Range("C2", sht.Range("C2").Resize(3)).Select()
>>> sht.Range("C2", sht.Range("C2").Resize(1, 3)).Select()
>>> sht.Range("C2", sht.Range("C2").Resize(3, 3)).Select()
从当前单元格开始创建一个3行3列的区域。
>>> sht.Range(app.ActiveCell, app.ActiveCell.Resize(3, 3)).Select()
>>> sht.range("C4").expand("right").select()
图2-7 用expand方法进行table扩展