Hướng dẫn sử dụng VBA trong Excel. VBA là ngôn ngữ lập trình trong Excel: VBA Visual Basic for Application. Ta sử dụng ngôn ngữ lập trình VBA để viết ra các macro. Macro là các chương trình hoàn chỉnh thực hiện tự động các lệnh mà bạn đã viết ra cho nó.
Trang 18/18/2016 VBA TRONG EXCEL
L p trình c b n trong excel
PH M TU N MINH
Trang 2L I NÓI U
L p trình đang ngày càng chi m v trí quan tr ng trong công vi c h ng ngày c bi t v i
nh ng kh i ngành kinh t và k thu t Nó giúp công vi c đ c đ n gi n và nh nhàng h n,
nh ng công vi c l p đi l p l i, nh ng công vi c nhàm chán c n đ c t đ ng hóa đ tránh
sai sót và gi m thi u r i ro
Excel là m t công c tính toán h t s c m nh m c a Microsoft, nh ng hàm s n có trong
Excel r t l n, r t nhi u có l đ đ giúp chúng ta x lý các bài toán kinh t , k thu t tuy
nhiên thay vì vi t 10 dòng code thì có l ch c n vi t 1 dòng code thôi, đó ch ng ph i tuy t
v i h n sao? VBA trong Excel giúp chúng ta làm vi c đó, v i các hàm API s n có c ng
v i các hàm API mà các ch ng trình khác có th tích h p vào Excel nh ph n m m Etabs,
Robot Structural Analyis trong xây d ng…giúp Excel chuyên nghi p và ph bi n
Cách s d ng VBA trong Excel t ng đ i đ n gi n, n u b n đã t ng có t duy v l p trình
thì càng d dàng h n VBA có th s d ng mô hình h ng đ i t ng hi n đ i giúp dòng
code s ch s và d hi u
Trong khuôn kh ebook này, tác gi ch mang đ n nhi u đi u đ n gi n nh t và VBA trong
Excel nh m giúp ng i đ c có cách nhìn dê dàng và bao quát nh t h i – đáp v các
v n đ c th trong VBA m i b n s d ng các hình th c sau:
- G i email v đ a ch : dev4contact@gmail.com
- t câu h i trên trang web: http://askme.dev4lifes.net
Chân thành c m n!
Trang 3M C L C
1 T o Macro 5
1.1 Th Developer 5
1.2 Command Button 6
1.3 Gán m t Macro 7
1.4 Visual Basic Editor 9
2 MsgBox 10
3 Workbooks và Worksheets 12
3.1 Cây đ i t ng 12
3.2 Collection 12
3.3 Properties và Method 13
4 i t ng Range 15
4.1 Ví d v Range 15
4.2 Cell 16
4.3 Khai báo đ i t ng Range 17
4.4 Select 17
4.5 Rows 17
4.6 Columns 18
4.7 Copy/Paste 18
4.8 Clear 19
4.9 Count 19
5 Bi n 21
5.1 Integer 21
5.2 String 21
Trang 45.3 Double 22
5.4 Boolean 23
6 Câu l nh If Then 23
6.1 Else 24
7 Vòng l p 25
7.1 Vòng l p đ n 25
7.2 Vòng l p đôi 25
7.3 Vòng l p ba 26
7.4 Vòng l p Do While 27
8 L i Macro 28
9 X lý String 31
9.1 Liên k t String 31
9.2 Left 32
9.3 Right 32
9.4 Mid 33
9.5 Len 33
9.6 Instr 34
10 Date và Time 34
10.1 Year, Month, Day c a Date 34
10.2 DateAdd 35
10.3 Date và Time hi n t i 35
10.4 Gi , phút, giây (Hour, Minute, Second) 36
10.5 TimeValue 36
11 Event (S ki n) 37
Trang 511.1 S ki n Workbook Open 37
11.2 S ki n Worksheet Change 38
12 M ng 40
12.1 M ng m t chi u 40
12.2 M ng hai chi u 41
13 Function và Sub 42
13.1 Function 42
13.2 Sub 43
14 i t ng Application 43
14.1 WorksheetFunction 43
14.2 ScreenUpdating 44
14.3 DisplayAlerts 45
14.4 Calculation 46
15 ActiveX Control 47
16 Userform 49
16.1 Thêm Control 50
16.2 Hi n th Userform 52
16.3 Gán Macro 54
16.4 Ki m tra 55
Trang 61 T o Macro
V i Excel VBA b n có th t đ ng hóa các công vi c trong Excel b ng cách vi t m t th
g i là macro Trong bài này s h c cách đ t o m t macro đ n gi n đ th c hi n m t ch c
n ng nào đó sau khi kích m t m t nút (button) u tiên ta ph i b t th menu Developer
1.1 Th Developer
Th này dành riêng cho các b n mu n l p trình trong Excel, còn n u không thì c ng không
c n quan tâm đ n nó làm gì c
1 b t th này, th c hi n các b c sauKích chu t ph i vào b t k đâu trên thanh ribbon,
sau đó kích vào Customize the Ribbon
2 Tích ch n vào ô Developer
Trang 73 Kích OK
4 B n s th y tab developer g n tab view
1.2 Command Button
đ t m t nút trên b ng Excel (WorkSheet) c a b n, th c hi n các b c sau:
1 Trên Tab Developer, kích vào nút Insert
Trang 82 Trong khu v c ActiveX, kích vào Command Button
3 Kéo và th nút đó vào worksheet c a b n
1.3 Gán m t Macro
gán m t Macro cho nút trên, th c hi n các b c sau
1 Kích chu t ph i vào CommandButton1 ( ch c ch n Design Mode đã ch n)
2 Kích vào View Code
Trang 9Trình duy t Visual Basic Editor xu t hi n
3 t con tr chu t gi a dòng Private Sub CommandButton1_Click() và End Sub
4 Thêm dòng code sau vào đó
Trang 10Chú ý: C a s bên trái v i tên là Sheet1, Sheet2 và Sheet3 đ c g i là Project Explorer
N u c a s này không hi n ra, các b n ch n View > Project Explorer thêm c a s code
sheet đ u tiên, kích vào Sheet1
5 óng khung Visual Basic Editor
6 Kích vào command button trên sheet c a b n S th y k t qu nh sau:
Chúc m ng b n đã t o macro trong Excel B n đ ng quan tâm t i các dòng code v i, vì tôi
s nói trong các bài sau
1.4 Visual Basic Editor
m Visual Basic Editor, trên th Developer, kích vào Visual Basic
Trang 11C a s Visual Basic Editor xu t hi n:
2 MsgBox
MsgBox là m t b ng thông báo trong Excel VBA, b n có th s d ng th thông tin cho
ng i dùng t m t command button trong b ng tính và thêm nh ng dòng code sau:
1 Tin nh n đ n
1 MsgBox "This is fun"
vào nút này nh sau:
Trang 122 Tin nh n nâng cao h n m t chút
1 MsgBox "Entered value is " & Range("A1").Value
Nh p m t giá tr nào đó vào trong ô A1 và n vào nút thì k t qu nh sau:
Chú ý: Chúng ta s d ng toán t & đ n i chu i string
3 b t đ u m t dòng m i, s d ng vbNewLine
1 MsgBox "Line 1" & vbNewLine & "Line 2"
K t qu nh sau:
Trang 133 Workbooks và Worksheets
3.1 Cây đ i t ng
Trong Excel VBA, m t đ i t ng có th bao g m đ i t ng khác, và đ i t ng đó có th
bao g m đ i t ng khác, v.v.Vì v y, l p trình Excel VBA s liên quan đ n vi c làm vi c
v i các đ i t ng i u này nghe có v r c r i, nh ng chúng ta s s m hi u rõ thôi
i t ng cha c a t t c đ i t ng đó chính là b n thân Excel Chúng ta có th g i nó là
đ i t ng Application i t ng Application bao g m nh ng đ i t ng khác Ví d , đ i
t ng Workbook (file Excel), có th là b t k workbook nào b n đã tao i t ng
Workbook bao g m nh ng đ i t ng khác gi ng nh đ i t ng Worksheet C nh v y
đ i t ng Worksheet bao g m đ i t ng khác, nh đ i t ng Range
Bài t o Marco đã minh h a cách đ ch y code b ng cách kích vào m t button Chúng ta
đã s d ng đo n code sau:
1 Range("A1").Value = "Hello"
nh ng th c ch t là nh sau:
1 Application.Workbooks("create-a-macro").Worksheets(1).Range("A1").Value = "Hello"
Chú ý: i t ng đ c g i thông qua d u ch m “.” May m n là chúng ta không ph i s
d ng c dòng code dài nh bên trên, b i vì chúng ta đ t button c a chúng ta trong file
create-a-marco.xls, trên worksheet đ u tiên
3.2 Collection
B n chú ý là c Workbooks và Worksheet đ u d ng s nhi u ó là b i vì chúng là m t
t p h p (collection) T p h p Workbooks bao g m t t c các đ i t ng workbook mà đang
m T p h p Worksheets bao g m t t c các đ i t ng Worksheet trong m t workbook
Trang 14B n có th tr đ n m t đ i t ng trong m t t p h p, ví d m t đ i t ng worksheet theo 3
đ xem CodeName c a worksheet, m Visual Basic Editor Trong Project Explorer, tên
đ u tiên là CodeName Tên th hai là tên worksheet (Sales)
Chú ý: CodeName gi ng nhau n u b n thay đ i tên worksheet vì th mà đây là cách an
toàn nh t đ tr đ n worksheet
3.3 Properties và Method
Bây gi chúng ta quan sát m t s property và method c a t p h p workbook và worksheet
Property là nh ng đ c tr ng cho t p h p, còn method đ c dùng đ làm đi u gì đó (ví d
con chó có lông màu đen (đó là property), còn s a ho c c n là method)
t m t command button trên b ng tính và thêm nh ng dòng code sau:
Trang 151 Method “Add” c a t p h p workbook t o m t workbook m i:
Chú ý: Method Add c a worksheet s t o worksheet m i
2 Property “Count” c a t p h p Worksheet đ m s l ng worksheets trong m t
workbook
K t qu khi b n kích vào button nh sau:
Chú ý: Property “Count” c a workbook s đ m s workbook đang active
Trang 164 Đ ng Range
i t ng Range dùng đ “minh h a” cho m t ô ho c nhi u ô (cell) trong worksheet c a
b n, đây là đ i t ng quan tr ng nh t c a Excel VBA Bài này s trình bày t ng quan v
property (thu c tính) và method(ph ng th c) c a đ i t ng này
Trang 174.2 Cell
Thay vì s d ng Range, b n có th s d ng Cells S d ng Cells h u ích khi b n mu n
duy t qua m t chu i các ô (range)
Trang 184.3 Khai báo đ i t ng Range
B n có th khai báo m t đ i t ng Range s d ng t khóa Dim và Set
Dim example As Range
Set example = Range("A1:C4")
example.Value = 8
K t qu :
4.4 Select
M t ph ng th c quan tr ng c a đ i t ng Range là ph ng th c Select Ph ng th c này
làm nhi m v ch n m t chu i các ô
Dim example As Range
Set example = Range("A1:C4")
example.Select
K t qu :
4.5 Rows
Trang 19Thu c tính Rows đ b n truy xu t vào m t dòng c th c a chu i range
Dim example As Range
Set example = Range("A1:C4")
Dim example As Range
Set example = Range("A1:C4")
example.Columns(2).Select
K t qu :
4.7 Copy/Paste
Trang 20Ph ng th c copy/paste đ c s d ng đ sao chép m t chu i và dán nó vào m t n i nào
Trang 21Chú ý: ng border ch mang tính minh h a
Dim example As Range
Set example = Range("A1:C4")
Dim example As Range
Set example = Range("A1:C4")
MsgBox example.Rows.Count
K t qu :
Trang 22Chú ý: V i cách t ng t b n có th đ m s c t
t m t command button trong b ng tính c a b n và thêm nh ng dòng code sau th c
hi n dòng code thì kích vào button
Gi i thích: Dòng code đ u tiên khai báo m t bi n v i tên x ki u Integer K ti p, chúng ta
kh i t o x v i giá tr x Cu i cùng gán giá tr vào ô A1
5.2 String
Bi n ki u String đ c s d ng đ l u tr text
Code:
Trang 23kh i t o bi n book b ng vi c gán giá tr cho nó là “bible” Luôn luôn s d ng d u nh c đ
Trang 267 Vòng l p
Vòng l p là m t trong nh ng k thu t l p trình m nh m nh t M t vòng l p trong Excel
VBA cho phép b n l p qua l t l t các ô trong chu i ch v i m t vài dòng code
7.1 Vòng l p đ n
B n có th s d ng vòng l p đ n đ l p qua m t chu i m t chi u các ô trong Excel
t m t command button trong b ng tính và thêm nh ng dòng code sau:
VBA s nh p giá tr 100 vào ô giao gi a dòng 1 và c t 1 Khi Excel VBA ch y t i dòng
Next i, nó t ng i thêm 1 đ n v và tr l i dòng code For For i=2, Excel VBA s nh p giá
tr 100 vào giao gi a dòng 2 và c t 1, v v
7.2 Vòng l p đôi
B n s d ng m t vòng l p đôi đ l p qua m ng 2 chi u (Range g m c dòng và c t)
t m t command button vào b ng tính và thêm các dòng code sau:
Trang 27Gi i thích: For i = 1 và j = 1, Excel VBA nh p giá tr 100 vào ô giao gi a dòng 1 và c t
1 Khi Excel VBA ch y t i dòng Next j, nó t ng j thêm 1 và nh y tr l i dòng For j For i
= 1 và j = 2, Excel VBA s nh p giá tr 100 vào giao gi a dòng 1 và c t 2 C ti p t c nh
v y cho t i khi j > 2, thì vòng l p s nh y t i dòng Next i và t ng i thêm m t và ti p t c
Trang 28B n t suy lu n cách mà nó làm vi c nhé
7.4 Vòng l p Do While
Bên c nh vòng l p For Next, có nh ng vòng l p khác trong Excel VBA Ví d , vòng l p
Do While Code đ t gi a Do While và Loop s l p l i mi n là ph n đi u ki n sau Do While
1 và t ng i thêm 1 Trong Excel VBA, d u “=” không có ngh a là b ng Vì th i = i + 1
ngh a là i s tr thành i + 1 Vì th , l y giá tr hi n t i c a i và c ng thêm 1 Ví d , n u i =
1, i s thành 1 + 1 = 2 K t qu , giá tr 20 s đ t trong c t A 5 lân
2 Nh p m t vài s trong c t A
Trang 293 t m t command button trong b ng tính và thêm dòng code sau:
Do While Cells(i, 1).Value <> ""
Cells(i, 2).Value = Cells(i, 1).Value + 10
Trang 30K t qu :
2 Kích OK
Bi n x ch a đ c đ nh ngh a B i vì chúng ta s d ng câu l nh Option Explicit đ u đo n
code, chúng ta ph i khai báo t t c các bi n Excel VBA đã bôi màu x thành màu xanh đ
ch d n l i
3 Trong Visual Basic Editor, kích Reset đ d ng debugger
4 S a l i b ng cách thêm dòng code sau
1 Dim x As Integer
Trang 31Có th n u b n đã quen v i l p trình thì đã nghe th y t debug, k thu t này giúp b n ch y
qua t ng dòng code đ xem k t qu
5 Trong Visual Basic Editor, đ t con tr tr c Private và n F8
Dòng đ u tiên s chuy n sang màu vàng
6 n F8 3 l n
Trang 32L i sau s xu t hi n
i t ng Range có m t property g i là Value Value không đ c vi t đúng đây Debug
là m t cách tuy t v i đ tìm l i, ngoài ra giúp b n hi u code h n
Trang 33Dim text As String
text = "example text"
Trang 35Bài này s h c cách làm vi c v i Date và Time trong Excel VBA
t m t command button trong bang tính và add nh ng dòng code sau
10.1 Year, Month, Day c a Date
o n code sau s l y v n m (year) c a Date khai báo date, s d ng câu l nh Dim
kh i t o date, s d ng ch c n ng DateValue
Code:
Trang 36c ng m t s ngày vào date, s d ng ph ng th c DateAdd Ph ng th c này có 3 đ i
s “d” đ i s đ u tiên đ c ng ngày 3 đ i s th 2 đ c ng 3 ngày i s
th 3 chính là bi n date đ c ng ngày vào
Chú ý: Thay đ i “d” thành “m” đ công tháng vào date B n có th s d ng phím F1 đ
tìm hi u thêm Date trong đ nh d ng US
10.3 Date và Time hi n t i
l y Date và time hi n t i s d ng hàm Now
Trang 381 MsgBox TimeValue("9:20:01 am")
Code đã thêm vào s d ng Workbook open s th c hi n khi b n m workbook
1 M Visual Basic Editor
2 Kích đúp vào ThisWorkbook trong Project Explorer
Trang 393 Ch n Workbook t danh sách x xu ng bên trái Ch n Open t danh sách x
xu ng bên ph i
4 Thêm dòng code sau vào s ki n Workbook Open
1 MsgBox "Good Morning"
5 L u l i, đóng và m l i file Excel
K t qu :
11.2 S ki n Worksheet Change
Code s th c hi n khi b n thay đ i m t cell nào đó trong b ng tính
1 M Visual Basic Editor
2 Kích đúp vào m t sheet (ví d Sheet1) trong Project Explorer
Trang 403 Ch n Worksheet và Change nh hình d i:
4 S ki n Worksheet Change s l ng nghe t t c nh ng thay đ i trong Sheet1 Chúng ta
ch mu n Excel VBA làm m t đi u gì đó n u th c hi n thay đ i ô B2 Thêm nh ng dòng
5 Chúng ta mu n Excel VBA hi n th m t MsgBox n u ng i dùng nh p giá tr l n h n
80 Thêm dòng code sau:
1 If Target.Value > 80 Then MsgBox "Goal Completed"
6 Trong Sheet1, nh p m t s l n h n 80 trong ô B2
K t qu :
Trang 41M
M t Array là m t t p h p các bi n Trong Excel VBA, b n có th g i đ n m t ph n t c a
m ng s d ng tên array kèm theo ch s
Films(3) = "Star Wars"
Films(4) = "The Godfather"
Films(5) = "Pulp Fiction"
MsgBox Films(4)
K t qu khi b n kích vào command button:
Trang 42Gi i thích: Dòng code đ u tiên khai báo m t m ng string v i tên là Films M ng bao g m
5 ph n t K đ n chúng ta kh i t o m i ph n t c a m ng Cu i cùng, chúng ta hi n th
ph n t th t s d ng MsgBox
12.2 M ng hai chi u
t o m ng hai chi u, th c hi n các b c sau L n này, chúng ta s đ c tên c a b ng tính
t m t command button trong b ng tính và thêm nh ng dòng code sau:
Dim Films(1 To 5, 1 To 2) As String
Dim i As Integer, j As Integer
Trang 43Gi i thích: Dòng code đ u tiên khai báo m t m ng String v i tên Films M ng có hai chi u
Nó bao g m 5 dòng và 2 c t (dòng tr c, c t sau nhé) Hai bi n lo i Integer đ c dùng
cho vòng l p đ kh i t o giá tr trong m ng Cu i cùng chúng ta hi n th ph n t giao gi a
N u b n mu n Excel VBA đ th c hi n m t công vi c mà tr v m t k t qu , b n có th
s d ng m t function t m t function trong m t module (trong Visual Basic Editor,
kích vào Insert > Module) Ví d , function v i tên là Area
s d ng tên c a function (Area) trong code c a b n đ ch d n lo i k t qu mà b n mu n
tr v
Bây gi b n có th s d ng function này t b t k đâu trong code c a b n b ng cách s
d ng tên c a function và nh p đ i s cho nó
t m t command button trong b ng tính và thêm dòng code sau