excel里面有很多強大的公式,可以快速實現(xiàn)我們想要的結果。如果在vba中可以使用公式,可以大大減少編碼,提升工作效率!這么強悍的功能讓我們一起學習一下吧!
我們直接通過案例來學習公式在vba中的使用
題目:
實現(xiàn)多個工作表數(shù)據(jù)的查詢,統(tǒng)計功能,如下圖:
分析:
在一個表里面的查詢統(tǒng)計只需要用到count,vlookup函數(shù)即可完成,我們這里有多張表需要循環(huán)查找,所以要通過vba實現(xiàn)
上面查詢和統(tǒng)計是兩個按鈕,所以要分成兩個宏來寫
vba調用工作表函數(shù)的方法:Application.WorksheetFunction.公式
代碼:
- '統(tǒng)計部分代碼
- Sub tongji()
- Dim i, k, l, m As Integer
- For i = 2 To Sheets.Count
- '累加每張表A列非空單元格的個數(shù)
- k = k + Application.WorksheetFunction.CountA(Sheets(i).Range('a:a')) - 1
- '累加每張表F列為“男”的單元格的個數(shù)
- l = l + Application.WorksheetFunction.CountIf(Sheets(i).Range('f:f'), '男')
- '累加每張表F列為“女”的單元格的個數(shù)
- m = m + Application.WorksheetFunction.CountIf(Sheets(i).Range('f:f'), '女')
- Next
- '將所有表A列單元格的總計賦值給統(tǒng)計工作表的“d26”單元格
- Sheet1.Range('d26') = k
- '將所有表F列為“男”單元格的總計賦值給統(tǒng)計工作表的“d27”單元格
- Sheet1.Range('d27') = l
- '將所有表F列為“女”單元格的總計賦值給統(tǒng)計工作表的“d28”單元格
- Sheet1.Range('d28') = m
- End Sub
'查詢部分代碼Sub chaxun()'如果出現(xiàn)錯誤繼續(xù)向下執(zhí)行,防止程序崩潰On Error Resume Next'執(zhí)行查詢前清空數(shù)據(jù),防止沒找到查詢數(shù)據(jù),上條數(shù)據(jù)信息仍在Sheet1.Range('d14').ClearContentsSheet1.Range('d16').ClearContentsSheet1.Range('d18').ClearContentsSheet1.Range('d20').ClearContentsSheet1.Range('d22').ClearContentsFor i = 2 To Sheets.Count'在A到H列中查找該準考證號學生的姓名Sheet1.Range('d14') = Application.WorksheetFunction.VLookup(Sheet1.Range('d9'), Sheets(i).Range('a:h'), 5, 0)'在A到H列中查找該準考證號學生的性別Sheet1.Range('d16') = Application.WorksheetFunction.VLookup(Sheet1.Range('d9'), Sheets(i).Range('a:h'), 6, 0)'在A到H列中查找該準考證號學生的專業(yè)Sheet1.Range('d18') = Application.WorksheetFunction.VLookup(Sheet1.Range('d9'), Sheets(i).Range('a:h'), 3, 0)'在A到H列中查找該準考證號學生的總分(原始分)Sheet1.Range('d20') = Application.WorksheetFunction.VLookup(Sheet1.Range('d9'), Sheets(i).Range('a:h'), 8, 0)'查找到數(shù)據(jù)的表名也就是學生所在地區(qū)Sheet1.Range('d22') = Sheets(i).Name'查到了,就退出循環(huán)If Sheet1.Range('d14') <> '' ThenExit ForEnd IfNextEnd Sub
上面我們用到的是工作表函數(shù),vba也有自己的函數(shù),下面一起來看兩個簡單的小例子!
例1:
利用vba的split函數(shù)實現(xiàn)下面功能(當然工作表mid函數(shù)也能完成)
用法:
Split('pw-023-2015-37-001', '-')就是將字符串'pw-023-2015-37-001'以 '-'為分隔符分割。結果會得到一個數(shù)組,下標從零開始。
Split('pw-023-2015-37-001', '-')(0)就是取第1個數(shù)據(jù)pw
Split('pw-023-2015-37-001', '-')(1)就是取第2個數(shù)據(jù)023
Split('pw-023-2015-37-001', '-')(2)就是取第3個數(shù)據(jù)2015
代碼:
Sub tiqu()
On Error Resume Next
For i = 2 To Sheet2.Range('a65536').End(xlUp).Row
Sheet2.Range('b' & i) = Split(Sheet2.Range('a' & i), '-')(2) & '年 第' & Split(Sheet2.Range('a' & i), '-')(3) & '周'
Next
End Sub
例2:查找郵箱zhangsan@163.com 中@在第幾位 用法:InStr('zhangsan@163.com', '@')總結:
這個案例我們用到了三個工作表函數(shù)公式CountA,CountIf,VLookup和兩個vba函數(shù)Split,instr.不熟練的小伙伴趕快去學習一下,后面我會整理一份excel和vba的函數(shù)供小伙伴參考。
每天學一點,薪資翻一番。看了這篇文章覺得對你有用的話,關注我的公眾號“學會數(shù)據(jù)分析”并且用你的小手幫忙分享一下,我會經(jīng)??偨Y一些案例和大家一些分享。
聯(lián)系客服