全民一起VBA 提高篇第15回

第十五回 传递Range提升自定义函数,巧用属性分辨公式型内容

1. 如何确定一个range对象的行列循环i与j?

1. first way(**重点**'使用range.row规则来直接确定一个range对象的行列i与j的循环
for i=range.row to range.row+range.rows.count-1
for j=range.column to range.column+range.columns.count-1

2. second way
'二维数组读取range对象后,使用bound函数来确定二维数组行列i与j的循环
for i=LBound(a, 1) to UBound(a, 1)
for j=LBound(a, 2) to UBound(a, 2)

例如a = Range("A1:F10")
 LBound(a, 1)=1UBound(a, 1)=10
 LBound(a, 2)=1UBound(a, 2)=6

PS:上面有两种方法,适用对象有一定的差异性。
第一种方法常常是用于直接对range对象的操作,后续可以直接根据i,j值对cells(i,j)进行操作。
第二种方法是针对二维数组对象进行的操作,具有一定的局限性。后续操作都是基于数组的,不能直接对cells操作。

例如当range("A3:D6")时,二维数组相当于一个4×4的区域
a = Range("A3:D6")
'此时默认4×4的区域是从1开始的,所以是a(1 to 4,1 to 4).
LBound(a, 1)=1UBound(a, 1)=4
LBound(a, 2)=1UBound(a, 2)=4

bound函数相关知识点
Ubound(s):一维数组最大下标
Lbound(s):一维数组最小下标
Dim s(2 to 5,3 to 7)
Ubound(s,1) Ubound(s,2):二维数组第一维5和第二维最大下标7
Ubound(s,1) Ubound(s,2):二维数组第一维5和第二维最大下标7

2.不用i、j双循环,将range中的每个单元格进行逐一运算。

重点:for each 单元格 in range

例如:给一个工作簿中所有worksheet里的range中填充为红色的数据进行汇总
Dim r as range,r1 as range,w as worksheet,s%
'将变量s初始化为0,然后用于逐步累加红色数字
for each w in worksheets
   s=0
   set r=w.usedrange
   for each r1 in r
   If r1.Font.Color=vbRed Then
        s=s+rl.Value 
   End If
   '将累加结果s写入本工作表单元格内	
   w. Cel1s(1,1)=s 
Next w

3.range为一个单元格时,判断是否为公式?

Range.hasFormula 属性
当该Range为一个单元格时,若是公式则返回True,否则返回False。
Range.Formula 属性
当该Range为一个单元格时,若是公式则返回公式文本(例如:”=C4“),否则与Value属性一样,返回单元格内容(例如:“25”)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值