【转载】EXCEL VBA-区域选择
1- 区域命名
ThisWorkbook.Names.Item("foo").RefersTo =Tabelle1!$A$1:$B$1 ThisWorkbook.Names.Item("foo").RefersToRange.Address $A$1:$B$1
2- 一个有趣的case
Sub 按钮1_Click() For j = 1 To 1000 Cells(j, 1) = j For i = 1 To 10000 DoEvents Next i Next j End Sub
3- 行号列号的几种抓取方式
Workbooks(1).Worksheets.Count
UsedRange.Rows.Count; //使用行数
UsedRange.Columns.Count; //使用列数
4- Range
4-1 定位单元格
Range(“A1”) Cells(1,1) Cells(1,”A”)
4-2 边缘区域的定位
Range(“A1”).Offset(1,1) End(xlDown) End(xlToLeft) End(xlToRight)
EntireRow属性和EntireColumn属性可以获取单元格或单元格区域所在的整行或整列。一个典型的应用就是隐藏满足条件的单元格所在的行或列。此外,通过设置行或列的背景色,可以达到高亮显示所在单元格行或列的效果。
4-3 Resize
Resize能基于选中单元格调整range区域大小,选中current range中除标题行以外的单元格区域
Set rng=Range('B1').CurrentRegion rng.Offset(1,0).Resize(rng.Rows.Count-1, rng.Columns.Count).Select
4-4 常用Region
CurrentRegion属性和UsedRange属性能够让我们“立刻获得”大片单元格区域。
CurrentRegion属性相当于在工作表中按下组合键,快速选择由空行和空列围成的一片单元格区域。
选取效果类似 - Ctrl + Shift + *
Range('A1').CurrentRegion.Select Range('C3').CurrentRegion.Select ActiveCell.CurrentRegion.Select Dim rng As Range Set rng = Range('B2').CurrentRegion MsgBox '当前单元格区域共有'&rng.Rows.Count&'行,'&rng.Columns.Count&'列'
UsedRange属性用于获取工作表中由所使用的单元格围成的方形单元格区域,无论该区域内是否有空行或空列,即使在单元格中应用了格式但还没有输入内容,该单元格也会被UsedRange属性获取,从而包含到已使用的单元格区域中。
4-5 SpecialCells
VBA提供了SpecialCells方法,通过指定类型参数,快速定位到特定的单元格,例如参数指定为xlCellTypeLastCell则会定位到工作表中最后使用的单元格。
类似- Ctrl + G
Selection.SpecialCells(clCellTypeBlank).Select
Range.SpecialCells(Type,Value)
Dim rng as Range Set rng = Selection.SpecialCells(clCellTypeLastCell) rng.Address(RowAbsolute:=False,ColumnAbsolute:=False)
4-6 区域包含关系
使用Intersect方法。Union方法和Intersect方法还可以用于判断一个区域是否包含另一个区域,在此基础上,可以进一步编写代码保护单元格,防止用户修改特定的单元格区域。
rngIntersect = Intersect(Range('A1:C5'),Range('B3:E8'))
Range('A1:B2').Font.ColorIndex=3 Range('E8:F9').Font.ColorIndex=3 Union(Range('A1:B2'),Rande('E8:F9')).Font.ColorIndex=3
4-7 非连续区域的选择
如果我们选择的单元格或者单元格区域不连续,而是分散在工作表的不同地方,那么可以使用Areas集合来获取这些区域。通过Areas集合,可以方便地获取一整块满足条件的区域。若配合循环语句使用,会使代码简洁而强大。
Dim rng As Range For each rng InCells.SpecialCells(xlCellTypeConstants,1).Areas rng.Interior.Color = RGB(255,0,0) Next rng