Está en la página 1de 61

Bắt đầu với họcExcel.

Online
select * from [EXCEL]

VBA cơ bản

Hello VBA
họcExcel.Online
select * from [EXCEL]

Cảm ơn các bạn đã quyết định chọn cuốn sách này. Có thể vì tò mò, có thể
vì muốn thử học 1 kiến thức mới, dù bạn đang ở trong trạng thái nào thì
cuốn sách này sẽ mang lại cho các bạn một sự bắt đầu nhẹ nhàng nhất với
ngôn ngữ lập trình VBA được sử dụng rộng rãi trong các phần mềm tin học
văn phòng, đặc biệt là Excel. Qua cuốn sách này, bạn có thể hiểu được cơ
bản VBA là gì, thậm chí còn có thể bắt đầu áp dụng những kiến thức trong
sách để phần nào nâng cao năng suất làm việc của mình.

Nếu bạn muốn tiếp tục tìm hiểu sâu hơn, áp dụng được nhiều hơn, tiết kiệm
nhiều thời gian hơn, học 1 chương trình đã được các tổ chức như VPBank,
VietinBank, KPMG tin tưởng và sử dụng. Hãy đăng ký khoá học VBA101 -
Lập trình VBA cơ bản cho người mới bắt đầu của Thanh tại địa chỉ:

http://bit.ly/2eEOWsZ

P.S: Sau khi đọc xong, mong các bạn để lại feedback, reviews, nhận xét để
nội dung có thể hoàn thiện tốt hơn.

Sách chỉ được xuất bản duy nhất tại địa chỉ trang web:

https://hocexcel.online

Các file, các đoạn code ví dụ trong sách này có thể được tìm thấy ở đường
link sau đây

https://github.com/ndthanh/vbabook

Về Thanh:

https://www.linkedin.com/in/ducthanhnguyen/

Trang chủ:

https://blog.hocexcel.online
họcExcel.Online
select * from [EXCEL]

Nguyễn Đức Thanh:

- Trình bày
- Thiết kế bìa
- Viết nội dung
- Thiết kế trang
- Xuất bản

Cập nhật nội dung: 23/07/2017


họcExcel.Online
select * from [EXCEL]

1. Excel Macros là gì? 01


2. VBA là gì? 01
3. Làm thế nào để bắt đầu? 01
4. Sử dụng chức năng Macro Recorder 05
5. Ứng dụng của VBA / Macros 13
6. Làm việc với đối tượng Workbook 14
7. Làm việc với đối tượng Worksheet 19
8. Làm việc với đối tượng Range 23
9. Thuộc tính Cells của đối tượng Worksheet 30
10. Biến số và kiểu dữ liệu 31
11. Cấu trúc IF trong VBA 35
12. Cấu trúc WITH … END WITH 39
13. Vòng lặp trong VBA 40
14. Lọc dữ liệu từ 1 Sheet ra nhiều sheets 48
15. Tổng hợp dữ liệu nhiều sheets vào 1 sheet 51
16. Làm việc với mảng trong VBA 52
17. Sub và Function trong Excel 54
18.Hàm người dùng - UDF (User defined function) 55
họcExcel.Online
select * from [EXCEL]

01
1. Excel Macros là gì?
Excel Macros là những chương trình nhỏ giúp lặp đi lặp lại những thao tác
từ đơn giản đến phức tạp một cách tự động trong Excel. Ngoài Excel
Macros, chúng ta còn có thể gặp Word Macro, PowerPoint Macro, Outlook
Macro …

2. VBA là gì?
VBA viết tắt của Visual Basic for Applications, là một ngôn ngữ lập trình đi
kèm với một số phần mềm của Microsoft, trong đó có Excel, Word,
PowerPoint, Outlook, …

3. Làm thế nào để bắt đầu?


Để bắt đầu với Excel Macros nói riêng hay Macros nói chung và ngôn ngữ
lập trình VBA, chúng ta sẽ đi mở trình soạn thảo VBA. Để mở trình soạn
thảo VBA, các bạn hãy theo từng bước sau đây

1. Trong Excel, bấm chuột phải vào Ribbon và chọn mục Customize the
Ribbon …
họcExcel.Online
select * from [EXCEL]

02
2. Trong cửa sổ Excel Options, chọn mục Customize Ribbon bên tay trái.
Trong Main Tabs, tích vào lựa chọn Developer rồi nhấn OK

3. Kết quả của bước số 2, thẻ Developer đã được hiển thị trên Ribbon của
Excel
họcExcel.Online
select * from [EXCEL]

03
4. Để chạy được file Excel có chứa Macros hoặc code VBA, tuỳ chỉnh về
Macro Security cần được thiết lập như sau. Trong thẻ Developer, bấm nút
Macro Security

Trong cửa sổ Trust Center, thiết lập các lựa chọn như hình vẽ
họcExcel.Online
select * from [EXCEL]

04
5. Đến bước này, file Excel đang làm việc cần được lưu dưới dạng có hỗ trợ
Macros hoặc code VBA với phần mở rộng là XLSM. Để thực hiện việc này,
trong Excel, chọn thẻ File > Save as … hoặc sử dụng phím tắt F12 trên bàn
phím

Đến bước này, file Excel đã sẵn sàng cho việc sử dụng với Macros hoặc
VBA.
họcExcel.Online
select * from [EXCEL]

05
4. Sử dụng chức năng Macro Recorder
Chức năng Macro Recorder sẽ giúp chúng ta rất nhiều trong việc học VBA.
Để ghi 1 macro đầu tiên: chọn thẻ Developer > bấm nút Record Macro

Bấm nút http://bit.ly/2eEOWsZ hoặc

SCAN MÃ
ĐỂ NHẬN NGAY COUPON

GIẢM GIÁ 40%


KHOÁ HỌC

VBA101 - VBA cơ bản cho người


mới bắt đầu
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

06
4. Sử dụng chức năng Macro Recorder
Chức năng Macro Recorder sẽ giúp chúng ta rất nhiều trong việc học VBA.
Để ghi 1 macro đầu tiên: chọn thẻ Developer > bấm nút Record Macro

Trong hộp thoại Record Macro, chúng ta có thể đặt tên cho Macro hoặc
gán phím tắt và viết miêu tả cho Macro đó. Ở đây, để tiếp tục ta bấm nút
OK.
họcExcel.Online
select * from [EXCEL]

07

Trong quá trình ghi code Macro, thao tác của bạn ở cửa sổ bên tay trái sẽ được chức năng Record Macro ghi lại
trong Macro1() bên tay phải
họcExcel.Online
select * from [EXCEL]

08
Mặc định, Macro tạo ra sẽ được ghi trong Module 1 như hình minh hoạ.
Trong quá trình học VBA bằng cách ghi Macro, các bạn nên để cửa sổ Excel
và cửa số soạn thảo VBA song song, khi đó bạn có thể nhìn thấy thao tác
nào trên cửa sổ Excel sẽ được ghi lại bởi Macro ra sao.

Sau khi kết thúc việc ghi Macro, chúng ta cần bấm vào thẻ Developer 1 lần
nữa và bấm nút Stop Recording
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

09
Viết những dòng code đầu tiên
1. Để viết hoặc chỉnh sửa code VBA trong Excel, trình soạn thảo VBA trong
Excel sẽ hỗ trợ việc này. Để mở trình soạn thảo VBA (Visual Basic Editor,
viết tắt VBE), chúng ta sử dụng thẻ Developer, rồi bấm nút Visual Basic như
hình minh hoạ hoặc bấm tổ hợp phím tắt ALT + F11

Cửa sổ soạn thảo VBA trông sẽ như thế này

Cửa sổ Locals, sẽ giúp bạn theo dõi các đối tượng


và biến số trong quá trình chạy code VBA.
Cách mở: Menu View > Locals
Cửa sổ Project thể hiện thông tin liên quan đến các
đối tượng bảng tính, files, form
Cách mở: Menu View > Project Explorer
Cửa sổ Properties thể hiện các thuộc tính của đối
tượng đang được chọn. Chúng ta có thể thay đổi
thuộc tính của các đối tượng trực tiếp trong cửa sổ
này
Cách mở: Menu View > Properties Window

Đây là cửa sổ Immediate


(Cách mở: Menu View > Immediate Window)
Cửa sổ Immediate Window là nơi chúng ta có thể
thử code VBA hoặc hiển thị nội dung của lệnh
Debug.Print
họcExcel.Online
select * from [EXCEL]

10
2. Module sẽ là nơi chứa code VBA, để tạo 1 Module mới, trong VBE, chọn
menu Insert > Module. Tổ hợp phím tắt để tạo 1 Module mới là ALT + I + M

3. Module mới được tạo ra sẽ có tên mặc định là Module1. Tên của Module
này có thể được đổi trong cửa sổ Properties > thuộc tính (Name)

GIẢM NGAY 30% Khoá học


http://bit.ly/2eEOWsZ VBA CHO NGƯỜI MỚI BẮT ĐẦU
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

11
4. Click đúp vào Module mới tạo ra, chúng ta có thể soạn thảo đoạn code
VBA đầu tiên

5. Để chạy đoạn code này, chúng ta có thể click chuột trái vào bên trong
Sub macroDauTien(), có thể là ngay trước chữ “MsgBox” rồi chọn
menu Run > Run Sub/UserForm
họcExcel.Online
select * from [EXCEL]

12
6. Sau khi chạy đoạn Macro đầu tiên, kết quả là 1 thông báo trong Excel

Đến bước này, nếu bạn nhận được thông báo như vậy, nghĩa là môi trường
lập trình VBA của bạn đã được thiết lập thành công và bạn có thể bắt đầu
thực hiện việc lập trình VBA hoặc tạo ra những Macro của riêng mình. Ở lần
tới, khi bạn mở 1 file Excel có chứa Macro hoặc code VBA, bạn sẽ nhận được
thông báo như sau, bạn chỉ cần bấm nút Enable Content là có thể sử dụng
được Macro đã lưu trong file rồi.
họcExcel.Online
select * from [EXCEL]

13
5. Ứng dụng của VBA / Macros

XLS XLS XLS XLS

1. Tách 1 file Excel ra nhiều files Excel


2. Tách 1 sheet Excel ra nhiều sheets Excel
3. Gửi thư hàng loạt qua Outlook tự động
4. Tạo báo cáo tự động, lấy số liệu, định dạng số liệu
5. Tạo nhiều files Word lấy thông tin từ 1 file Excel
6. Tạo nhiều files PowerPoint lấy thông từ 1 file Excel
7. Tổng hợp dữ liệu từ nhiều files Excel vào 1 file Excel
8. Tổng hợp dữ liệu từ nhiều sheets Excel vào 1 file Excel
9. Xử lý dữ liệu từ nhiều nguồn, nhiều định dạng 1 cách tự động
10. …

và rất nhiều ứng dụng khác các bạn sẽ được giới thiệu trong suốt các khoá
học từ Học Excel Online

1 2 3 4 5
họcExcel.Online
select * from [EXCEL]

14
6. Làm việc với đối tượng Workbook
Workbook hay file Excel, tệp Excel là đối tượng đầu tiên bạn quan tâm tới
và được tiếp xúc khi lập trình VBA, trong chương này, chúng ta sẽ đi làm
việc với đối tượng Workbook và tìm hiểu 1 số thuộc tính cơ bản của đối
tượng này. Trong sách này ở phần phía sau, các bạn sẽ dựa vào kiến thức
chương này để có thể tách gộp được nhiều files Excel phục vụ cho mục đích
của mình. Vậy nên, hãy chú ý vào những thuộc tính mà đối tượng Workbook
hỗ trợ.

Để học các kiến thức này 1 cách trực quan và sinh động hơn, hãy click link
tới khoá học ở phía dưới. Mong hẹn gặp các bạn trong khoá học.

Bấm nút http://bit.ly/2eEOWsZ hoặc

SCAN MÃ
ĐỂ NHẬN NGAY COUPON

GIẢM GIÁ 40%


KHOÁ HỌC

VBA101 - VBA cơ bản cho người


mới bắt đầu
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

15
6. Làm việc với đối tượng Workbook
Truy cập một số thuộc tính cơ bản của Workbook
Để bắt đầu làm việc với đối tượng Workbook trong Excel, bạn có thể thử
những dòng code sau đây trong 1 thủ tục (Sub) được lưu ở trong 1 Module

Ý nghĩa của từng câu lệnh như thế nào thì có lẽ các bạn cũng đã đoán
được:

Range("A1") = ThisWorkbook.FullName
↳ Câu lệnh này ghi đường dẫn đầy đủ đến Workbook chứa macro vào
vùng A1

Range("A2”) = ThisWorkbook.Name
↳ Câu lệnh này ghi tên của Workbook hoặc file Excel bao gồm cả phần
mở rộng vào vùng A2

Range("A3”) = ThisWorkbook.Path
↳ Câu lệnh này ghi đường dẫn tới thư mục lưu Workbook hoặc file Excel
hiện thời vào vùng A3
họcExcel.Online
select * from [EXCEL]

16
Một số thao tác cơ bản với Workbook
Mở Workbook

Thủ tục sau đây sẽ mở 1 Workbook biết đường dẫn tới Workbook đó được
lưu trong vùng A1. Hãy thử Sub này trong Module của 1 file Excel bạn mới
tạo ra.

Workbooks.Open Filename:={đường dẫn tới file excel}


↳ Câu lệnh này sẽ mở File Excel được lưu ở trong đường dẫn

Đóng Workbook

Workbooks.Close SaveChanges:=True
↳ Câu lệnh này sẽ đóng 1 Workbook và lưu những thay đổi được thực hiện
trên Workbook đó. Nếu thay True bằng False thì Workbook sẽ được
đóng, thay đổi sẽ không được lưu
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

17
Tạo mới Workbook

Để tạo mới 1 Workbook, chúng ta có thể sử dụng câu lệnh VBA sau trong 1
Sub

Workbooks.Add
↳ Câu lệnh này sẽ tạo mới 1 Workbook

Lưu Workbook với 1 tên khác (Save as …)

Để lưu Workbook chứa code VBA dưới 1 tên khác, ta có thể thực hiện đoạn
code sau đây

ThisWorkbook.SaveAs "C:\Users\thanh\Desktop\a.xlsm"
↳ Câu lệnh này sẽ lưu Workbook có chứa đoạn code VBA trên dưới tên là
a.xlsm tại đường dẫn chỉ định
họcExcel.Online
select * from [EXCEL]

18
Đếm số lượng Workbook, in đường dẫn ra cửa sổ Immediate

Trong 1 thời điểm, có thể nhiều file Excel sẽ cùng được mở trên máy tính
của bạn, để đếm được số lượng Workbook hoặc in đường dẫn tới các
Workbook đó chúng ta có thể có 1 số đoạn code như sau

Debug.Print Workbooks.Count
↳ Câu lệnh này sẽ ghi số lượng Workbooks đang mở ra cửa sổ Immediate

Debug.Print Workbooks(2).FullName
↳ Câu lệnh này sẽ ghi tên đầy đủ và đường dẫn tới Workbooks thứ 2
đang được mở

Debug.Print Workbooks(Workbooks.Count).FullName
↳ Câu lệnh này sẽ ghi tên đầy đủ và đường dẫn tới Workbooks cuối cùng
được mở
họcExcel.Online
select * from [EXCEL]

19
7. Làm việc với đối tượng Worksheet
Ngoài Workbook là đối tượng chúng ta đã nhắc đến trong chương trước, đối
tượng Worksheet chỉ những bảng tính trong file Excel của chúng ta là nơi
chúng ta lưu trữ và xử lý phần lớn dữ liệu. Các thao tác với Worksheet cùng
các thuộc tính của đối tượng này sẽ được trình bày trong các trang tiếp
theo của tài liệu

Bấm nút http://bit.ly/2eEOWsZ hoặc

SCAN MÃ
ĐỂ NHẬN NGAY COUPON

GIẢM GIÁ 40%


KHOÁ HỌC

VBA101 - VBA cơ bản cho người


mới bắt đầu
họcExcel.Online
select * from [EXCEL]

20
7. Làm việc với đối tượng Worksheet
Các cách tham chiếu tới Worksheet trong Excel
Trước khi truy cập vào các thuộc tính của đối tượng Worksheet trong Excel,
bạn cần tham chiếu đến đối tượng này. Để tham chiếu tới Worksheet trong
Excel, bạn có thể sử dụng 1 số cách sau đây

Debug.print Worksheets(1).Name
↳ Câu lệnh này ghi tên của Worksheet ngoài cùng bên trái ra cửa sổ
Immediate. Đây là cách tham chiếu theo thứ tự

Debug.print Worksheets.Count
↳ Câu lệnh này ghi ra cửa sổ Immediate số lượng Sheets trong Workbook

Debug.print Worksheets(Worksheets.Count).Name
↳ Câu lệnh này ghi ra cửa sổ Immediate tên của Sheets ngoài cùng bên
phải trong Workbook - “Bang 7”
Worksheets.Count trả về số lượng Worksheets trong Workbook hiện
thời
họcExcel.Online
select * from [EXCEL]

21
Tham chiếu tới Worksheets bằng code name: trong trình soạn thảo VBA,
cửa sổ Project - VBAProject, bạn nhìn thấy Sheet1 (Bang 1). Ở đây, Sheet1
là code name của đối tượng bảng tính này, còn “Bang 1” là tên của bảng
tính đó.

Debug.print Sheet1.Name
↳ Câu lệnh này ghi tên của bảng tính có code name là Sheet1 ra cửa sổ
Immediate. Đây là cách tham chiếu theo code name.

Debug.print Worksheets(“Bang 1”).Name


↳ Câu lệnh này ghi tên của bảng tính có tên là “Bang 1” ra cửa sổ
Immediate. Đây là cách tham chiếu theo tên bảng tính

Thêm 1 Worksheet
Debug.print Worksheets.Add
↳ Thêm 1 worksheet mới

Debug.print Worksheets.Add Count:=3


↳ Thêm 3 worksheet mới

Debug.print Worksheets.Add Before:=Worksheets(1)


↳ Thêm 1 worksheet mới, phía bên trái Worksheet đầu tiên

Debug.print Worksheets.Add After:=Worksheets(3)


↳ Thêm 1 worksheet mới, phía bên phải Worksheet thứ 3

Copy 1 Worksheet
Sheet1.copy After:=Worksheets(3)
↳ Copy bảng tính với code name Sheet1, bản copy được đặt phía sau
Worksheet thứ 3

Sheet1.copy Before:=Worksheets(3)
↳ Copy bảng tính với code name Sheet1, bản copy được đặt phía trước
Worksheet thứ 3
họcExcel.Online
select * from [EXCEL]

22
Xoá 1 Worksheet
Sheet1.Delete
↳ Câu lệnh này sẽ xoá bảng tính có code name là Sheet1, khi thực hiện
câu lệnh này, Excel sẽ hỏi để xác nhận lại, để bỏ quan xác nhận và thực
hiện thao tác xoá bảng tính, code như sau

Application.DisplayAlerts = False
Sheet1.Delete
Application.DisplayAlerts = True

↳ Xoá bảng tính với code name Sheet1, bỏ qua hộp thoại xác nhận của
Excel về việc xoá

Sửa tên 1 Worksheet


Sheet1.Name = “New Name”
↳ Câu lệnh này sẽ đổi tên bảng tính có code name là Sheet1 thành “New
Name”

GIẢM NGAY 30% Khoá học


http://bit.ly/2eEOWsZ VBA CHO NGƯỜI MỚI BẮT ĐẦU

Ẩn / Hiện 1 bảng tính


Sheet1.Visible = xlSheetHidden
↳ Câu lệnh này sẽ ẩn bảng tính có code name là Sheet1

Sheet1.Visible = xlSheetVisible
↳ Câu lệnh này sẽ hiện bảng tính có code name là Sheet1

Sheet1.Visible = xlSheetVeryHidden
↳ Câu lệnh này sẽ ẩn bảng tính có code name là Sheet1. Chế độ ẩn này
làm cho bảng tính không thể được bỏ ẩn theo cách bấm chuột phải vào
tên sheet > Unhide … trên giao diện của Excel
họcExcel.Online
select * from [EXCEL]

23
8. Làm việc với đối tượng Range
Đối tượng Range sẽ là 1 trong những đối tượng chúng ta sử dụng đến nhiều
nhất trong quá trình lập trình với VBA trong Excel. Đối tượng này tạo nên
bảng tính Excel, nhiều bảng tính (Worksheet) sẽ tạo nên 1 Workbook hay 1
file Excel …

Bấm nút http://bit.ly/2eEOWsZ hoặc

SCAN MÃ
ĐỂ NHẬN NGAY COUPON

GIẢM GIÁ 40%


KHOÁ HỌC

VBA101 - VBA cơ bản cho người


mới bắt đầu
họcExcel.Online
select * from [EXCEL]

24
8. Làm việc với đối tượng Range
Tham chiếu đến vùng trong Excel, ghi dữ liệu
Range(“A1”).value = “Hoc Excel Online”
↳ Câu lệnh này sẽ tham chiếu đến vùng A1 và đặt thuộc tính giá trị của
vùng A1 với nội dung “Hoc Excel Online”

Range(“A1:B5”).value = “Hoc Excel Online”


↳ Câu lệnh này sẽ tham chiếu đến vùng A1:B5 và đặt thuộc tính giá trị
của vùng A1:B5 với nội dung “Hoc Excel Online”

ThisWorkbook.Sheet1.Range(“A1:B5”).value = “Hoc Excel Online”


↳ Khi làm việc với nhiều file Excel cùng 1 lúc, chúng ta cần chỉ ra rõ ràng
địa chỉ vùng chúng ta đang cần làm việc. Trong câu code trên, ý nghĩa
là: đặt giá trị của vùng A1:B5 của bảng tính có code name là Sheet1
trong file Excel chứa câu code trên là “Hoc Excel Online”

Sheet1.Range(“A1:B5”).value = “Hoc Excel Online”


↳ Nếu chúng ta chỉ làm việc với 1 file Excel, thì chúng ta có thể bỏ
ThisWorkbook đi, và thực hiện câu code như trên.

Range(“A1:B5,C2:D3”).value = “Hoc Excel Online”


↳ Câu lệnh trên sẽ điền giá trị “Hoc Excel Online” vào vùng A1:B5 và
C2:D3

Một số thuộc tính và phương thức của Range


Thuộc tính Column, Row

Debug.print Range(“E8”).Column
↳ Kết quả của câu lệnh trên là 5, được ghi ra trong cửa sổ Immediate

Debug.print Range(“E8”).Row
↳ Kết quả của câu lệnh trên là 8, được ghi ra trong cửa sổ Immediate
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

25
Một số thuộc tính và phương thức của Range
Thuộc tính Column, Row

Debug.print Range(“E8”).Column
↳ Kết quả của câu lệnh trên là 5, được ghi ra trong cửa sổ Immediate

Debug.print Range(“E8”).Row
↳ Kết quả của câu lệnh trên là 8, được ghi ra trong cửa sổ Immediate

Chú ý để không nhầm với Rows và Columns

Debug.print Columns.Count
↳ Đối với file xlsx, kết quả của câu lệnh trên là 16384 là số cột mà file
Excel này hỗ trợ

Debug.print Rows.Count
↳ Đối với file xlsx, kết quả của câu lệnh trên là 1048576 là số dòng mà file
Excel này hỗ trợ

Phương thức End và Select

Range(“A100”).End(xlUp).select
↳ Bắt đầu từ ô A100, di chuyển ngược lên phía trên đến ô có nội dung và
chọn ô đó
họcExcel.Online
select * from [EXCEL]

26
Debug.print Range(“A” & Rows.Count).End(xlUp).Row
↳ Ghi ra cửa sổ Immediate dòng cuối cùng có chứa dữ liệu

Thuộc tính Address

Debug.print Range(“A4”).Address
↳ Ghi ra cửa sổ Immediate địa chỉ tuyệt đối của ô A4 là $A$4

Thuộc tính Formula

Range(“A5”).Formula = “=SUM(A1:A4)"
↳ Điền công thức như hình minh hoạ vào ô A5 bằng code VBA
họcExcel.Online
select * from [EXCEL]

27
Sử dụng Range.Offset

Giả sử chúng ta đang lựa chọn ô F8

Range(“F8”).Offset(,2).select
↳ Di chuyển 2 cột sang phải tính từ cột F. Kết quả là ô H8 được chọn

Range(“F8”).Offset(,-2).select
↳ Di chuyển 2 cột sang trái tính từ cột F. Kết quả là ô D8 được chọn

Range(“F8”).Offset(2).select
↳ Di chuyển 2 dòng xuống dưới tính từ hàng số 8. Kết quả là ô F10 được
chọn

Range(“F8”).Offset(-2).select
↳ Di chuyển 2 dòng lên trên tính từ hàng số 8. Kết quả là ô F6 được chọn

Range(“F8”).Offset(2,3).select
↳ Di chuyển 2 dòng xuống dưới và 3 cột sang phải tính từ vị trí ô F8. Kết
quả là ô i10 được chọn

GIẢM NGAY 30% Khoá học


http://bit.ly/2eEOWsZ VBA CHO NGƯỜI MỚI BẮT ĐẦU
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

28
Sử dụng Range.Resize

Range(“F8”).Resize(1,1).select
↳ Câu lệnh trên sẽ thay đổi kích thước của vùng đang được chọn là F8,
với tham số (1,1) thì vùng chọn này sẽ được giữ nguyên là ô F8

Range(“F8”).Resize(2,3).select
↳ Câu lệnh trên sẽ thay đổi kích thước của vùng đang được chọn là F8,
mở rộng vùng chọn kể từ F8 - 2 dòng và 3 cột, kết quả là vùng F8:H9
được chọn
họcExcel.Online
select * from [EXCEL]

29
Sử dụng Range.Copy

Range(“A1:B5”).Copy Range(“D1”)
↳ Câu lệnh trên sẽ copy vùng dữ liệu bao gồm cả định dạng và dữ liệu từ
vùng A1:B5 đến vùng D1:E5, lưu ý, tuy dữ liệu được copy vào vùng D1:E5
nhưng chúng ta chỉ cần đưa ra nơi cần copy tới là vùng D1

Sử dụng Range.PasteSpecial

Range(“A1:B5”).Copy
Range(“A8”).PasteSpecial <paste Type>

↳ 2 câu lệnh trên sẽ copy dữ liệu từ vùng A1:B5, và dán “đặc biệt” bắt đầu
ở vùng A8, các kiểu dán dữ liệu có thể sử dụng là

Dán tất cả dữ liệu


Dán tất cả trừ định dạng đường viền
Dán và trộn định dạng có điều kiện
Dán và sử dụng Source Theme
Dán chiều rộng của cột
Dán cả ghi chú (comments)
Dán định dạng
Dán công thức
Dán công thức và định dạng số
Dán Data Validation
Dán giá trị (value)
Dán giá trị và định dạng số
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

30
9. Thuộc tính Cells của đối tượng
Worksheet
Khác với đối tượng Range có thể tham chiếu đến 1 vùng gồm nhiều ô trong
Excel, thuộc tính Cells của đối tượng Worksheet chỉ có thể tham chiếu đến 1
ô duy nhất trên bảng tính Excel

Cú pháp của việc sử dụng Cells để tham chiếu đến ô trong Excel như sau:

Cells([chỉ số hàng], [chỉ số cột])

Ví dụ khi chúng ta muốn điền dữ liệu vào ô A4, thì cách sử dụng Range
hoặc Cells sau đây đưa lại kết quả giống nhau

Range(“A4”).Value = 234
Cells(4,1).Value = 234

Tuỳ vào nhu cầu xử lý dữ liệu mà mỗi cách tham chiếu đến 1 ô sẽ có những
lợi ích riêng.

Tìm dòng cuối chứa dữ liệu với Cells


Để tìm được dòng cuối cùng có chứa dữ liệu trong cột A, chúng ta, có thể sử
dụng công thức sau để ghi dòng cuối cùng có chứa dữ liệu ra cửa sổ
Immediate

Debug.print Cells(Rows.Count, 1).End(xlUp).Row

Diễn giải: Cells(Rows.Count, 1) cho chúng ta ô cuối cùng trong cột A.


End(xlUp) sẽ tương đương với việc di chuyển lên tới ô có chứa dữ liệu đầu
tiên. ( .Row ) sẽ cho chúng ta biết dòng hiện tại của ô chứa dữ liệu đó

Tìm cột cuối chứa dữ liệu với Cells


Để tìm được cột cuối cùng có chứa dữ liệu trong dòng thứ nhất, chúng ta có
thể sử dụng công thức sau để ghi dòng cuối cùng có chứa dữ liệu ra cửa sổ
Immediate

Debug.print Cells(1, Columns.Count).End(xlToLeft).Column


họcExcel.Online
select * from [EXCEL]

31
10 .Biến số và kiểu dữ liệu
Các kiểu biến số mà chúng ta quan tâm đến khi sử dụng VBA là kiểu Long,
kiểu Double, kiểu String, kiểu Boolean, kiểu Variant, kiểu Object, và 1 số kiểu
dữ liệu khác. Trong các phần tiếp theo các bạn sẽ được tiếp xúc và giới
thiệu với các kiểu biến số này cũng như cách sử dụng của chúng.

Bấm nút http://bit.ly/2eEOWsZ hoặc

SCAN MÃ
ĐỂ NHẬN NGAY COUPON

GIẢM GIÁ 40%


KHOÁ HỌC

VBA101 - VBA cơ bản cho người


mới bắt đầu
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

32
10. Biến số và kiểu dữ liệu
Các kiểu biến số mà chúng ta quan tâm đến khi sử dụng VBA là kiểu Long,
kiểu Double, kiểu String, kiểu Boolean, kiểu Variant, kiểu Object, và 1 số kiểu
dữ liệu khác. Trong các phần tiếp theo các bạn sẽ được tiếp xúc và giới
thiệu với các kiểu biến số này cũng như cách sử dụng của chúng.

Một ví dụ tiêu biểu cho việc sử dụng biến số trong VBA là: lưu giá trị của
vùng vào biến số, xử lý dữ liệu này trong VBA và ghi lại ra 1 vùng trên Excel.
Việc xử lý dữ liệu như thế này đôi khi sẽ tắc tốc độ cho file Excel của bạn và
giúp bạn làm được những điều mà công thức Excel bình thường không hỗ
trợ.

Cách khai báo biến


Để khai báo 1 biến, chúng ta có cú pháp sau đây:

Trong đó:

• Từ khoá Dim: cho VBA biết chúng ta muốn khai báo biến
• Từ khoá As: cho VBA biết chúng ta sẽ khai báo biến với 1 kiểu xác
định
• Từ khoá Long, Boolean, Variant, String, Range … là từ khoá chỉ kiểu dữ
liệu
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

33
Biến nào dùng trong trường hợp nào
Một cách đơn giản nhất:

• Các biến Long, Integer dùng để lưu trữ dữ liệu số nguyên


• Các biến Double sẽ lưu trữ dữ liệu dạng số có phần thập phân
• Các biến Boolean sẽ lưu trữ dữ liệu logic, chỉ nhận giá trị TRUE hoặc
FALSE
• Các biến Variant thì sẽ được VBA ép kiểu khi chương trình chạy
• Các biến String sẽ dùng để lưu dữ liệu dạng chuỗi
• Các biến Object để lưu các đối tượng
• Các biến Range sẽ lưu các vùng trên bảng tính
• …

Cách gán giá trị cho biến


Để gán giá trị cho biến, chúng ta đặt tên biến bên tay trái, tiếp theo đó là
dấu bằng, rồi đến giá trị cần gán cho biến. Đối với các biến đối tượng
(Object, Range, Worksheet, Workbook, …), để gán giá trị cho những biến này
thì chúng ta cần thêm từ khoá Set rồi đến tên biến, tiếp theo là đến dấu
bằng, sau đó đến giá trị tham chiếu cho biến đó
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

34
Chúng ta sẽ có 1 ví dụ nhỏ để ứng dụng cho việc dùng biến số trong VBA
như sau: Lưu giá trị của ô A1 và A2 và 2 biến và tính tổng của 2 giá trị này
trong VBA rồi ghi kết quả ra ô A3. Đoạn code để thực hiện việc này có thể
được viết như sau
họcExcel.Online
select * from [EXCEL]

35
11. Cấu trúc IF trong VBA

FALSE TRUE
Biểu thức logic

CODE

CODE

Bấm nút http://bit.ly/2eEOWsZ hoặc

SCAN MÃ
ĐỂ NHẬN NGAY COUPON

GIẢM GIÁ 40%


KHOÁ HỌC

VBA101 - VBA cơ bản cho người


mới bắt đầu
họcExcel.Online
select * from [EXCEL]

36
Cấu trục IF đơn giản
Cấu trúc IF trong VBA giúp chúng ta giải quyết các vấn đề liên quan đến
điều kiện. Ví dụ bạn muốn nếu ô A1 có giá trị lớn hơn 50 thì bạn ghi sang ô
B1 giá trị là OK. Câu lệnh điều kiện đơn giản này có thể được viết như sau

Bắt đầu khối lệnh IF Từ khoá bắt buộc


Điều kiện để kiểm tra *

Kết thúc khối lệnh IF Câu lệnh sẽ được thực thi


nếu điều kiện IF có giá trị
đúng (TRUE)

GIẢM NGAY 30% Khoá học


http://bit.ly/2eEOWsZ VBA CHO NGƯỜI MỚI BẮT ĐẦU

* Phần điều kiện để kiểm tra này có thể được ghép từ nhiều điều kiện khác
nối với nhau. Ví dụ: Nếu giá trị của ô A1 > 50 và nhỏ hơn 100, khối lệnh IF có
thể được viết như sau
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

37
Tiếp theo, chúng ta đến với ví dụ nếu A1 lớn hơn 50 hoặc B1 nhỏ hơn 200
thì sẽ ghi vào C1 giá trị “OK”

Với những điều kiện phức tạp, chúng ta nên sử dụng các biến số, ví dụ như
sau

Cấu trục IF đơn giản


Nếu điều kiện của bạn đơn giản và code bên trong khối lệnh IF không phức
tạp, bạn có thể dùng cấu trúc IF 1 dòng như sau (bỏ qua “End If” và viết tất
cả trên cùng 1 dòng)

If Range(“A1”) = 100 Then Range(“B1”) = “OK”


họcExcel.Online
select * from [EXCEL]

38
Cấu trúc IF … THEN … ELSE …
Cấu trúc IF THEN ở phần trước khá đơn giản, chúng ta chỉ có thể kiểm tra
được 1 điều kiện, trong phần tiếp theo này, cấu trúc IF … THEN … ELSE … sẽ
giúp chúng ta kiểm tra nhiều điều kiện phức tạp hơn

Ví dụ: Nếu giá trị trong ô A1 > 50 thì chúng ta ghi vào ô B1 là “OK”, nếu giá
trị trong A1 nhỏ hơn hoặc bằng 50 thì chúng ta ghi vào ô B1 là “not OK”.
Đoạn code này có thể được viết như sau

Cấu trúc IF … THEN … ELSEIF … ELSE …


Nếu điều kiện các bạn cần kiểm tra còn phức tạp hơn nữa, chúng ta có thể
sử dụng đến cấu trúc IF … THEN … ELSEIF … ELSE …
Ví dụ:

• Nếu giá trị A1 là A thì ghi vào B1 giá trị 100


• Nếu giá trị A1 là B thì ghi vào B1 giá trị 50
• Nếu giá trị A1 là C thì ghi vào B1 giá trị 20
• Với các giá trị còn lại thì ghi vào giá trị 10
họcExcel.Online
select * from [EXCEL]

39
12. Cấu trúc WITH … END WITH
Khi làm việc với cùng 1 đối tượng trong VBA, chúng ta nên dùng cấu trúc
with … end with để code chạy nhanh hơn và ngắn gọn, rõ ràng hơn. Đối
tượng chúng ta nói đến có thể là Range, Worksheet, Workbook, Chart, …

Khoá học VBA cơ bản cho người mới bắt đầu


Click link giảm giá 30%: https://goo.gl/bxGUEm
họcExcel.Online
select * from [EXCEL]

40
13. Vòng lặp trong VBA
Vòng lặp hay cấu trúc lặp trong ngôn ngữ lập trình sẽ giúp chúng ta thực
hiện 1 loạt thao tác rất nhanh chóng. Đây là 1 trong những nội dung quan
trọng để các bạn có thể hiểu được những đoạn code của người khác viết ra.
Bài này các bạn phải đọc cẩn thận bởi vì vòng lặp không được ghi lại bởi
chức năng Macro Recorder

Bấm nút http://bit.ly/2eEOWsZ hoặc

SCAN MÃ
ĐỂ NHẬN NGAY COUPON

GIẢM GIÁ 40%


KHOÁ HỌC

VBA101 - VBA cơ bản cho người


mới bắt đầu
họcExcel.Online
select * from [EXCEL]

41
13. Vòng lặp trong VBA
Vòng lặp với chỉ số
Để thực hiện công việc lặp đi lặp lại 1 cách nhanh chóng, chúng ta sẽ dùng
tới vòng lặp trong VBA. Chúng ta sẽ tìm hiểu vòng lặp qua 1 ví dụ sau đây:
In ra cửa sổ Immediate các số từ 1 tới 10

Nếu chưa biết vòng lặp, chúng ta sẽ làm như sau:

Sub vong_lap()
Debug.Print 1
Debug.Print 2
Debug.Print 3
Debug.Print 4
Debug.Print 5
Debug.Print 6
Debug.Print 7
Debug.Print 8
Debug.Print 9
Debug.Print 10
End Sub

Nếu đã biết sử dụng vòng lặp, chúng ta sẽ làm như sau

Sub vong_lap_2()
Dim i as Long
For i = 1 to 10
Debug.Print i
Next i
End Sub

Trong ví dụ trên:

• For, to, next là từ khoá


• i = 1 to 10 cho VBA biết chúng ta muốn lặp từ giá trị số nguyên 1 đến
giá trị số nguyên 10

Vòng For trên sẽ được thực thi bắt đầu với i = 1. Với i bằng 1 thì
Debug.Print i sẽ cho ra kết quả là 1 trong cửa sổ Immediate. Tương tự như
vậy cho đến hết i = 10.

File ví dụ:
Github: Vòng lặp trong VBA / vong_lap.xlsm
họcExcel.Online
select * from [EXCEL]

42
Một số ví dụ đơn giản các bạn có thể thực hiện với vòng lặp

Ví dụ 1: Liệt kê tên các sheet trong bảng tính hiện thời và ghi ra cột A ở
sheet1 bắt đầu từ ô A4

Diễn giải:

1. Vòng lặp bắt đầu từ 1 đến số lượng sheets trong Workbook được trả
về bởi lệnh Worksheets.Count
2. Vì chúng ta bắt đầu ghi ra tên các sheets ở ô A4, tiếp đến là A5 rồi
A6, … nên chúng ta cần tìm cách tạo ra dãy số này từ giá trị i, bắt đầu
từ i = 1
3. Để làm được điều này, chúng ta đã viết Range(“A” & (3 + i))
4. Như vậy, với i = 1, chúng ta có thể tham chiếu đến ô A4, và ghi được
tên của sheets với thứ tự = 1. Tiếp tục với i = 2 ta tham chiếu đến ô A5,
và ghi được tên của sheets thứ 2, v.v

Chúng ta còn có thể thực hiện ví dụ này như sau với thuộc tính Cells
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

43
Chúng ta còn có thể sử dụng thuộc tính Offset của đối tượng Range để
thực hiện ví dụ 1

Vòng lặp For … Each


Với 1 số đối tượng trong Excel chúng ta đã biết như Range, Worksheet,
Workbook, chúng ta có thể sử dụng vòng lặp for … each như sau để giải
quyết được vấn đề nêu ra ở ví dụ 1

Diễn giải, vòng lặp for … each ở trong đoạn code trên có thể được hiểu là:
với mỗi bảng tính trong tập hợp các bảng tính thì chúng ta sẽ đi ghi tên các
bảng tính vào cột A, bắt đầu từ ô A4.

Trong các phần tiếp theo, chúng ta sẽ còn gặp lại nhiều ví dụ với các đối
tượng khác cùng với ứng dụng của kiểu vòng lặp For … each này
họcExcel.Online
select * from [EXCEL]

44
Vòng lặp với bước nhảy
Đôi khi, chúng ta cần chỉ số vòng lặp tăng lên 2, 3 đơn vị sau 1 vòng lặp chứ
không phải 1 đơn vị như trong ví dụ về vòng lặp đơn giản, hãy xét ví dụ sau
đây: In ra các số lẻ từ 1 đến nhỏ hơn 23

Với vấn đề này, chúng ta sẽ bắt đầu chỉ số lặp từ 1 rồi tiếp theo là 3, 5, 7, … ,
cho đến 23, giữa mỗi vòng lặp chúng ta cần tăng giá trị của chỉ số lặp lên 2
đơn vị, code trông sẽ như sau

Từ khoá Step sẽ thông báo cho VBA biết là chúng ta muốn tăng giá trị của
chỉ số lặp lên 2 đơn vị sau mỗi vòng lặp.

Cũng với vấn đề tương tự như trên, chúng ta có thể in các số ra cửa sổ
Immediate theo chiều ngược lại: in các số lẻ từ 23 đến 1 sử dụng bước nhảy
là -2
họcExcel.Online
select * from [EXCEL]

45
Vòng lặp lồng nhau
Giả sử chúng ta có ma trận 3x5 trong Excel được lưu trong vùng A1:E3,
chúng ta cần điền toạ độ vào mỗi ô trong vùng từ A1:E3, thì chúng ta có thể
sử dụng vòng lặp lồng nhau như sau

GIẢM NGAY 30% Khoá học


http://bit.ly/2eEOWsZ VBA CHO NGƯỜI MỚI BẮT ĐẦU
họcExcel.Online Khoá học VBA cơ bản cho người mới bắt đầu
select * from [EXCEL] Click link giảm giá 40%: http://bit.ly/2eEOWsZ

46
Thoát khỏi vòng lặp - Exit for
Vòng lặp có thể rất tốn thời gian và làm chương trình của chúng ta chậm
lại, đôi khi chúng ta muốn thoát khỏi vòng lặp khi 1 điều kiện nào đó thoả
mãn, ví dụ như sau: chúng ta muốn tìm cột đầu tiên trong 5000 cột chứa
giá trị “x” trong hàng số 1:

Vòng lặp vô tận


Trong VBA, vòng lặp vô tân sẽ không được chạy. Ví dụ như sau:

Sub vong_lap_vo_tan()

Dim i as Integer

For i = 1 to 4
i=1
Next i

End Sub

Trong đoạn code trên, giá trị i sẽ không bao giờ chạy hết đến 4, chúng ta có
1 vòng lặp vô hạn ở đây.
họcExcel.Online
select * from [EXCEL]

47
Vòng lặp Do … While … Loop
Ngoài vòng lặp For, chúng ta còn có cấu trúc lặp do … while … loop. Một ví
dụ cho trường hợp sử dụng vòng lặp kiểu này như sau:

Chương trình đoán số may mắn trong các số từ 1 tới 10, bạn được phép
đoán 3 lần, nếu đúng sẽ thông báo chúc mừng, nếu sai sẽ thông báo chúc
bạn may mắn lần sau. Đoạn code này có thể viết như sau

Diễn giải:

1. Ở vòng lặp trên, những code giữa Do … Loop While sẽ chạy ít nhất là 1
lần, nếu người dùng đoán đúng kết quả ngay ở lượt đầu tiên thì
thông báo chúc mừng sẽ được hiện ra
2. Biến count để kiểm soát số lượt đoán cho phép, trong trường hợp
này, người dùng được đoán không quá 3 lần
3. Exit Do sẽ giúp thoát khỏi vòng lặp
4. Vòng lặp sẽ thoát khi người dùng đoán đúng hoặc số lượt đoán lớn
hơn 3
họcExcel.Online
select * from [EXCEL]

48
14. Lọc dữ liệu từ 1 Sheet ra nhiều sheets
Kĩ thuật lọc dữ liệu trong chương này chỉ là 1 trong rất nhiều kĩ thuật để đạt
được mục tiêu lọc dữ liệu ra nhiều sheets. Mình giới thiệu kĩ thuật này ở đây
để các bạn mới bắt đầu với VBA có thể dễ dàng nắm bắt và áp dụng được
rồi từ đó phát triển ra và ứng dụng cho công việc của mình.

Bấm nút http://bit.ly/2eEOWsZ hoặc

SCAN MÃ
ĐỂ NHẬN NGAY COUPON

GIẢM GIÁ 40%


KHOÁ HỌC

VBA101 - VBA cơ bản cho người


mới bắt đầu
họcExcel.Online
select * from [EXCEL]

49
14. Lọc dữ liệu từ 1 Sheet ra nhiều sheets

Đến đây, chúng ta có 1 số lưu ý nếu các bạn định gõ lại Code này vào trình
soạn thảo VBA:

1. Criteria1: ký tự cuối cùng ở từ này là số 1


2. xlPasteValues: ký tự thứ 2 trong từ này là chữ l

File ví dụ:
Github: Lọc dữ liệu từ 1 Sheet ra nhiều Sheets / loc_du_lieu_01.xlsm
họcExcel.Online
select * from [EXCEL]

50
Diễn giải
Quy trình lọc dữ liệu từ 1 Sheet ra nhiều sheets có thể được diễn giải như
sau:

1. Sử dụng vòng lặp để lặp qua mỗi ô trong vùng H1:H3 chứa tên các
chi nhánh
2. Với mỗi chi nhánh chúng ta sẽ làm những việc sau đây:
3. Bật bộ lọc cho vùng dữ liệu nguồn A1:B7
4. Thiết lập các tham số cho bộ lọc: lọc theo cột đầu tiên (Field:=1), điều
kiện lọc theo tên chi nhánh (Criteria1:=ten_chi_nhanh.Value)
5. Copy kết quả lọc
6. Tạo ra Sheet mới phía sau Sheet cuối cùng
7. Đổi tên Sheet mới tạo trùng tên với tên chi nhánh đang được xử lý
8. Dán dữ liệu vào Sheet đang được xử lý

Trường hợp mở rộng


Tách 1 sheet ra nhiều sheets dựa trên 2 cột dữ liệu

Sau khi hoàn thành ví dụ phía trên, chúng ta có thể dễ dàng mở rộng ví dụ
này ra cho trường hợp tách files dựa theo nhiều hơn 1 cột, sau đây là ví dụ
tách 1 sheet ra nhiều sheets dựa trên 2 cột

File ví dụ:
Github: Lọc dữ liệu từ 1 Sheet ra nhiều Sheets / loc_du_lieu_02.xlsm

Tách 1 sheet dữ liệu ra nhiều Workbooks Excel / Files Excel

Một trường hợp hay gặp trong thực tế công việc là nhu cầu tách 1 sheet dữ
liệu ra nhiều Workbooks Excel hay Files Excel. Chỉ với 1 sự thay đổi nhỏ
trong code ta có thể giải quyết được vấn đề này.

File ví dụ:
Github: Lọc dữ liệu từ 1 Sheet ra nhiều Sheets / loc_du_lieu_03.xlsm
họcExcel.Online
select * from [EXCEL]

51
15. Tổng hợp dữ liệu nhiều sheets vào 1
sheet
Để bắt đầu với ví dụ này, đầu tiên, bạn cần phải download file kèm theo
xuống

File ví dụ:
Github: Tổng hợp dữ liệu nhiều sheets vào 1 sheet / tong_hop01.xlsm

Diễn giải
Với mỗi bảng tính trong files Excel, chúng ta sử dụng vòng lặp for each để
lặp qua tên từng bảng tính đó. Nếu tên bảng tính được xử lý khác
“Tong hop” thì chúng ta sẽ gán vùng dữ liệu tuỳ thuộc điều kiện bảng tính
đó có phải là bảng tính đầu tiên cần xử lý hay không. Nếu là bảng tính đầu
tiên cần xử lý, chúng ta sẽ copy cả tiêu đề của bảng tính đó. Nếu không
phải là bảng tính đầu tiên cần xử lý, chúng ta sẽ bỏ qua tiêu đề và chỉ copy
dữ liệu mà thôi.
họcExcel.Online
select * from [EXCEL]

52
16. Làm việc với mảng trong VBA
Mảng cũng là 1 kiểu dữ liệu trong VBA và dùng để lưu danh sách những giá
trị thuộc cùng 1 kiểu dữ liệu. Chúng ta có thể tưởng tượng ra mảng như
danh sách tên chi nhánh ngân hàng, dánh sách nhân viên, … Việc đưa dữ
liệu cần xử lý từ trên bảng tính Excel vào mảng để xử lý trong VBA sẽ giúp
tốc độ xử lý nhanh hơn và thao tác xử lý được linh hoạt hơn.

File ví dụ:
Github: Mảng trong VBA / mang_VBA_01.xlsm

Trong VBA, chúng ta có 2 kiểu mảng: mảng tĩnh và mảng động. Tổng hợp
những thao tác với mảng dữ liệu trong VBA, mời các bạn theo dõi trang
tiếp theo và ở trong file ví dụ hướng dẫn.

GIẢM NGAY 30% Khoá học


http://bit.ly/2eEOWsZ VBA CHO NGƯỜI MỚI BẮT ĐẦU
họcExcel.Online
select * from [EXCEL]

53
Mảng tĩnh Mảng động

Khai báo Dim arr(0 to 5) As Long Dim arr() As Long


Dim arr As Variant

Đặt kích thước Kích thước mảng tĩnh được đặt khi khai Redim arr(0 to 5) as Variant
báo

Thay đổi kích thước và giữ Kích thước mảng tĩnh không thể thay đổi Redim Preserve arr(0 to 6)
nguyên dữ liệu

Gán dữ dữ liệu cho phần tử arr(1) = 234 arr(1) = 234


trong mảng

Lấy dữ liệu từ phần tử trong total = arr(1) total = arr(1)


mảng

Chỉ số dưới Lbound(arr) Lbound(arr)

Chỉ số trên Ubound(arr) Ubound(arr)

Lặp mảng 1 chiều For i = Lbound(arr) to Ubound(arr) For i = Lbound (arr) to Ubound(arr)
Next i Next i

Lặp mảng 2 chiều For i = Lbound(arr,1) to Ubound(arr,1) For i = Lbound(arr,1) to Ubound(arr,1)


For j = Lbound(arr,2) to Ubound(arr,2) For j = Lbound(arr,2) to Ubound(arr,2)
Next j Next j
Next i Next i

Lặp mảng Variant Dim item as Variant Dim item as Variant


For Each item in arr For Each item in arr
Next item Next item

Function trả về mảng Function GetArray() As Long() Function GetArray() As Long()


Dim arr(0 To 5) As Long Dim arr(0 To 5) As Long
GetArray = arr GetArray = arr
End Function End Function

Xoá mảng Erase arr Erase arr

Chuỗi => Mảng Không áp dụng cho mảng tĩnh Dim arr as Variant
arr = Split(“Học-Excel-Online”,”-“)

Mảng => Chuỗi Dim sName As String Dim sName As String


sName = Join(arr, ":") sName = Join(arr, ":")

Range => Array Không áp dụng cho mảng tĩnh Dim arr As Variant
arr = Range("A1:D2")

Array => Range Dim arr As Variant Dim arr As Variant


Range("A5:D6") = arr Range("A5:D6") = arr

Gán giá trị Không áp dụng cho mảng tĩnh Dim arr As Variant
arr = Array(“Học”, “Excel”, “Online”)
họcExcel.Online
select * from [EXCEL]

54
17. Sub và Function trong Excel
Từ đầu sách tới giờ, chúng ta đã làm việc rất nhiều với Sub - hay còn gọi là
thủ tục. Sub giúp chúng ta tự động hoá được các quy trình làm việc. Ngoài
Sub, VBA còn hỗ trợ Function. Function sẽ giúp cho chúng ta phải viết ít
code lặp đi lặp lại hơn, hơn nữa Function còn có thể giúp chúng ta tự tạo ra
những hàm người dùng (UDF - User Defined Function) để sử dụng trực tiếp
được trên bảng tính.

Sub Function

Đặc điểm 1. Có thể chạy từ Button, Event, … 1. Không chạy được từ Button, Event, …
2. Không trả về giá trị 2. Có thể trả về 1 giá trị hoặc đối tượng
3. Có thể sử dụng trên bảng tính

Khởi tạo Sub ChayBaoCao() Function DongCuoi() as Long


‘… code VBA ‘… code VBA
End Sub End Function

Tạo Sub/Function với tham Sub ChayBaoCao(TenSheet as String) Function DongCuoi(TenSheet as String)
số

Gọi Sub/Function Call ChayBaoCao Call DongCuoi


Sử dụng Sub/Function ‘ hoặc ‘ hoặc
ChayBaoCao DongCuoi

Gọi Sub/Function với tham Call ChayBaoCao(“CN1”) Call DongCuoi(“CN1”)


số ‘ hoặc ‘ hoặc
ChayBaoCao “CN1” DongCuoi “CN1”

Gán giá trị trả về từ Function - LR = DongCuoi(“CN1”)


vào biến

Trả về giá trị dạng nguyên Function GetIndex as Long


thuỷ GetIndex = 234
End Function

Trả về đối tượng từ Function - Function GetSheet as Worksheet


(có thêm từ khoá Set) Set GetSheet = ActiveSheet
End Function

Thoát khỏi Sub / Function If IsError(Range("A1")) Then If IsError(Range("A1")) Then


khi điều kiện thoả mãn Exit Sub Exit Function
End If End If
họcExcel.Online
select * from [EXCEL]

55
18 .Hàm người dùng - UDF (User defined
function)
Hàm người dùng trong Excel VBA được viết như Function và có thể trả lại 1
giá trị được người dùng định nghĩa. Vì Function có thể trả lại được giá trị
vậy nên nó có thể được sử dụng trên bảng tính. Ví dụ như sau: trong 1
Module (lưu ý: trong 1 Module), bạn có Function tính diện tích sau đây

Cách dùng: dùng trực tiếp với số hoặc dùng với tham chiếu tới range

Khoá học VBA cơ bản cho người mới bắt đầu


Click link giảm giá 40%: http://bit.ly/2eEOWsZ
họcExcel.Online
select * from [EXCEL]

56
Dành riêng cho khách hàng thân thiết của Học Excel Online: Giảm giá 10%
bất kì khoá học nào trong danh sách sau đây:

Google Trang Tính, Sự Hiểu và phân tích dữ Excel từ cơ bản đến


Bổ Sung Tuyệt Vời Cho liệu, ra quyết định với chuyên gia dành cho
Excel biểu đồ Excel người đi làm

https://goo.gl/bSrKkP https://goo.gl/lYVR5d https://goo.gl/afnKjf

Tổng hợp, phân tích và Tự tạo phần mềm quản Series ứng dụng VBA
báo cáo với Pivot Table lý kho với Excel và VBA Excel vào kế toán - kế
cơ bản trong Excel toán kho

https://goo.gl/F1a0YI https://goo.gl/KUoxBb https://goo.gl/xLAAgY

Tự động hoá Excel với Lập trình VBA nâng cao Thuyết trình chuyên
lập trình VBA cho người trong Excel nghiệp với PowerPoint
mới bắt đầu
https://goo.gl/EhFj5E https://goo.gl/7QY9Tx https://goo.gl/MGyJG3
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online

https://hocexcel.online
https://hocexcel.online

https://hocexcel.online

https://hocexcel.online
https://hocexcel.online

https://hocexcel.online

https://hocexcel.online
https://hocexcel.online

https://hocexcel.online

https://hocexcel.online
https://hocexcel.online

https://hocexcel.online

https://hocexcel.online
57
https://hocexcel.online

https://hocexcel.online

https://hocexcel.online
https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://
hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online
https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://hocexcel.online https://

También podría gustarte