Macro và VBA trong Excel
1
Mục lục
• Macro • VBA • Thực hành
2
Chú ý
• Phải lưu tệp dưới dạng .xlsm thay vì .xlsx; nếu không sẽ không sử
dụng được Macro hay VBA
3
I. Macro
• Tại sao cần Macro ? • Tìm Macro trong menu của Excel • Các bước để tạo và sử dụng Macro
4
Macro: Tại sao cần Macro ?
• Demo
5
Macro: Tại sao cần Macro ?
• Demo • Nhu cầu: Gom một chuỗi các hành động/thao tác để tạo thành một
hành động/thao tác duy nhất có được cùng một kết quả
6
• Công việc đơn giản hơn • Kết quả đồng bộ, chính xác
Macro: Tìm Macro trong menu của Excel
• Cách 1 : phức tạp nhất, nhưng cung cấp đầy đủ công cụ nhất
7
Macro: Tìm Macro trong menu của Excel
8
Macro: Tìm Macro trong menu của Excel
9
Macro: Tìm Macro trong menu của Excel
10
Macro: Tìm Macro trong menu của Excel
11
Macro: Tìm Macro trong menu của Excel
• Cách 2
12
Macro: Tìm Macro trong menu của Excel
• Cách 3
13
Bấm vào nút phía dưới bên trái của cửa sổ Excel để ghi 1 Marco
Macro: Các bước để tạo và sử dụng Macro
• Tạo Macro
• Hình dung như quay một bộ phim • Mọi thao tác sẽ được Excel ghi lại thành Macro
• Demo
14
Macro: Các bước để tạo và sử dụng Macro
15
Macro: Các bước để tạo và sử dụng Macro
Đặt tên cho Macro
Chọn tổ hợp phím tắt để sử dụng Macro (rất nên làm, giúp tiện sử dụng sau này)
Viết mô tả cho Macro (không bắt buộc, nhưng nên có để có thể hiểu rõ hơn Macro này làm việc gì)
16
Sau khi đã điền đủ thông tin, bấm nút OK Quá trình ghi Macro sẽ được khởi động
Macro: Các bước để tạo và sử dụng Macro
Lần lượt thực hiện các thao tác mong muốn
Thành nền màu vàng
Ví dụ: chuyển 1 cell - - Chữ màu đỏ - Chữ đậm - Chữ nghiêng (Có 4 thao tác để thực hiện công việc)
17
Macro: Các bước để tạo và sử dụng Macro
18
Sau khi làm xong tất cả các thao tác mong muốn, bấm vào nút Stop Recording để kết thúc việc ghi Macro
Macro: Các bước để tạo và sử dụng Macro
• Sử dụng Macro bằng tổ hợp phím tắt
19
Để sử dụng Macro, chọn cell (hoặc nhiều cell đồng thời), bấm tổ hợp phím tắt đã lựa chọn khi tạo Macro (Trong ví dụ này là Ctrl + Shift + N)
Macro: Chú ý
• Không chọn vào 1 cell cụ thể trong quá trình ghi Macro!
20
II. VBA
• VBA = Visual Basic of Application • Là một ngôn ngữ lập trình! • Mục đích: cung cấp cho người sử dụng khả năng để tạo thêm
• các hàm phù hợp với nhu cầu của họ khi các hàm sẵn có của Excel không đủ
để đáp ứng
• các….Macro ! (bằng cách lập trình chứ không đơn giản bằng cách “ghi hình”
21
Macro)
VBA: Ngôn ngữ lập trình
• Khi bạn học ngôn ngữ như tiếng Anh, tiếng Pháp,…. bạn phải
• Học các từ vựng • Tuân thủ các qui tắc ngữ pháp/cú pháp của ngôn ngữ đó
• Điều này cũng hoàn toàn đúng khi bạn học 1 ngôn ngữ LẬP TRÌNH
• Học các từ khóa • Phải tuyệt đối tuân thủ các cú pháp của ngôn ngữ đó • Nếu sai từ khóa, sai ngữ pháp/cú pháp, chương trình của bạn sẽ không chạy
• Nó cũng giống như bạn nói tiếng Anh: “This student are a book” không ai hiểu bạn
nói gì cả!
22
được
VBA: Tạo môi trường làm việc
Bấm vào nút “Visual Basic” trong Menu Developer Hoặc đơn giản hơn bấm tổ hợp phím tắt “Alt + F11”
23
VBA: Tạo môi trường làm việc
Bấm chuột phải vào mục “VBA Project”
Chọn menu Insert, sau đó chọn Module
24
VBA: Tạo môi trường làm việc
25
Một cửa sổ mới hiện ra Soạn thảo code trong cửa sổ này
VBA: viết hàm
• Cú pháp Function Tên_hàm([DSách_tham_số_đầu_vào]) [as kiểu_dữ_liệu_đầu ra]
[Câu_lệnh]
[Tên_hàm = biểu_thức]
End Function • Ví dụ Function TrungBinhCong (so1 As Double, so2 As Double) as Double
Dim GiaTriTrungBinh As Double
GiaTriTrungBinh = (so1 + so2) / 2
TrungBinhCong = GiaTriTrungBinh
End Function
26
VBA: viết hàm
• Demo Function Tên_hàm([DSách_tham_số_đầu_vào]) [as kiểu_dữ_liệu_đầu ra]
[Câu_lệnh]
[Tên_hàm = biểu_thức]
End Function • Ví dụ Function TrungBinhCong (so1 As Double, so2 As Double) as Double
Dim GiaTriTrungBinh As Double
GiaTriTrungBinh = (so1 + so2) / 2
TrungBinhCong = GiaTriTrungBinh
End Function
27
VBA: viết hàm
Function TrungBinhCong (so1 As Double, so2 As Double) as Double
Dim GiaTriTrungBinh As Double
GiaTriTrungBinh = (so1 + so2) / 2
TrungBinhCong = GiaTriTrungBinh
End Function
28
- Từ khóa của ngôn ngữ lập trình VBA - Muốn viết hàm cho VBA, bắt buộc phải sử dụng 2 từ khóa này
VBA: viết hàm
Function TrungBinhCong (so1 As Double, so2 As Double) as Double
Dim GiaTriTrungBinh As Double
GiaTriTrungBinh = (so1 + so2) / 2
TrungBinhCong = GiaTriTrungBinh
End Function
- Từ khóa của ngôn ngữ lập trình VBA - Đây là kiểu dữ liệu số thực
29
- Còn nhiều kiểu dữ liệu khác như số tự nhiên (Integer)
- - kí tự (string) - ….
VBA: viết hàm
Function TrungBinhCong (so1 As Double, so2 As Double) as Double
Dim GiaTriTrungBinh As Double
GiaTriTrungBinh = (so1 + so2) / 2
TrungBinhCong = GiaTriTrungBinh
End Function
30
- Từ khóa của ngôn ngữ lập trình VBA, dùng để khai báo 1 biến - Dim GiaTriTrungBinh As Double : khai báo biến có tên là “GiaTriTrungBinh” với dữ liệu kiểu số thực - Tên biến GiaTriTrungBinh là do người lập trình tự đặt, có một vài ràng buộc khi đặt tên biến (sẽ xem sau)
VBA: viết hàm
Function TrungBinhCong (so1 As Double, so2 As Double) as Double
Dim GiaTriTrungBinh As Double
GiaTriTrungBinh = (so1 + so2) / 2
TrungBinhCong = GiaTriTrungBinh
End Function
31
- Để lấy kết quả cho hàm này trả về, bắt buộc phải lấy tên hàm, gán với giá trị kết quả - Tại sao phải làm như vậy: vì đây là CÚ PHÁP của VBA phải tuyệt đối tuân thủ ! - Demo: bỏ dòng “TrungBinhCong = GiaTriTrungBinh” và cho chạy lại chương trình
VBA: viết hàm
Function TrungBinhCong (so1 As Double, so2 As Double) as Double
Dim GiaTriTrungBinh As Double
GiaTriTrungBinh = (so1 + so2) / 2
TrungBinhCong = GiaTriTrungBinh
End Function
- Từ khóa: Function, End, As, Double, Dim… (và còn nhiều từ khóa khác)
- Là những từ do ngôn ngữ lập trình VBA đã định nghĩa phải học thuộc! - Khi đặt tên biến, không được phép đặt trùng với từ khóa (Demo)
32
- Kiểu dữ liệu: Double, …. phải học thuộc! - Cú pháp phải học thuộc!
- Hàm phải bắt đầu bằng Function và kết thúc bằng End Function - Để lấy kết quả, phải sử dụng tên hàm…..
VBA: viết Macro
• Cú pháp Sub Tên_Macro()
[Câu_lệnh]
End Sub • Ví dụ Sub XinChao()
MsgBox(“Xin chao cac ban”)
End Sub
33
VBA: viết Macro
• Demo Sub Tên_Macro()
[Câu_lệnh]
End Sub • Ví dụ Sub XinChao()
MsgBox(“Xin chao cac ban”)
End Sub
34
VBA: viết Macro
• Ví dụ
- Tên Macro, do người lập trình tự đặt ra
Sub XinChao()
MsgBox(“Xin chao cac ban”)
End Sub
35
- Từ khóa để khai báo 1 Macro
VBA: Hàm vs. Macro
• Macro
• Không lấy dữ liệu đầu vào • Không có kết quả trả ra
• Hàm
36
• Có dữ liệu đầu vào • Có kết quả trả ra
VBA: Vào ra dữ liệu
• Nhận giá trị từ một ô bảng tính vào một biến
TênBiến = Range(“tên_ô”).Value
TênBiến = Cells(chỉ_số_dòng, chỉ_số_cột).Value • Đưa giá trị từ một biến ra một ô bảng tính
Range(“tên_ô”).Value =
37
Cells(chỉ_số_dòng, chỉ_số_cột).Value=
VBA: Vào ra dữ liệu
• Nhận giá trị từ một ô bảng tính vào một biến
HoTen = Range(“B5”).Value
HoTen = Cells(5, 2).Value
• Đưa giá trị từ một biến ra một ô bảng tính
Range(“A10”).Value = “Lionel Messi”
Cells(3, 4).Value= 4 * 5 / 2
• Demo
38
VBA: Các kiểu dữ liệu
Kiểu dữ liệu
Miền giá trị
Byte
0 to 255
Integer
-32,768 to 32,767
Long
-2,147,483,648 to 2,147,483,648
-3.402823E+38 to -1.401298E-45 cho số âm
Single
1.401298E-45 to 3.402823E+38 cho số dương
-1.79769313486232e+308 to -4.94065645841247E-324 cho số âm
Double
4.94065645841247E-324 to 1.79769313486232e+308 số dương
Currency
-922,337,203,685,477.5808 to 922,337,203,685,477.5807
+/- 79,228,162,514,264,337,593,543,950,335 if no decimal is use
Decimal
+/- 7.9228162514264337593543950335 (28 decimal places).
39
VBA: Các kiểu dữ liệu
Kiểu dữ liệu
Miền giá trị
String (fixed length)
1 to 65,400 characters
String (variable length)
0 to 2 billion characters
Date
January 1, 100 to December 31, 9999
Boolean
True or False
Object
Any embedded object
Variant(numeric)
Any value as large as Double
Variant(text)
Same as variable-length string
40
VBA: Câu lệnh lựa chọn
• Kiểu 1
If
Khối_lệnh
End If • Kiểu 2
If
Khối_lệnh_1
Else
Khối_lệnh_2
41
End If
VBA: Câu lệnh lựa chọn
• Kiểu 1
If HoTen = “My Tam” Then
MsgBox(“Day la mot ca sy noi tieng”)
End If • Kiểu 2
If Tuoi > 60 Then
MsgBox(“Tren 60 tuoi, gia roi!”)
Else
MsgBox(“Duoi 60 tuoi, con tre lam!”)
42
End If
VBA: câu lệnh nhiều lựa chọn
• Lệnh lựa chọn Case sử dụng khi có nhiều giá trị có thể xảy ra
Select Case
Case điều_kiện_1
[khối_lệnh_1]
…..
Case điều_kiện_n
[khối_lệnh_n]
Case Else
[khối_lệnh_else]
End Select
43
VBA: câu lệnh nhiều lựa chọn
Dim GiaVeMayBay As Integer
Select Case DiDuLich Case Tokyo
GiaVeMayBay = 1000
Case Paris
GiaVeMayBay = 5000
Case NewYork
GiaVeMayBay = 15000
Case Else
GiaVeMayBay = 0
End Select
44
• Ví dụ
VBA: Lặp
• Lặp với số lần xác định tứ trước • Lặp với số lần không xác định được tử trước
45
VBA: Lặp với số lần xác định từ trước
• Cú pháp
For
[Khối_lệnh]
Next
• Ví dụ
Dim a As Integer For a=1 To 5
Cells(a, a).Value = a
46
Next a
VBA: lặp với số lần không xác định từ trước
• Cứ thực hiện cho đến khi điều kiện thỏa mãn
Do Until <điều_kiện>
[Khối_lệnh]
Loop
• Cứ thực hiện khi điều kiện còn thỏa mãn
Do While <điều_kiện>
[Khối_lệnh]
47
Loop
VBA: lặp với số lần không xác định từ trước
• Cứ thực hiện cho đến khi điều kiện thỏa mãn
Dim i As Integer i = 1 Do Until i > 5
Cells(i, 1).Value = i + 10 i = i + 1
Loop
• Cứ thực hiện khi điều kiện còn thỏa mãn
Dim i As Integer i = 1 Do While i < 6
Cells(i, 1).Value = i + 3 i = i + 1
Loop
48
III. Thực hành
49