Professional Documents
Culture Documents
- Bước 2: Trong cửa sổ Excel Options, chọn thẻ Developer giống như hình.
- Bước 3: Chỉnh sửa Macro Security để có thể chạy file có chứa Excel có chứa
code VBA: trong thẻ Developer > chọn nhóm Code > Bấm Macro Security.
- Bước 6. Mở trình soạn thảo VBA ra và bắt đầu code: bấm thẻ Developer > Chọn
nút Visual Basic.
- Bước 7: Đây là một cửa sổ soạn thảo VBA, tất cả code sẽ được viết trong cái cửa
sổ này.
Bắt đầu sử dụng VBA Excel bạn cũng cần phải nắm chắc những kiến thức cơ bản về lập
trình VBA excel dưới đây.
Tạo một macros. Trong VBA excel, ta có thể tự động hóa một nhiệm vụ với nhiều thao
tác bằng cách tạo ra một Macros.
Msgbox. Khi thực hiện các lệnh trong macros nhiều khi ta muốn thông báo cho người
dùng biết khi họ chuẩn bị, đã thực hiện xong một thao tác nào đó. Hoặc đơn giản chỉ là
cảnh báo việc họ đã nhập sai trường dữ liệu chuẩn.
Workbook và worksheet object. Đề cập phạm vi áp dụng các lệnh VBA excel trong
toàn bộ workbook hay chỉ đơn thuần trong worksheet.
Range object. Đối tượng là vùng tương ứng với một ô hoặc vùng ô trong excel. Đây là
đối tượng quan trọng nhất trong lập trình VBA excel.
Variables. Đây là một loại biến trong trong lập trình excel
If then statements. Giống như trong excel thông thường bạn dùng hàm if để so sánh xem
điều kiện có thỏa mãn hay không. Thì trong VBA ta cũng có thể làm tương tự với if then
statements.
Loop. Vòng lặp – đây là một trong những kỹ thuật mạnh mẽ nhất trong lập trình VBA
excel. Vòng lặp cho phép chúng ta lặp lại thao tác trong 1 vùng ô với mấy dòng lệnh đơn
giản.
Userform. Đây là các nút bấm, box nhập liệu, nhãn… được sử dụng để thiết kế giao diện
giúp giao tiếp với người dùng một cách thân thiện, chuyên nghiệp hơn.
Events. Sự kiện trong excel là các hành động của người dùng sau đó ta dùng code để
thực hiện các thao tác nào đó sau khi người dùng thực hiện các sự kiện có sẵn.
Function & sub. Trong excel thì function cho phép trả về một giá trị còn sub thì không.
Ví dụ như: Các bạn có thể sử dụng function để tạo ra một hàm quy đổi số sang chữ.
2. Ý nghĩa ?
Lập trình VBA trong Excel là việc viết ra các dòng/ câu lệnh để máy tự động thực hiện
những thao tác người dùng muốn làm trong Excel. Vì vậy, khi muốn thực hiện một chức
năng nào đó, ta chỉ cần gọi câu lệnh đã được lập trình sẵn bằng VBA thì Excel tự động
thực hiện các thao tác đó một cách nhanh chóng và tiết kiệm rất nhiều thời gian so với
việc thao tác thủ công bằng tay trên Ecxel. Ngoài ra, VBA trong Excel còn cho phép
người dùng tạo các nút lệnh, các trường nhập liệu cơ bản để người sử dụng dễ dàng và
thuận tiện khi thực hiện các thao tác.
Nếu có một thứ gì đó bạn có thể làm trong Excel, bạn có thể viết mã VBA để làm điều
tương tự.
Nếu bạn học các lệnh (sử dụng trình ghi macro hoặc các tài nguyên khác), bạn có thể kết
hợp nhiều hành động lại với nhau trong một macro duy nhất.
Hãy thử tưởng tượng mọi công tác tính lương, thưởng, phụ cấp, bảo hiểm, xuất biểu đồ
báo cáo, phân tích chỉ bằng cách bấm một nút duy nhất. Việc của bạn còn lại chỉ là nhập
dữ liệu vào bảng mà thôi.
- Bước 3: Trong hộp thoại Record Macro, nhập tên cho macro và gắn thêm phím
tắt nếu muốn.
Sau đó nhấn OK và bắt đầu vào ô bất kỳ, chẳng hạn tôi chọn ô D5 và gõ chữ 'Excel' rồi tô
màu vàng cho ô này rồi nhấp vào nút 'Stop Recording' trên tab Developer.
Sau khi đã ghi lại được một công việc, bây giờ chúng ta sẽ xóa chữ 'Excel' và bỏ màu ở ô
D5 và thực hiện việc chạy Macro
Nhấp vào tab Developer.
Trong nhóm Code, bấm vào nút Macros
Trong hộp thoại Macro, tại Macro name: chọn – Marco1
Bấm nút Run và cảm nhận kết quả hoặc tại trang tính Excel, nhấn tổ hợp phím 'Crtl +
E'
- Bước 3: Sau khi gán macro qua thao tác Assign Macro xong chúng ta chỉ cần
bấm vào nút biểu tượng để gọi ra macro đó.
3.3. Chỉnh sửa một Macro trong Excel
- Bước 1: Trong nhóm code , bấm vào nút “Macro”
- Bước 2: Trong hộp tên Macro , bấm vào Macro mà bạn muốn sửa. Ở đây tôi
chọn macro để sửa.
- Bước 3: Chọn Edit để chỉnh sửa Macro.
Bước 1: Để có thể lưu cả đoạn Macros VBA và giữ chúng ở trạng thái hoạt động được
khi mở file Excel thì các bạn click vào menu File .
Sau đó chọn Save As => rồi thiết lập vị trí lưu file tại máy tính là Browse.
Bước 3: Để được kết quả file chứa Macros VBA định dạng dưới tệp *.xlsm, có biểu
tượng dấu chấm than. Còn file Excel gốc định dạng *.xlsx .
Bước 4: Sau đó bạn có thể mở file chứa Macro VBA lên và test thử .
PHẦN IV: KHÁI NIỆM VỀ PHƯƠNG THỨC , THUỘC TÍNH VÀ
HÀM TRONG VBA
4.1. Khái niệm về phương thức (Methods) trong VBA
Phương thức là một dạng chương trình gắn liền với đối tượng nhằm thực hiện một hay
nhiều hành động. Phương thức không trả về giá trị như thuộc tính.
Bạn không thể gán giá trị cho phương thức nhưng có thể truyền các giá trị (Tham số). Mỗi
điều khiển sẽ có phương thức khác nhau, nhưng vẫn có phương thức rất thông dụng cho
hầu hết các điều khiển. Ngoài ra, phương thức có những tham số lựa chọn riêng để chỉ hành
động như thế nào.
Để đặt giá trị của một thuộc tính, hãy làm theo tham chiếu đến một đối tượng có dấu
chấm, tên thuộc tính, dấu bằng ( = ) và giá trị thuộc tính mới.
Ví dụ:
Trong đó: Reference: Nó chỉ định đích đến. Scroll: Đây là tham số tùy chọn. Nó có giá trị
Boolean hoặc True hay False. Nếu giá trị là true thì nó sẽ di chuyển thanh cuộn đến vị trí
chỉ đích. Nếu đó là false thì nó sẽ không di chuyển thanh cuộn.
Ví dụ: thủ tục sau sẽ chọn cell "A250" của worksheet có tên "Sheet1". Thuộc tính
Scroll:=True của câu lệnh sau sẽ cuộn tới vị trí cell "A250".
Trong đó: Macro: Nó chỉ định macro để run. Arg1 to Arg30: Đây là tham số tùy chọn. Nó
được sử dụng để truyền các tham số cho function.
Ví dụ: run một thủ tục macro có tên "MyMacro" của workbook có tên "Workbook1.xls".
Trong đó: Time: Đây là một tham số được yêu cầu. Nó chỉ định thời gian bạn muốn tiếp
tục macro.
Ví dụ 1: tạm ngưng macro đến 16h cùng ngày.
Ví dụ 2: Hiển thị cảnh báo trong khi đóng workbook đang hoạt động.
Kết quả:
Ví dụ 1.1: hiển thị đường dẫn tuyệt đối của thư mục chứa file excel macro (workbook).
Kết quả:
Ví dụ 2: hiên thị đường dẫn tuyệt đối của file excel macro.
Kết quả:
Ví dụ 2: Trong ví dụ sau, nó sẽ hiển thị số từ 1 đến 100 trong cột đầu tiên của Sheet1.
Chúng ta không thể quan sát màn hình đang cập nhật trong khi cập nhật Sheet1.
Khi chúng ta phải xử lý nhiều workbooks (nhiều file excel) và bạn muốn đọc hoặc ghi vào
một Workbook cụ thể thì bạn phải kích hoạt Workbook đó.
Cú pháp:
Ví dụ trên đóng bẳng tính đang được chọn và không lưu lại những gì thay đổi.
Phương thức Save
Chúng ta có thể lưu bảng tính bằng cách sử dụng phương thức 'Save' của đối tượng
Workbook trong Excel VBA.
Cú pháp:
Ví dụ 1: Save Workbook trong VBA
Cú pháp:
Cú pháp:
Áp dụng cú pháp trên bạn sẽ kích hoạt được đối tượng Worksheet cụ thể của một
Workbook đang được kích hoạt.
Ví dụ 1: Activate Worksheet trong VBA với tên của Worksheet
Ví dụ trên, chúng ta sao chép worksheet đang hoạt động đến vị trí cuối cùng trong cùng
Workbook.
Ví dụ trên, chúng ta thực hiện xóa đối tượng Worksheet đang hoạt động từ một
Workbook bằng cách sử dụng phương thức Delete của đối tượng Worksheet.
Ví dụ 3: Xóa Worksheet trong VBA - không hiển thị alert
Ví dụ trên, xóa "Sheet2" nhưng KHÔNG hiển thị hộp thoại Excel thông báo xác nhận tới
người dùng.
Ví dụ 2: đặt một nút lệnh trên Worksheet và thêm dòng code sau:
Tham số: Range ( Vị trí ô bắt đầu : Vị trí ô kết thúc ). Value = Giá trị muốn gán
Kết quả:
Tham số: Cells ( Vị trí dòng, Vị trí cột ). Value = Giá trị muốn gán
Kết quả:
Ví dụ 4: đặt một nút lệnh trên Worksheet và thêm dòng code sau:
Tham số: Range (Vị trí ô bắt đầu ( vị trí dòng, vị trí cột ) , Vị trí ô kết thúc ( vị trí dòng,
vị trí cột)
= Giá trị muốn gán
Kết quả:
Kết quả:
5.4.3. Các phương thức của đối tượng Range
Dưới đây là các phương thức được sử dụng thường xuyên của đối tượng Range trong
VBA:
Dưới đây là các phương thức được sử dụng thường xuyên của đối tượng Range trong
VBA:
Phương thức
Select: Để chọn Range được yêu cầu trong Worksheet
AddComment: Để thêm bình luận vào Excel Range
AdvancedFilter: Áp dụng các bộ lọc nâng cao trên Excel Range
Calculate: Để làm mới các phép tính trong Excel Range
Formula: Để thêm công thức cho Excel Range
Clear: Để xóa một Excel Range hoàn toàn bao gồm các định dạng và dữ liệu
ClearComments: Để chỉ xóa các bình luận trong Excel Range cụ thể
ClearContents: Để chỉ xóa nội dung/dữ liệu trong một Excel Range
ClearFormats : Để chỉ xóa các định dạng của một Excel Range
ClearHyperlinks: Để chỉ xóa các siêu liên kết trong một Excel Range
Copy: Để sao chép một Excel Range đến một vị trí khác
CopyFromRecordset: Sao chép dữ liệu từ recordset và dán vào một Excel Range
Cut: Cắt Excel Range trong Worksheeet
Delete: Để xóa một Range trong Worksheet
Find: Để tìm kiếm và một Cell có dữ liệu cần thiết
Insert: Để chèn một dãy các Cell, Row hoặc Column
ListNames: Để liệt kê các Excel Range được đặt tên trong bảng tính
Merge: Để hợp nhất Excel Range
Paste: Để dán dữ liệu
PasteSpecial: Để dán dữ liệu với các tiêu chí khác nhau, như các giá trị, các định dạng có
hoạt động toán học hoặc chuyển đổi
Phương thức Select
Một phương pháp quan trọng của đối tượng Range là phương thức Select. Phương thức
Select được sử dụng để chọn một range.
Ví dụ:
Kết quả:
Lưu ý: Để chọn các ô trên một Worksheet khác, bạn phải kích hoạt Worksheet này trước.
Ví dụ, các dòng code sau đây chọn ô B7 trên Worksheet thứ ba từ bên trái.
Mặc dù phương thức Copy/Paste được cho phép sử dụng trong Excel VBA, nhưng tốt
hơn là bạn sử dụng dòng code dưới đây thay vì đoạn code trên.
Kết quả:
Kết quả:
Ví dụ 2:
Kết quả:
6.1.2. Ý nghĩa
Trong một dự án VBA dữ liệu không những chỉ cần lưu hành trong nội bộ chương trình
con (Sub hay Function) mà còn cần lưu hành trong nội bộ Modul hoặc trao đổi giữa các
Modul với nhau.
6.1.3. Các kiểu biến trong VBA
Với mỗi “biến” giá trị của nó luôn được quy định ở 1 “kiểu” nào đó. Tức là khi một biến
được khai báo ta luôn phải gán cho nó một kiểu dữ liệu. Do ngôn ngữ lập trình được thiết
kế để thực hiện nhiều nhiệm vụ khác nhau nên phải có nhiều kiểu dữ liệu để đáp ứng nhu
cầu này. Về tổng thể biến trong VBA chia làm hai loại:
Các kiểu dữ liệu được định nghĩa sẵn: Hay có thể gọi là các biến cơ bản và thường
gặp, có thể kể đến như kiểu logic (Boolean), kiểu số thực (Double), kiểu số
nguyên (Integer hoặc Long), kiểu chuỗi (String)…
Các kiểu do người dùng tự định nghĩa: Là kiểu dữ liệu được xây dựng dựa trên mục
đích của người lập trình, trong đó các thành phần của kiểu dữ liệu này được lấy từ các
kiểu cơ bản đã nêu ở trên, ví dụ định nghĩa điểm trong không gian ba chiều (X, Y, Z
kiểu Double), kích thước cơ bản của dầm (B, H kiểu Double)…
Câu lệnh trên khai báo 100 biến kiểu Double có chỉ số từ 0 đến 99. Ngoài việc rút gọn
code, cách khai báo bằng mảng mang lại một số ưu điểm sau:
Dễ dàng truy xuất đến từng phần tử của mảng bằng chỉ số
Dễ dàng thêm bớt số chiều của mảng bằng câu lệnh Redim khi chương trình đang
hoạt động (mảng động).
Mô tả ma trận hay dãy số trực quan hơn.
Kiểu Variant
Variant là một kiểu dữ liệu đặc biệt khi mà nó có thể chứa tất cả các loại dữ liệu
khác. Ngoài ra kiểu Variant còn có thể chứa các giá trị đặc biệt như Error,
Nothing, Null, đối tượng…
Kiểu Variant đặc biệt là vậy nhưng không nên lạm dụng vì sẽ dẫn tới khó kiểm
soát, gây lỗi cho chương trình và khó gỡ rối.
Trong chương trình chúng ta khai báo 1 kiểu dữ liệu tự định nghĩa
Sau khi khai báo kiểu tự định nghĩa chúng ta có thể sử dụng chúng như các kiểu dữ liệu
cơ bản.
[Phạm vi hoạt động] + [dấu cách] + [Tên biến] + [dấu cách] + [as] + [dấu cách] +
[Kiểu dữ liệu của biến]
Ví dụ:
Dim i As Integer
Dim: Phạm vi của biến mang tính chất cục bộ tại nơi đặt lệnh khai báo
i: tên biến là chữ “i”
As Integer: kiểu biến là kiểu Integer, trong đó từ khóa “As” có nghĩa là “gán cho“,
“là“
PHẦN VII: CÂU LỆNH ĐIỀU KIỆN IF VÀ SELECT CASE
7.1. Câu lệnh If
7.1.1. Mệnh đề If
Mệnh đề if-else trong VBA được sử dụng để kiểm tra giá trị dạng boolean của điều kiện.
Mệnh đề này trả về giá trị True hoặc False.
Cú pháp:
Ví dụ:
Kết quả:
Kết quả:
7.1.4. Mệnh đề If lồng nhau
Một câu lệnh If hoặc ElseIf bên trong câu lệnh If hoặc ElseIf khác được biết đến như là
mệnh đề if lồng nhau. Các câu lệnh if bên trong được thực thi dựa trên các câu lệnh if bên
ngoài.
Ví dụ:
Kết quả:
Click OK
Toán tử Mô tả Ví dụ
+ Phép cộng hai toán hạng A + B sẽ cho 15
- Phép trừ hai toán hạng A - B sẽ cho -5
* Phép nhân hai toán hạng A * B sẽ cho 50
/ Phép chia lấy phần nguyên B / A sẽ cho 2
hai toán hạng
Mod Phép chia lấy phần dư hai B Mod A sẽ cho 0
toán hạng
^ Lũy thừa hai toán hạng B ^ A sẽ cho 100000
2.Các toán tử so sánh
Bảng dưới đây trình bày các toán tử so sánh sau được hỗ trợ bởi VBA.
Giả sử biến A có giá trị là 5 và biến B có giá trị là 10, sau đó:
Toán tử Mô tả Ví dụ
= Kiểm tra nếu giá trị của hai (A = B) là False.
toán hạng bằng nhau hay
không. Nếu có, thì điều
kiện là đúng.
<> Kiểm tra nếu giá trị của hai (A <> B) là True.
toán hạng bằng nhau hay
không. Nếu các giá trị
không bằng nhau, thì điều
kiện là đúng.
> Kiểm tra nếu giá trị của (A > B) là False.
toán hạng bên trái lớn hơn
giá trị của toán hạng bên
phải không. Nếu có, thì
điều kiện là đúng.
< Kiểm tra xem giá trị của (A < B) là True.
toán hạng bên trái có nhỏ
hơn giá trị của toán hạng
bên phải không. Nếu có, thì
điều kiện là đúng.
>= Kiểm tra nếu giá trị của (A >= B) là False.
toán hạng bên trái lớn hơn
hoặc bằng giá trị của toán
hạng bên phải không. Nếu
có, thì điều kiện là đúng.
<= Kiểm tra xem giá trị của (A <= B) là True.
toán hạng bên trái có nhỏ
hơn hoặc bằng giá trị của
toán hạng bên phải không.
Nếu có, thì điều kiện là
đúng.
3. Các toán tử logic (hoặc quan hệ)
Bảng dưới đây trình bày các toán tử logic sau được hỗ trợ bởi VBA.
Giả sử biến A có giá trị là 10 và biến B có giá trị là 0, sau đó:
Toán tử Mô tả Ví dụ
AND Nếu cả hai điều kiện là a<>0 AND b<>0 là False.
True, thì true.
OR Nếu một trong hai điều a<>0 OR b<>0 là true.
kiện là True, thì true.
NOT Được sử dụng để đảo NOT(a<>0 OR b<>0) là
ngược trạng thái logic của false.
toán hạng. Nếu một điều
kiện có giá trị true, thì toán
tử NOT điều kiện đó sẽ là
false
XOR Nếu chỉ một trong hai điều (a<>0 XOR b<>0) là true.
kiện là true thì biểu thức là
true, ngược lại là false.
Toán tử Mô tả Ví dụ
+ Cộng hai biến số A + B sẽ cho 15
& Nối hai chuỗi A & B sẽ cho 510
Giả sử biến A có giá trị là "Hello" và biến B có giá trị là " VBA!", sau đó:
Toán tử Mô tả Ví dụ
+ Cộng hai biến số A + B sẽ cho "Hello
VBA!"
& Nối hai chuỗi A & B sẽ cho "Hello
VBA!"
7.2. Câu lệnh Select-Case
Mệnh đề Select-Case trong VBA được sử dụng để thực thi 1 hoặc nhiều khối lệnh từ
nhiều điều kiện. Khi một người dùng muốn thực hiện một nhóm các câu lệnh tùy thuộc
vào một giá trị của một biểu thức, thì Select-Case sẽ được sử dụng. Mỗi giá trị được gọi
là Case. Câu lệnh Case Else được thực thi nếu biểu thức kiểm tra không khớp với bất kỳ
trường hợp nào được chỉ định bởi người dùng. Case Else là một câu lệnh tùy chọn trong
mệnh đề Select-Case, tuy nhiên, nó là tốt hơn khi luôn luôn có một câu lệnh Case Else
Cú pháp:
Kết quả:
Function IF
Câu 1:
Kết quả:
Câu 2:
Kết quả:
Câu 3:
Kết quả:
Câu 4:
Kết quả:
Câu 5:
Kết quả:
Function Select Case
Câu 3:
Kết quả:
Câu 4:
Kết quả:
7.3. Vòng lặp trong VBA
7.3.1. Vòng lặp For trong VBA
Vòng lặp for trong VBA được sử dụng để lặp một phần của chương trình nhiều lần.
Nếu số lần lặp là cố định thì vòng lặp for được khuyến khích sử dụng, còn nếu số lần
lặp không cố định thì nên sử dụng vòng lặp while hoặc do while.
Cú pháp:
Ví dụ 1: Sử dụng từ khóa Step 2 để tăng biến đếm 2 đơn vị sau mỗi vòng lặp.
Kết quả:
Ví dụ 2: Sử dụng từ khóa Step -2 để giảm biến đếm 2 đơn vị sau mỗi vòng lặp.
Kết quả:
Ví dụ 3: không cần sử dụng từ khóa Step, biến đếm i tăng dần từ 1 đến 5.
Kết quả:
7.3.2. Vòng lặp For-Each trong VBA
Vòng lặp For Each trong VBA được sử dụng để thực hiện một câu lệnh hoặc một nhóm
các câu lệnh cho mỗi phần tử của một mảng hoặc một collection.
Một vòng lặp For Each tương tự vòng lặp For. Tuy nhiên, vòng lặp For Each được thực
hiện cho mỗi phần tử của một mảng hoặc collection. Do đó, bộ đếm Step sẽ không tồn tại
trong loại vòng lặp này.
Cú pháp:
Ví dụ:
Kết quả:
7.3.3. Vòng lặp While-Wend trong VBA
Vòng lặp While-Wend trong VBA được sử dụng để lặp một phần của chương trình
một vài lần. Nếu điều kiện là True, tất cả các câu lệnh được thực hiện cho đến khi gặp
từ khóa Wend. Nếu điều kiện là False, vòng lặp sẽ thoát và nhảy tới câu lệnh tiếp theo
sau từ khoá Wend.
Cú pháp :
Ví dụ:
Kết quả :
7.3.4. Vòng lặp Do-While trong VBA
Vòng lặp Do-While trong VBA được sử dụng để lặp một phần của chương trình một
vài lần khi điều kiện là True. Điều kiện có thể được kiểm tra ở đầu vòng lặp hoặc ở
cuối vòng lặp.
Cú pháp:
Dưới đây là cú pháp của vòng lặp Do-While trong VBA với điều kiện được kiểm tra ở
cuối vòng lặp.
Ví dụ:
Kết quả:
7.3.5. Ví dụ minh họa
Ví dụ 1: Cho số nguyên n, cho biết n có phải là số nguyên tố hay không?
Kết quả:
Ví dụ 2: Cho số nguyên dương n, tìm số đảo ngược của n. Ví dụ, với n = 12345 thì số đảo
ngược của n là 54321
Kết quả:
Câu 3: tính tổng của N số tự nhiên đầu tiên, số N nhập từ bàn phím
Kết quả:
Câu 4: Tính tổng của Các số chẵn trong khoảng từ 1 đến N. N nhập từ bàn phím.
Kết quả: