excel里面有很多強大的公式,可以快速實(shí)現我們想要的結果。如果在vba中可以使用公式,可以大大減少編碼,提升工作效率!這么強悍的功能讓我們一起學(xué)習一下吧!
我們直接通過(guò)案例來(lái)學(xué)習公式在vba中的使用
題目:
實(shí)現多個(gè)工作表數據的查詢(xún),統計功能,如下圖:
分析:
在一個(gè)表里面的查詢(xún)統計只需要用到count,vlookup函數即可完成,我們這里有多張表需要循環(huán)查找,所以要通過(guò)vba實(shí)現
上面查詢(xún)和統計是兩個(gè)按鈕,所以要分成兩個(gè)宏來(lái)寫(xiě)
vba調用工作表函數的方法:Application.WorksheetFunction.公式
代碼:
- '統計部分代碼
- Sub tongji()
- Dim i, k, l, m As Integer
- For i = 2 To Sheets.Count
- '累加每張表A列非空單元格的個(gè)數
- k = k + Application.WorksheetFunction.CountA(Sheets(i).Range('a:a')) - 1
- '累加每張表F列為“男”的單元格的個(gè)數
- l = l + Application.WorksheetFunction.CountIf(Sheets(i).Range('f:f'), '男')
- '累加每張表F列為“女”的單元格的個(gè)數
- m = m + Application.WorksheetFunction.CountIf(Sheets(i).Range('f:f'), '女')
- Next
- '將所有表A列單元格的總計賦值給統計工作表的“d26”單元格
- Sheet1.Range('d26') = k
- '將所有表F列為“男”單元格的總計賦值給統計工作表的“d27”單元格
- Sheet1.Range('d27') = l
- '將所有表F列為“女”單元格的總計賦值給統計工作表的“d28”單元格
- Sheet1.Range('d28') = m
- End Sub
'查詢(xún)部分代碼Sub chaxun()'如果出現錯誤繼續向下執行,防止程序崩潰On Error Resume Next'執行查詢(xún)前清空數據,防止沒(méi)找到查詢(xún)數據,上條數據信息仍在Sheet1.Range('d14').ClearContentsSheet1.Range('d16').ClearContentsSheet1.Range('d18').ClearContentsSheet1.Range('d20').ClearContentsSheet1.Range('d22').ClearContentsFor i = 2 To Sheets.Count'在A(yíng)到H列中查找該準考證號學(xué)生的姓名Sheet1.Range('d14') = Application.WorksheetFunction.VLookup(Sheet1.Range('d9'), Sheets(i).Range('a:h'), 5, 0)'在A(yíng)到H列中查找該準考證號學(xué)生的性別Sheet1.Range('d16') = Application.WorksheetFunction.VLookup(Sheet1.Range('d9'), Sheets(i).Range('a:h'), 6, 0)'在A(yíng)到H列中查找該準考證號學(xué)生的專(zhuān)業(yè)Sheet1.Range('d18') = Application.WorksheetFunction.VLookup(Sheet1.Range('d9'), Sheets(i).Range('a:h'), 3, 0)'在A(yíng)到H列中查找該準考證號學(xué)生的總分(原始分)Sheet1.Range('d20') = Application.WorksheetFunction.VLookup(Sheet1.Range('d9'), Sheets(i).Range('a:h'), 8, 0)'查找到數據的表名也就是學(xué)生所在地區Sheet1.Range('d22') = Sheets(i).Name'查到了,就退出循環(huán)If Sheet1.Range('d14') <> '' ThenExit ForEnd IfNextEnd Sub 上面我們用到的是工作表函數,vba也有自己的函數,下面一起來(lái)看兩個(gè)簡(jiǎn)單的小例子!
例1:
利用vba的split函數實(shí)現下面功能(當然工作表mid函數也能完成)

用法:
Split('pw-023-2015-37-001', '-')就是將字符串'pw-023-2015-37-001'以 '-'為分隔符分割。結果會(huì )得到一個(gè)數組,下標從零開(kāi)始。
Split('pw-023-2015-37-001', '-')(0)就是取第1個(gè)數據pw
Split('pw-023-2015-37-001', '-')(1)就是取第2個(gè)數據023
Split('pw-023-2015-37-001', '-')(2)就是取第3個(gè)數據2015
代碼:
Sub tiqu()On Error Resume NextFor 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) & '周'NextEnd Sub例2:查找郵箱zhangsan@163.com 中@在第幾位 用法:InStr('zhangsan@163.com', '@')總結:
這個(gè)案例我們用到了三個(gè)工作表函數公式CountA,CountIf,VLookup和兩個(gè)vba函數Split,instr.不熟練的小伙伴趕快去學(xué)習一下,后面我會(huì )整理一份excel和vba的函數供小伙伴參考。
每天學(xué)一點(diǎn),薪資翻一番??戳诉@篇文章覺(jué)得對你有用的話(huà),關(guān)注我的公眾號“學(xué)會(huì )數據分析”并且用你的小手幫忙分享一下,我會(huì )經(jīng)??偨Y一些案例和大家一些分享。
聯(lián)系客服