VBA: Lập trình trong excel

Posted by
Debugging in Excel VBA - Easy Excel Macros

1.Chuyện ngoài lề

Thật ra mình “được” tiếp cận VBA từ rất lâu rồi, đó là công việc đầu tiên mình làm, khởi đầu cho một hành trình khập khiểng, lênh đênh, mông lung mang tên Lập trình viên =)).

Ngày đó sếp đưa cho mình file excel và bảo dùng cái Macro này lấy thông tin kia. Đấy, thế là cứ làm theo thôi chứ có biết cái quần què gì đâu, rồi thì cũng làm đúng theo các bước và cũng lấy ra được thông tin đúng yêu cầu. Lúc đó cũng coi là hoàn thành được công việc nên cũng chẳng buồn nghĩ xem Macro nó là cái gì, tại sao nó lấy được thông tin như vậy, gặp lỗi thì tự xử lý ra sao chứ không phải lúc nào cũng Anh ới, Anh ơi.

Nghĩ sao nó đần ghê.

Một số thủ thuật Excel

 

Cũng vừa viết bài trên tuần trước nên cũng chia sẻ tiếp phần này. Let’s go.

2. VBA là gì. Tại sao cần dùng đến nó.

VBA là viết tắt của Visual Basic Application, là ứng dụng lập trình cơ bản trong Microsoft Office. 

Thế tại sao phải dùng nó. Ờ, tại sao nhỉ. Với cá nhân mình cũng chẳng mấy khi dùng đến mức này vì với nhu cầu hiện tại thì sử dụng nhuần nhuyễn những thao tác, chiêu trò trong Excel thì cũng thấy ghê ghê lắm rồi.

Nhưng, có một điều chắc chắn rằng có một số cái mà VBA sẽ làm được còn Excel thì không, nhất là mấy cái vụ liên quan đến báo cáo như tính toán công thức, gộp các file, làm đi làm lại một số thao tác nhất định, …; thế là phải học rồi. Biết đâu thời kỳ Kế toán lên ngôi, lập trình viên tụt dốc không phanh sắp tới, lúc đó cũng nên có chút trang bị tránh sốc, tránh đói.

Tóm lại thì vẫn là Có học, có hơn. 😀

3. VBA, nên biết những gì đầu tiên

Thì nói đúng ra thì để học một cái gì đó thì không phải một hai buổi, cũng không phải một hai bài viết mà ra ngô ra khoai ngay được. Người ta học Laravel, học React mất mấy năm trời, thì cái này nó đơn giản mấy đi nữa cũng mất tuần là ít, vậy nên trong khuân khổ bài viết này thì chúng ta cùng xem những cái gì là nên biết, nên học trước. Còn cái gì nâng cao lên nữa thì ta lên mạng, lên youtube; trên đó đầy ra tha hồ mà vọc vạch.

a. Cửa sổ lập trình

Đơn giản nhất là Alt F11, lúc đó sẽ có một cửa sổ bật lên. Hoặc nếu muốn mở qua DEVELOPER > Visual Basic thì trước hết phải bật DEVELOPER lên. Chuột phải vào thanh công cụ vào Customize the Ribbon rồi tích vào Developer thôi.

b. Một số khái niệm quan trọng.

+ Sub và End Sub là khởi đầu và kết thúc một chương trình.

+ FirstFunction() là tên chương trình, đặt gì cũng được, có nghĩa và đúng chức năng.

+ Cells(1, 1) là cái ô trong excel với thứ tự dọc trước ngang sau. Ví dụ Cells(2, 3) sẽ tương ứng với C2

+ Sheets(“Sheet3”) hoặc Sheets(2): Là sheets trong excel, có thể lấy theo tên sheets hoặc thứ tự của sheets đó.

+ Workbooks(2) hoặc Workbooks(“Book2”): Là Workbooks, sẽ dùng khi có nhiều Workbooks được làm việc. Cũng có thể lấy theo tên hoặc thứ tự của workbooks.

+ Dùng _ khi câu lệnh dài mà muốn xuống dòng.

+ Dùng ‘ để comment.

+ Ctrl G để bật Immediate, dùng để test, check từng câu lệnh chẳng hạn, nó dùng như Terminal.

+ Range là một vùng dữ liệu (một hoặc nhiều Cells).

Có thể dùng range(“A1”); range(“B2:D4”); range(Cells(5, 5), Cells(8, 8))

+ Chuột phải > Insert > Modules. Để tạo các Modules viết code cho tường minh.

c. IF và 3 vòng lặp

IF: Ở ví dụ trên thì cũng ko có gì khó hiểu mà giải thích, chỉ lưu ý rằng phải có End If để nó biết kết thúc vòng check.

Vòng For: Ở vòng lặp For trên thì biến số i chạy từ 1 đến 10, sau đó nó gắn các giá trị 1 đến 10 tương ứng vào Cells(1,1) đến Cells(10,1).

Cấu trúc sẽ là ForTo Next

Vòng While: Ở vòng lặp While trên thì cho i chạy từ 2 cho đến khi gặp ô có giá trị rỗng thì dừng chương trình lại.

Cấu trúc sẽ là WhileWend

Vòng For Each: ở chương trình trên thì sẽ check để i chạy trong vùng dữ liệu Cells(1, 2).CurrentRegion rồi tính tổng lại hết.

Chỉ cần chọn bất kì Cells nào trong vùng cần chọn (Cells(1, 2) hoặc bất kỳ) rồi Cells(1, 2).CurrentRegion sẽ ra được vùng dữ liệu.

Cấu trúc: For EachNext

d. Record Marco

Phần này khá hay. Hiểu đơn giản là thay vì mình code trực tiếp Excel sẽ ghi lại những thao tác của mình và chuyển đổi nó thành code. Và thế mình cứ dùng thôi.

Về cơ bản có mấy bước.
+ Vào Developer > Record Macro. Sau đó đặt tên Macro đó. Nó sẽ sinh ra một chương trình tương ứng.

+ Sau đó mình thực hiện các thao tác, code sẽ sinh ra tương ứng với thao tác

+ Sau khi hoàn thành mình bấm Stop Recording.

+ Mình có tạo một Button, kích chuột phải chọn Assign Macro, rồi chọn Macro tương ứng, lần sau cứ bấm vào button đó nó sẽ thực hiện Marco đã chọn.

Ở phía trên mình lấy một ví dụ đơn giản, các bạn có thể thực hiện các thao tác phức tạp hơn.

Điểm lợi của phần này là mình có thể thực hiện các thao tác mà không cần nhớ code. Mà đôi khi với những phần mình ko biết ở bên code nó viết như thế nào (ví dụ bôi màu chẳng hạn) thì có thể dùng cái này để check.

4. Một số ví dụ

Phần này cũng khó để viết thành bài. Mình xin gửi một link để mọi người thực hành

5. Tổng quan lại

Đấy, nhìn chung cũng không quá khó nhỉ. Đến mấy ngôn ngữ lập trình còn nhai được huống hồ gì cái này.

Cơ mà phần này không chỉ mấy ông lập trình đâu, mấy chị mấy em kế toán xơi cái này ngon lành.

Quan trọng nhất là ý tưởng, hay là cái hướng để giải quyết bài toán gì của Excel thôi nhỉ.

Xin chào và quyết thắng!

Leave a Reply

Your email address will not be published. Required fields are marked *