【原创】VBA学习笔记(21) VBA函数,appliacation函数,工作表函数,三种同名函数对比举例(3个例子)

 

1 VBA里可以使用的3类函数,都是独立的

  • VBA函数
  • application函数
  • application.worksheetfunction函数

 

  • VBA函数,appliacation函数,工作表函数,三种同名函数完全独立
  • EXCEL工作表函数(默认都是只能针对一个cell做作用的! 并且一般是cell.value)

 

 

1.1 比如 match函数

  • vba.match                                               ?好像是没有
  • application.match()                                  '运行时如果查不到,会返回错误值
  • application.worksheetfunction.match()    '运行时如果查不到会直接报错跳出
Sub test1()

Dim dict1 As New Dictionary

Dim dict2 As Object
Set dict2 = CreateObject("scripting.dictionary")

arr1 = Array(1, 2, 3, 4, 5)
arr2 = [{11,22,33,44,55}]    '下标默认从1开始,因为是EXCEL格式


For i = LBound(arr1) To UBound(arr1)
    dict1(arr1(i)) = arr2(i + 1)
Next


For Each i In dict1.Keys()
    Debug.Print i & "," & dict1(i)
Next

target1 = 55
Debug.Print dict1.Keys(Application.Match(target1, dict1.Items, 0) - 1)
Debug.Print dict1.Keys(WorksheetFunction.Match(target1, dict1.Items, 0) - 1)
'Debug.Print dict1.Keys(Match(target1, dict1.Items, 0) - 1)  '没这个VBA函数


End Sub

 

 

1.2 比如 trim函数

    trim() 是不是可以不只针对一个cell? 多个?可以针对字符串中间的空格不处理

  • trim()                                                           ' 只处理首位的空格
  • application.trim()                                          '处理首位的空格,中间的空格也会被缩为1个
  • application.worksheetfunction.trim()           '处理首位的空格,中间的空格也会被缩为1个
Sub test1()

str1 = "  a      b c d      e  "

Debug.Print "str1="; str1
Debug.Print "Trim(str1)=" & Trim(str1)
Debug.Print "Application.Trim(str1)=" & Application.Trim(str1)
Debug.Print "Application.WorksheetFunction.Trim(str1)=" & Application.WorksheetFunction.Trim(str1)

End Sub

 

 

 1.3 比如replace函数(VBA函数和 worksheetfunction 的replace语法完全不同)

  • replace() / VBA.Replace(目标我在你这字符串, "替换后的新文本", "要被替换的文本")

 

  • worksheetfunction.replace() / Application.worksheetfunction.replace()
  • worksheetfunction.Replace(old_text,start_num,num_chars,new_text)
  • worksheetfunction.replace(目标完整字符串,开始位置,从开始位置开始的替换个数,新的文本)

 

Sub test1()

str1 = "hello,xxx,xxx,xxx"

Debug.Print str1
Debug.Print Replace(str1, "xxx", "yyy")
Debug.Print Application.Replace(str1, 7, 3, "y")
Debug.Print WorksheetFunction.Replace(str1, 11, 2, "yy")

End Sub

 

1.4  VBA.iserror() 函数 和 application.iferror() 函数

Sub test100()

Debug.Print Application.Match(3, Array(1, 3, 5), 0)
Debug.Print IsError(Application.Match(3, Array(1, 3, 5), 0))
Debug.Print Application.Match(2, Array(1, 3, 5), 0)
Debug.Print IsError(Application.Match(2, Array(1, 3, 5), 0))
Debug.Print

Debug.Print Application.IfError(Application.Match(3, Array(1, 3, 5), 0), "999")
Debug.Print Application.IfError(Application.Match(2, Array(1, 3, 5), 0), "888")
Debug.Print

End Sub

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VBA 中,你可以使用 Application.WorksheetFunction.SumIfs 函数来调用 SUMIFS 函数。下面是 VBA 中 SUMIFS 函数的使用方法和示例: ```vb Dim kII As Double Dim WbI As Workbook Dim Sheet2 As Worksheet Dim i As Long Set WbI = ThisWorkbook ' 假设要筛选的数据在当前工作簿中 Set Sheet2 = WbI.Sheets("Sheet2") ' 假设要筛选的数据在名为 "Sheet2" 的工作中 i = 1 ' 假设要筛选的数据从第一行开始 kII = Application.WorksheetFunction.SumIfs(WbI.Sheets(2).Range("S:S"), WbI.Sheets(2).Range("B:B"), Sheet2.Range("A" & i).Value, WbI.Sheets(2).Range("U:U"), "=出客户", WbI.Sheets(2).Range("R:R"), ">2023-01-31") ``` 在上述代码中,我们首先声明了变量 `kII`、`WbI`、`Sheet2` 和 `i`。然后,我们将当前工作簿赋值给 `WbI`,将名为 "Sheet2" 的工作赋值给 `Sheet2`,并设置变量 `i` 的初始值为 1。 接下来,我们使用 `Application.WorksheetFunction.SumIfs` 函数来计算满足条件的单元格的总和。在这个例子中,我们使用了四个条件范围和四个条件: - 求和范围为 `WbI.Sheets(2).Range("S:S")`,即第二个工作的 S 列。 - 第一个条件范围为 `WbI.Sheets(2).Range("B:B")`,即第二个工作的 B 列,用于筛选客户编号。 - 第一个条件为 `Sheet2.Range("A" & i).Value`,即根据变量 `i` 的值获取要筛选的客户编号。 - 第二个条件范围为 `WbI.Sheets(2).Range("U:U")`,即第二个工作的 U 列,用于筛选出客户。 - 第二个条件为 `"=出客户"`,即筛选出 U 列中等于 "出客户" 的数据。 - 第三个条件范围为 `WbI.Sheets(2).Range("R:R")`,即第二个工作的 R 列,用于筛选日期。 - 第三个条件为 `">2023-01-31"`,即筛选出 R 列中大于 "2023-01-31" 的数据。 最后,将计算得到的总和赋值给变量 `kII`。 请根据你的实际需求和数据范围进行相应的调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值