、'单元格对象在VBA中一个非常基础,同时也很重要的。
'它的表达方式也是非常的多样化。
'----------------------------------------------------
'Range 对象
'代表某一单元格、某一行、某一列、某一选定区域(该区域可包含一个或若干连续单元格区域),或者某一三维区域。

'Range ("文本型装单元格地址")

'range的常见写法
Sub rng()
Range("a1").Select         '单元格
Range("a:a").Select        '列
Range("1:3").Select       '行
Range("a1:b10").Select     '相邻区域
Range("a1:d7 c4:e8").Select  '不相个邻区域(同时选择多个不同区域按住CTRL选择)
End Sub



  Range("a1:d7 c4:e8").Select 注意这里d7后面是空格表示取二者区域的交集若为逗号,则是取二者区域的并集



'写法:Range ("文本型装单元格地址1","文本型装单元格地址2")
'range的变化写法
Sub rng变化()
Range("a1:b10").Select '一般写法
Range("a1", "b10").Select '变化写法1
Range(Range("a1"), Range("b10")).Select '变化写法2
Range("a1") = 123
End Sub

'注意:
'1.如果在range前没有指定工作表,则默认为活动工作表
'2.如果对象不是活动工作表(如活动图表),则上面的代码也会出现错误

Sub 单元格对象例子()
Debug.Print Range("a:a").Count '计数工作表最大的行数
Debug.Print Range("1:1").Count '计算工作表最大的列数
Debug.Print Application.CountA(Range("a:a")) '计算工作表已使用的行数  ‘CountA计算有多少个非空单元格’
Debug.Print Application.CountA(Range("1:1")) '计算工作表已使用的列数
End Sub



动态单元格的引用(事先不清楚要引用的单元格)(用变量代替)



'1.range("地址区域").range("地址区域")
Sub 序号表示法()
Range("b2:d4").Range("b2").Select '相对引用的写法'
'参照前一个range的左上单元格
End Sub

'2.range地址区域中支持变量
Sub range的变量支持()
Dim a%
a = 3
Range("a" & a).Select
Range("c3:e5")(2).Select
End Sub

Sub 实例1动态选单元格或区域()
Dim i%
i = Application.CountA(Range("c:c")) '找到c列中已使用的最后一个单元格位置
Range("c" & i).Select '选择C列最后一格
Range("a1", "c" & i).Select '选择A1到C列的最后一格(方法一)
Range("a1:c" & i).Select '选择A1到C列的最后一格(方法二)
'小结:动态单元格区域的定位,可以应用到单据的保存等实际工作中
End Sub




 

 

Range的引用:

vb function 单元格_嵌套

 



Sub test()
Range("a1:c3")(3).Select
Range("a1:c3")(4).Select
End Sub



  结果第一次选择的是C1,第二次选择的是A2

总结:range(......)(number)引用的顺序是从左往右,然后从上往下,并且number是对前面区域的相对位置的引用,当然number可以为(2,3)这样的坐标

即:number是相对引用,并且有一定顺序

 

Range引用与索引值应用(有条件的平均工资):



'小结:
'1.这个索引值是参照前一个单元格区域左上单元格进行定位引用的
'2.索引值可以是正数,负数,零值,小数
Sub 大于等于2500的平增工资()
Dim rs%, rng%, lj&, k%
For rs = 1 To 60
     Range("b2:c20")(rs).Select'这句可以不用
     rng = Range("b2:c20")(rs)
    If rng >= 2500 Then lj = lj + rng: k = k + 1
Next rs
    MsgBox "大于等于2500的平均分为:" & Int(lj / k)
End Sub




 

  

 

 



'cells单元格引用法
'写法:cells(行号,列号)
Sub cells基本写法()
Cells(3, 4).Select '行列号均为数字
Cells(2, "c").Select '行为数字,列为列标字母
Cells.Select '全选
End Sub


'cells可以像range一样可以参照前面的单元格位置
Sub 参照写法()
Range("b3:f11").Cells(2, 2).Select
Range("b3:f11").Cells(6).Select '从左到右,从上到下
Range("b3:f11")(6).Select '与上一句相等
End Sub
'注意:
'1.cells中的数字一样支持正数,负数,0值,小数(四舍六入五单双)
'2.cells不能像range一样可以引用一个区域,只能引用一个单元格



'cells还可以嵌套在range中
Sub 嵌套()
Range(Range("b1"), Range("f11")).Select '这种嵌套方法写变量比较麻烦,代入变量比较麻烦
Range(Cells(3, 2), Cells(11, 6)).Select '这种嵌套方法写变量比较方便,可以代入四个变量
End Sub


Sub 动态引用行列区域()
Dim a%, b%
a = Application.CountA(Range("a:a"))
b = Application.CountA(Range("1:1"))
Range(Cells(1, 1), Cells(a, b)).Select
End Sub



  


三种单元格引用小结

vb function 单元格_VBA_02



Sub range引用区域且有变量()
Dim i
i = 1
Range("a1:c" & i).Select '引用单元格是区域且有变量,就用Range
Cells(i, "c").Select '引用的是单个单元格且有变量,就用Cells
[a1:19].Select '引用的是区域或单元格且无变量,就用简化的形式
End Sub



 Range.CurrentRegion属性



1 'Range.CurrentRegion 属性
2 '返回一个 Range 对象,该对象表示当前区域。
3 Sub 当前区域()
4     [a1].CurrentRegion.Select
5     [f8].CurrentRegion.Select
6 End Sub


效果图:

vb function 单元格_嵌套_03

&

vb function 单元格_VBA_04

 

 

 


1 Sub currentregion应用()
2     Rows(8).Clear
3     a = [b2].CurrentRegion.Address
4     b = [b5].CurrentRegion.Address
5     c = [b2].CurrentRegion.Count + 1
6     Set c = Range("b8", Cells(8, c))
7     c.FormulaArray = "=" & a & "+" & b '这个实际上是用工作表的公式"=a+b"
8 End Sub

效果图:

vb function 单元格_vb function 单元格_05