VBA提高篇_16 传递Range提升自定义函数,巧用属分辨公式型内容

需求1: 工作簿内各表单元格区域红色字体求和

普通写法:


Sub demo()
    Dim i As Long, j As Long, s As Long
    Dim r As Range, w As Worksheet, r1 As Range 's和, w 表格, r 单元格, r1 子单元格
    
    For Each w In Worksheets
        s = 0 '和
        
        Set r = w.UsedRange
        For Each r1 In r
                If r1.Font.Color = vbRed Then
                
                s = s + r1.Value
                
        Next r1
        
        w.Cells(1, 1) = s
    Next w
    
End Sub

过程化写法: Range自定义函数

Sub demo()
    Dim w As Worksheet 's和, w 表格, r 单元格, r1 子单元格
    
    For Each w In Worksheets
        
        w.Cells(1, 1) = redCount(w.UsedRange)
        w.Cells(1, 1).Font.Color = vbBlue
    Next w
    
End Sub
--------------------------------------------------------------------------------------------------' 
' 本函数接收一个Range类型变量作为参数
' 然后扫描其中每一个单元格,将红色数字汇总返回>>>>>>>>>>>>>>可以当做自定义公式
Function redCount(r As Range)
    Dim s As Long
    Dim r1 As Range
    
    '和
    For Each r1 In r
        If r1.Font.Color = vbRed Then
            s = s + r1.Value
        End If
    Next r1
        
    redCount = s
        
End Function

需求2: 按行求积再相加


Function mySumProduct(r As Range)
    Dim i&, j&, k&, s&
    
    s = 0 '求和
    For i = 1 To  r.Rows.Count
        k = 1 '求积
        For j = 1 To r.Columns.Count
            k = k * Cells(i, j)
        Next j
        
        s = s + k
    Next i
       
    
    mySumProduct = s
End Function

Range.hasFormula属性

判断单元格是否是公式

当该Range为一个单元格时,若是公式返回True,否则返回False

Range.Formula属性

当该Range为一个单元格时,若是公式则返回公式文本,否则与Value属性一样,返回单元格内容

需求3: 公式转换为值

Sub replaceFormula()
    Dim w As Worksheet
    
    For Each w In Worksheets
        w.UsedRange.Value = w.UsedRange.Value
    Next w
    
End Sub

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pigerr杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值