VBA是一種編程語言,它依托于Office軟件,不能獨立運行,通過VBA可以實現(xiàn)各種Office軟件操作的自動化。
通俗易懂的來說就是在Excel中想實現(xiàn)什么功能,就可以通過VBA語言編寫的程序區(qū)實現(xiàn)。
VBA編碼語法
VBA的代碼的開始和結(jié)束
Sub 代碼名稱()
代碼內(nèi)容
...
End Sub
數(shù)據(jù)類型
①字符串 String
②數(shù)字類型:整型 Integer、長整型 Long、單精度浮點型 Single(小數(shù)點后最多6位)、雙精度浮點型 Double(小數(shù)點后最多14位)。
③日期型 Date
④布爾型 Boolean:True\False.
⑤變體型 Variant(不知道是什么類型,可定義為variant,但這種操作應(yīng)當盡量避免)
變量
用于保存在程序運行過程中需要臨時保存的值或?qū)ο蟆?/p>
定義變量:Dim 變量名 (As 數(shù)據(jù)類型)
Dim i as Integer
i=6
方法1:dim 變量名 as 數(shù)據(jù)類型
方法2:dim 變量名 as 數(shù)據(jù)類型,變量名 as 數(shù)據(jù)類型
方法3:dim 變量名,變量名 as 數(shù)據(jù)類型 ()
方法4:dim 變量名+數(shù)據(jù)類型符
Sub 變量測試()
Dim i As Integer
Dim i1 As Integer, str As String
Dim i2, i3 As Integer
Dim i4%
End Sub
變量名的命名規(guī)則
由字母、數(shù)字、下劃線以及漢字構(gòu)成
只能以字母或漢字開頭,不可以是數(shù)字或者下劃線開頭
長度不可以超過255個字符
不可以使用VBA中的關(guān)鍵字
見名知意
變量名的后面可以添加一個符號,表示該變量盛裝的數(shù)據(jù)的類型,常用符號:%、&、#、$、!
盡量不要使用中文命名
不要使用特殊符號,可以用英文字母、中文、數(shù)字、下劃線,不能以數(shù)字開頭
不能使用系統(tǒng)保留字,比如sub、for
大小寫不敏感
注意
變量名字不要重復(fù)
VBA中變量可以不聲明就使用,但是不建議,如果不聲明就使用,那么該變量里面可以盛裝任意類型的數(shù)據(jù)
字符串
幾個常用的字符串函數(shù):
Len(): 求長度
Trim(): 去掉兩端空格
Replace(): 替代子串
Left(): 從左邊取若干字符
Right(): 從右邊取若干字符
Mid(): 從中間取若干字符
Instr(): 查找子串
LCase(), UCase(): 將字母變成小/大寫
進行操作前可疊加使用Trim()和LCase()清除數(shù)據(jù)中的空格和因大小寫不一致出現(xiàn)的問題。
for循環(huán):
for i=1 to 10 step 2
cells(i,2)=7
next i
①循環(huán)
For … next
Do While … Loop
For Each in … Next
②判斷
If ... Then ... (Else if ... Else ...) End if
Not, And, Or(優(yōu)先級從左往右)
if分支結(jié)構(gòu):
if a>90 then
cells(1,1)=""
elseif a>70 then
cells(1,1)=""
elseif a>60 then
cells(1,1)=""
else
cells(1,1)=""
end if
BVA調(diào)試:
設(shè)置斷點,讓程序暫停
單步調(diào)試,每次只執(zhí)行一次(F8)
添加監(jiān)視,隨時查看變量值
字符串:
設(shè)置雙引號,否則會被認為是變量
特殊字符:空格 回車 換行,空串和空格字符串不一樣
大寫小寫不一樣,文本數(shù)字要分開,1是數(shù)字1,“1”是字符串
邏輯運算符 not and or (優(yōu)先級從高到低)
while循環(huán):
whlie cells(i,1)<>""
cells(i,2)=5
i=i+1
wend
do whlie cells(i,1)<>""
cells(I,2)=5
i=i+1
loop
面向?qū)ο?/h3>
面向?qū)ο蟮母拍睿簩ο螅ㄏ到y(tǒng)中具體的事物)、類(對象的分類)、屬性(是什么樣子)、方法(能做什么)
常用的對象:
application(excel系統(tǒng))
workbook工作簿
worksheet工作表
range單元格內(nèi)容區(qū)域
為代表對象的變量賦值,必須使用set關(guān)鍵字
用worksheets引用工作表的兩種方法:
根據(jù)工作表的顯示方法,比如worksheets(5)
根據(jù)工作表的名稱,比如worksheets("數(shù)據(jù)明細")
worksheet對象的name屬性:
根worksheet.name代表了該工作表的名稱,可以用它取得或者修改工作表名稱
worksheets的count屬性:代表了所屬工作簿中一共有多少工作表
worksheets的add方法:在所屬工作簿中新建一個工作表
舉個例子:循環(huán)打開多個工作簿
估計好多人聽說VBA是從合并工作簿知道的,合并工作簿是有通用的代碼框架的,記住框架,再也不怕對工作簿進行其他操作。
Sub 循環(huán)打開工作簿()
Application.ScreenUpdating = False
myfile = Dir(ThisWorkbook.Path & "\*.xls*")
Do While myfile <> ""
If myfile <> ThisWorkbook.Name Then
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & myfile
我是需要填空的代碼
Else
End If
myfile = Dir
Loop
Application.ScreenUpdating = True
MsgBox "完成"
End Sub
如果你要提取特定內(nèi)容的單元格,只需要結(jié)合find方法,查找內(nèi)容是“你好”的單元格的行號,并賦值。在空白處填上如下代碼即可。
ThisWorkbook.Worksheets(1).Cells(a, 1)
= wb.worksheets(1).Cells.Find("你好", , xlValues, xlWhole, xlByColumns, xlNext, True, True).row
如果你要合并工作簿,那么只需要在填空的代碼里,對單元格區(qū)域應(yīng)用copy方法。在空白處填上如下代碼即可。
wb.worksheets(1).range("a1").usedrange.copyThisWorkbook.Worksheets(1).range("a1")
Option Explicit
Sub 季度匯總()
Dim i, j, k, name
Dim w As Worksheet, r As Worksheet
Set r = Worksheets("季度匯總")
'循環(huán)掃描匯總表中的每一行,記住每次要查找的姓名
For i = 3 To 10
name = r.Cells(i, 2)
'循環(huán)掃描所有工作表,并用 w 指向該工作表
For Each w In Worksheets
'如果該工作表名字以“月”結(jié)尾,則認為是月報表
If Right(w.name, 1) = "月" Then
'循環(huán)掃描該月報表的每一行,判斷其姓名列是否等于name
k = 3
Do While w.Cells(k, 2) <> ""
'如果第k行姓名等于name,則將該行累加到匯總表第i行
If LCase(Trim(w.Cells(k, 2))) = LCase(Trim(name)) Then
For j = 3 To 6
r.Cells(i, j) = r.Cells(i, j) + w.Cells(k, j)
Next j
End If
k = k + 1
Loop
End If
Next w
Next i
End Sub