Notes-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

 

posted @ 2019-11-20 10:48  Zoe-D  阅读(587)  评论(0编辑  收藏  举报