函数

文章目录

  • VBA的函数
    • excel函数对应的vba函数
      • counta
      • vlookup
    • excel特有函数和vba特有函数
    • vba 字符串函数
      • instr
      • split
    • vba 常用函数
  • 错误处理
    • 控制输入的格式
  • 自己写函数
  • 带参数的sub
  • 代码复用

没完成的任务:张三李四登录p=8

VBA的函数

熟悉的函数可以用,有哪些新的函数

excel函数对应的vba函数

counta

函数计算范围中不为空的单元格的个数。

=counta(a1:a10)
' 指定某个工作表的某个区域
=counta(重庆!A:A)-1 

vba中使用普通方法,计算不为空的单元格:

Sub tongji()
Dim k, i As Integer
alrow = Sheet2.Range("a65525").End(xlUp).Row
For i = 1 To alrow
    If Sheet2.Cells(i, 1) <> "" Then
        k = k + 1
    End If
    
Next
Sheet1.Range("d26") = k - 1
End Sub

vba中调用函数快速解决:


Sheet1.Range("d26") = WorksheetFunction.CountA(Sheet2.Range("a:a"))-1

例子:

Sub tongji()
	Dim k, kboy, kgirl As Integer
	For i = 2 To Sheets.Count
	    k = k + WorksheetFunction.CountA(Sheets(i).Range("a:a"))
	    kboy = kboy + WorksheetFunction.CountIf(Sheets(i).Range("f:f"), "男")
	    kgirl = kgirl + WorksheetFunction.CountIf(Sheets(i).Range("f:f"), "女")
	Next
	Sheet1.Range("d26") = k
	Sheet1.Range("d27") = kboy
	Sheet1.Range("d28") = kgirl


End Sub

vlookup

函数功能

vlookup(找什么,在哪一块找(块的第一列会和找什么一一比较),找到以后返回第几列,精确匹配吗(0表示精确))

使用函数

=VLOOKUP(D9,重庆!A:H,5,0)

使用vba代码的案例:
!! 如果函数找不到,会返回#value,但是vba找不到,程序会奔溃!!!

Sub chaxun()
Dim k As Integer
On Error Resume Next
Sheet1.Range("d14,d16,d18,d20,d22").ClearContents
For i = 2 To Sheets.Count
    Sheet1.Range("d14") = WorksheetFunction.VLookup(Sheet1.Range("d9"), Sheets(i).Range("a:H"), 5, 0)
    Sheet1.Range("d16") = WorksheetFunction.VLookup(Sheet1.Range("d9"), Sheets(i).Range("a:H"), 6, 0)
    Sheet1.Range("d18") = WorksheetFunction.VLookup(Sheet1.Range("d9"), Sheets(i).Range("a:H"), 3, 0)
    Sheet1.Range("d20") = WorksheetFunction.VLookup(Sheet1.Range("d9"), Sheets(i).Range("a:H"), 8, 0)
    If Sheet1.Range("d14") <> "" Then
        Sheet1.Range("d22") = Sheets(i).Name
        Exit For
    End If
    
Next
End Sub

excel特有函数和vba特有函数

excel中的left等函数,在vba中不用,vba中有如下一些类型的函数,可以直接用

with vba
	.math
	.strings
	.datetime
	.filesystem
	.finacial
	.information
	.interaction
	
end with
interaction : inputbox msgbox

vba 字符串函数

字符串切割,可以用excel-数据-分列 来切割。
excel自带函数有一些

instr

使用vba,从邮箱中(123456@qq)截取qq号:
可以用worksheetfunction.find,但是如果找不到,会崩溃.
使用instr,找到返回第几位,找不到返回0.

Dim i as String
vba.strings.instr(range("a2"),"@")

split

返回数组,通过索引获取,从0开始

' 12-1234-3452-2354
Range("a3") = split(range("a2"),"-")(0)

vba 常用函数

'vba函数可以简写

num = val(text)  转成数字
num = text *1

VBA.Information.IsNumeric() 是不是数字
简称IsNumeric() 

vba.strings中的:
 left  mid right 

错误处理

on error resume next
XXX
XXX
;只要某一行出错,就跳过这一行,这一次不执行

控制输入的格式

只能输入整数

I = inpubox("请输入数字,不是文字")
If VBA.Information.IsNumeric(I)=false or I<1 Then
    Exit Sub
End If

VBA.Information.IsNumeric()简称IsNumeric() 'vba函数可以简写


自己写函数

excel自带函数不够用,可以写自己的函数

在模块中编辑函数

Function toDollar(x)
    toDollar = x * 0.18
End Function
' 称呼转换函数
Function mynominal(str As String)
    If str = "男" Then
        mynominal = "先生"
    Else
        mynominal = "女士"
    End If
    
End Function

可以在excel直接调用,也可以在vba里面调用。
这样,vba特有函数(如split)就可以在excel里面使用了。例如写一个函数,截取字符串中第一和第二个“-”之间的部分

function jqzf(str1,str2,i)
	jqzf = split(str1,str2)(i-1)
end function

带参数的sub

可以根据参数,执行一些动作。比函数功能多
比如参数是表名(字符串),动作是创建这个名字的表单

sub create( s as string)
	XX
end sub

sub createit()
	call create("表1")
	call create(range("a1"))
end sub

代码复用

针对某个excel写的通用代码,想要在其他excel中仍能使用。

1、 将写好的宏另存为xla格式,默认路径
2、 开发工具-加载项-勾选那个宏
3、 文件-选项-快速访问工具栏-常用命令-宏-选中代码库

更多推荐

VBA函数