Professional Documents
Culture Documents
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]
- Trình bày
- Thiết kế bìa
- Viết nội dung
- Thiết kế trang
- Xuất bản
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, …
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
SCAN MÃ
ĐỂ NHẬN NGAY COUPON
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
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)
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
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.
SCAN MÃ
ĐỂ NHẬN NGAY COUPON
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.
Đó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 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
SCAN MÃ
ĐỂ NHẬN NGAY COUPON
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.
Thêm 1 Worksheet
Debug.print Worksheets.Add
↳ Thêm 1 worksheet mới
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á
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 …
SCAN MÃ
ĐỂ NHẬN NGAY COUPON
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”
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
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ợ
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
Debug.print Range(“A4”).Address
↳ Ghi ra cửa sổ Immediate địa chỉ tuyệt đối của ô A4 là $A$4
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
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
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à
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:
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.
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.
SCAN MÃ
ĐỂ NHẬN NGAY COUPON
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ợ.
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:
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
SCAN MÃ
ĐỂ NHẬN NGAY COUPON
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
* 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
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
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, …
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
SCAN MÃ
ĐỂ NHẬN NGAY COUPON
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
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
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:
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
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
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:
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.
SCAN MÃ
ĐỂ NHẬN NGAY COUPON
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:
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ý
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
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.
53
Mảng tĩnh Mảng động
Đặ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
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
Chuỗi => Mảng Không áp dụng cho mảng tĩnh Dim arr as Variant
arr = Split(“Học-Excel-Online”,”-“)
Range => Array Không áp dụng cho mảng tĩnh Dim arr As Variant
arr = Range("A1:D2")
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
Tạo Sub/Function với tham Sub ChayBaoCao(TenSheet as String) Function DongCuoi(TenSheet as String)
số
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
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:
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
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://