Xin chào các bạn! Mình đã suy nghĩ từ lâu, chắc khoảng vài năm gì đó, mình sẽ viết lại một bài để hình dung ra VBA là gì. Mình muốn có một định nghĩa gần gũi hơn, mang tính áp dụng hơn để các bạn có thể không phải suy nghĩ tới việc VBA là một ngôn ngữ lập trình bởi vì chắc chắn VBA là một ngôn ngữ lập trình rồi, xong thì sao nữa? Trong bài viết này, mình sẽ chia sẻ với các bạn một cách khai quát ngắn gọn về VBA có thể dùng làm gì, chúng ta có thể áp dụng VBA trong trường hợp nào. Tất nhiên, bài viết này không phải là một bách khoa toàn thư, hay là trang documentation (hướng dẫn sử dụng) VBA của Microsoft, vậy nên chắc chắn sẽ thú vị và dễ hiểu hơn nhiều. Hãy cùng nhau bắt đầu.
Xem nhanh
Có lẽ, đối với những bạn chưa hình dung được rõ ràng VBA là gì, thì câu hỏi VBA là gì sẽ là một câu hỏi luôn thường trực với bạn khi sử dụng Excel, bởi vì bạn có thể nghe tới từ này ở đâu đó rồi, thậm chí đã nhìn thấy những ứng dụng của VBA rồi, nhưng vẫn chưa hình dung ra cụ thể VBA là gì và có thể làm gì cho bạn. Thanh muốn nói với bạn là, VBA là một ngôn ngữ, với ngôn ngữ này, bạn có thể “giao tiếp” với Excel và không chỉ Excel mà còn rất nhiều phần mềm ứng dụng khác. Việc giao tiếp này không dừng lại ở việc thiết lập một vài công thức, copy một vài hàng dữ liệu, tô màu vài ô, vẽ ra vài biểu đồ mà còn nhiều hơn thế nữa. Chúng ta sẽ chỉ tạm thời định nghĩa VBA đơn giản như vậy thôi, để các bạn có thể tiếp tục khám phá trong những đoạn tiếp theo.
Có lẽ đó là những câu rất quen thuộc các bạn đã nghe thấy trong nhiều trường hợp khi giải quyết các công việc lặp đi lặp lại. Khi chúng ta không ngồi trên ghế nhà trường nữa thì một thứ đúng hay sai sẽ không dễ dàng để phân định, chúng ta chưa thể nhảy tới kết luận ngay lập tức khi chưa xem xét kỹ một vấn đề. Vậy “ghi macro là xong” có đúng không? Câu trả lời ở đây là còn tùy, khi chưa tìm hiểu kỹ về vấn đề bạn đang gặp phải thì mình cũng không có câu trả lời chắc chắn được là có xong hay không hay sẽ nảy sinh ra vấn đề mới. Vậy VBA và Macro thì khác gì nhau. Sự khác nhau lớn nhất bạn có thể nhận ra được là, nếu bạn muốn viết code VBA, thì bạn cần tự viết; nếu bạn muốn tạo ra một Macro, thì công cụ ghi Macro – Macro Recorder sẽ giúp bạn làm điều này. Có rất nhiều việc Macro sẽ không thể ghi lại được cho bạn, ví dụ như logic nếu thì, vòng lặp, … và nhiều thao tác điều khiển không giới hạn trong Excel (Bởi vì ngoài việc dùng VBA để “nói chuyện” với Excel, thì bạn còn có thể dùng VBA để “nói chuyện” với rất nhiều chương trình ứng dụng và phần mềm khác nữa). Và nếu Macro có thể ghi lại hoàn hảo những logic trong công việc của bạn, thì có lẽ mình sẽ không cần phải tạo ra những khóa học VBA nữa. Không phải như vậy, bởi vì khả năng trợ giúp cho công việc của VBA vượt xa một chức năng ghi Macros.
Ngoài những việc mà VBA có thể làm mà các bạn đã nghe hoặc thấy rất nhiều khi được quảng cáo, trong bài này, mình không muốn nói tới những chức năng như vậy, bởi vì, quảng cáo – chỉ là quảng cáo, còn thực tế như thế nào, thì chúng ta sẽ cùng nhau theo dõi trong phần này.
Năm 2011, lần đầu tiên mình thực sự sử dụng VBA trong công việc là dùng để làm sạch lại một bảng dữ liệu với nhiều công thức và logic phức tạp để có dữ liệu chuyển đổi từ hệ thống cũ sang hệ thống mới. Với những logic được viết vào trong bảng tính như vậy thì bảng tính trở nên chậm chạp và nặng nề khi xử lý. Trong trường hợp cụ thể cho khách hàng là một ngân hàng tại Đức này thì việc sử dụng VBA là hợp lý, bởi vì có những yếu tố sau đây mình đã cân nhắc:
Với 3 thông tin trên, mình đã xử lý vấn đề này bằng cách sử dụng VBA trong Excel 2003 (Vì đây là công cụ duy nhất khách hàng có trên máy tính). Khi vào tư vấn trong ngân hàng này, mình phải để điện thoại ở ngoài, máy tính laptop ở ngoài, thiết bị điện tử, truyền tin, lưu trữ, USB … cũng ở ngoài luôn; ngân hàng cung cấp máy tính riêng có sẵn dữ liệu cần xử lý và chỉ sử dụng được duy nhất Excel 2003 trên đó, máy tính này không có kết nối mạng Internet hay bất cứ kết nối nào khác ở tài khoản làm việc được phân cho mình.
Trong các trường hợp khác, khi xử lý dữ liệu và công thức nặng nề trong bảng tính, chúng ta nên cân nhắc, không phải muốn dùng VBA là sẽ dùng luôn VBA được, bởi vì: nếu công thức đã chạy ổn định trong 1 thời gian dài như vậy rồi, thì cần có 1 lý do rất đặc biệt để thay đổi và sử dụng VBA. Như các bạn thấy, ở đây, lý do cho sự thay đổi là chuyển hệ thống cũ sang hệ thống mới và yêu cầu về định dạng dữ liệu không thể thực hiện dễ dàng bởi công thức Excel.
Tại thời điểm đó, tất nhiên là mình không thể nhớ được hết các câu lệnh VBA, và đến bây giờ cũng vẫn vậy, sử dụng được VBA không có nghĩa là bạn phải nhớ tất cả các câu lệnh. Ban ngày làm việc, mình phải ghi lại những vấn đề cần tra cứu ra giấy, sau giờ làm việc, có kết nối Internet và được sử dụng laptop cá nhân, mình mới tra cứu lại các vấn đề này và viết lại ra giấy. Tất nhiên các ghi chú này cũng được kiểm soát khi vào / ra khỏi ngân hàng.
Như vậy, ở dự án này, tổng kết lại: các bạn có thể sử dụng VBA để thay thế công thức trong bảng tính Excel trong một số trường hợp. Trường hợp cụ thể như thế nào thì chúng ta cần cân nhắc kỹ về các thông tin thêm cho dự án.
Để có đủ kiến thức làm dự án này, bạn cần nắm vững kiến thức trong khóa học Excel và khóa học VBA cơ bản
Năm 2012, khách hàng lại là một ngân hàng, đang cần tổng hợp số liệu từ nhiều nguồn khác nhau, nhiều định dạng khác nhau để có thể điền số liệu vào báo cáo gửi cho ngân hàng trung ương Châu Âu tại Frankfurt.
Về điều kiện làm việc so với dự án mình đã chia sẻ ở trên cũng không khác gì nhau nhiều bởi vì khách hàng cùng hoạt động trong ngành ngân hàng. Tuy nhiên, lần này, ngoài việc sử dụng Excel 2003 mình còn được sử dụng thêm cả Access 2003 để xử lý dữ liệu nữa. Vậy thôi, chỉ Excel và Access, không thêm bất cứ một công cụ nào. Ở dự án này, mình may mắn khi khách hàng sắp xếp sẵn để có thể sử dụng Access, bởi vì số liệu nhiều, mà giới hạn số dòng trên một bảng tính của Excel 2003 là khoảng hơn 65000 dòng một chút.
Dữ liệu mà ngân hàng đưa về từ hệ thống nội để xử lý ở 3 dạng là XLS, CSV và TSV. Với những file XLS thì mình đã xử lý bằng Excel kết hợp với VBA như bình thường, các thao tác cần xử lý cũng không quá phức tạp, chỉ ở mức tính toán dựa trên các công thức đã được đưa ra bởi khách hàng và điền vào các cột tương ứng, với sự giúp đỡ của VBA thì điều này không khó. Trong dự án này, mình gặp phải vấn đề nhiều hơn khi xử lý những file CSV hay TSV. Vì số lượng dữ liệu trong mỗi file khá lớn, từ 100.000 tới 600.000 dòng, vậy nên việc xử lý lượng dữ liệu này trong Excel là không thể vì giới hạn số dòng đã nêu ở trên. Việc xử lý lượng dữ liệu này cần được làm trong Access.
Khi xử lý dữ liệu trong Access, một lỗi mình ước mình đã biết sớm hơn đó là giới hạn 2GB của một cơ sở dữ liệu Access. Ở thời điểm đó, khi dữ liệu được đọc vào một file cơ sở dữ liệu trong Access và làm cho dung lượng của file Access này quá 2GB là database của bạn sẽ bị hỏng, không mở lại được và cũng không thao tác được gì nữa.
Một lần nữa, để giải quyết vấn đề này, VBA đã giúp mình trong việc điều khiển Excel để đọc những file XLS, sau đó VBA cũng điều khiển luôn Access để xử lý những file nặng hơn ở định dạng CSV và TSV. Tất nhiên khi làm việc với Access từ VBA, thì chúng ta sẽ gửi các câu lệnh SQL từ trong VBA tới Access để thực thi công việc này. Trong khóa VBA201 của mình có 1 chương gồm 40 bài học nói về việc sử dụng SQL trong VBA như thế nào.
Tổng kết lại dự án này, VBA không những giúp bạn xử lý được dữ liệu bên trong Excel mà còn giúp bạn có thể điều khiển được Access, tận dụng sức mạnh của ngôn ngữ SQL để có thể xử lý dữ liệu.
Tại thời điểm hiện tại, để giải quyết vấn đề này và được khách hàng cho phép, mình sẽ không sử dụng VBA và Access nếu được, bởi vì việc tổng hợp dữ liệu này đã được giải quyết rất tốt bằng Power Query trong Excel.
Năm 2013, khi làm việc cho KPMG tại Frankfurt, Đức, sếp giao cho mình nhiệm vụ chuẩn bị Slide Power Point về profile của khách hàng, chỉ có cỡ khoảng 200 khách hàng thôi. Lúc đó là 5 giờ chiều. Chắc hẳn các bạn không lạ với việc nhân viên ở các công ty kiểm toán có thời gian làm việc dài và rất dài. Mình nghĩ là còn tùy. Ban đầu mình nghĩ, với 200 slides này, nếu mỗi slide phải căn chỉnh bằng tay, rồi phải copy qua lại dữ liệu giữa Excel và Power Point thì sẽ tốn thời gian kha khá. Bởi vì mặc dù mỗi khách hàng chỉ cần chuẩn bị 1 slide dạng One-Pager thôi, nhưng có tới 30 cột dữ liệu phải điền từ file Excel sang Power Point. Lúc đó mình chỉ nghĩ, giá như mình có 10 em thực tập sinh, thì công việc của mình sẽ dễ thở hơn nhiều. Nhưng không, chính mình lúc đó cũng đang là thực tập sinh mà?
Với sức ép và deadline như vậy, mình quyết định sử dụng VBA để lấy dữ liệu từ Excel và điền sang file Power Point. Với những kinh nghiệm đã có ở các dự án trước làm việc với VBA, mình viết xong đoạn code này trong vòng 1 tiếng 30 phút. Đoạn code hay công cụ này, chạy trên chiếc máy tính công ty phát cho (Thinkpad T410) mất khoảng 10 phút để tạo ra 200 slides. Hôm đó, 19:30 mình về tới nhà nhờ có VBA.
Sau khi trình bày cho sếp làm sao mình có thể hoàn thành được 200 slides trong vòng 2 tiếng như vậy, thì từ việc này lại “đẻ” thêm ra việc khác cho mình: viết thêm một công cụ tạo ra CV cho Consultant. Trong công việc tư vấn của các chuyên gia tại KPMG Đức thời điểm đó, thì việc tùy chỉnh CV cho phù hợp với mỗi yêu cầu của khách hàng là chuyện bình thường. Nếu công việc này có thể được thực hiện nhanh hơn, tốt hơn, chính xác hơn thì sẽ rất tuyệt vời. Với ý tưởng này, mình đã viết ra một công cụ “CV – Generator” để các đồng nghiệp có thể rất nhanh chóng chỉnh sửa CV của mình phù hợp với các khách hàng ở nhiều ngành khác nhau. Công cụ sẽ cho phép lựa chọn tạo ra CV ở định dạng Word hoặc Power Point và tất nhiên là có lựa chọn để lưu CV thành file PDFs, bởi vì không bao giờ chúng ta gửi CV ra ngoài ở định dạng có thể chỉnh sửa được dễ dàng :).
Các bạn nghe ý tưởng này có quen không? Chắc chắn là có, bởi vì hiện tại có rất nhiều dịch vụ Online cho phép tạo ra CV như vậy, và sau khi đọc xong bài viết này, bạn còn biết là, chúng ta có thể làm điều đó ngay trong bộ Office với sự trợ giúp của VBA.
Phải nói rằng trong quá trình đi tư vấn cho các doanh nghiệp tại Đức và tại Ý, một trong những kiểu tự động hóa mà luôn làm cho khách hàng cảm thấy thú vị đó là những chương trình tự động hóa với Outlook, bởi vì những chương trình này cho họ sự hi vọng và bớt áp lực khi những email tự động được gửi đến và họ phải mất thời gian giải quyết rất mệt mỏi và chán nản với những thao tác lặp đi lặp lại. Mình có một ví dụ cho các bạn về việc tự động hóa Outlook này, hãy click vào nút bên dưới để theo dõi video nhé.
Năm 2014, tại văn phòng KPMG Frankfurt, tầng 10, tòa nhà The Squaire. “Tiếng lành đồn xa – thêm việc cho mình”. Nói một cách tích cực thì tại thời điểm này trong khu vực “Open-space” dành cho thực tập sinh và nhân viên mới, ai cũng biết tới mình và hỏi mình về các vấn đề liên quan đến Excel, Power Point. Cái gì phải đến cũng sẽ đến, có luôn một anh senior đến hỏi luôn về … trình duyệt Web Internet Explorer.
Mình nghĩ rằng đây lại là một cơ hội học tập của mình, mặc dù vào thời điểm đó mình chưa biết gì nhiều về các công nghệ Web và các một trang Web vận hành, vì tới thời điểm này, mình vẫn chỉ upload những videos hướng dẫn Excel và Video lên kênh YouTube của mình thôi.
Vấn đề của đồng nghiệp này gặp phải là, anh ấy có 1000 trang cần nhặt ra các thông tin cụ thể và cho vào trong Excel đúng định dạng. Khi nghe thấy vấn đề này, việc 1000 trang hay 10000 trang không phải vấn đề mình quá quan tâm đến, mình chỉ quan tâm đến là liệu lúc đó kiến thức về Web của mình có đủ để xử lý và giải quyết vấn đề này không, bởi vì một khi bạn đã tự động hóa các thao tác sử dụng VBA, thì thời gian trong lúc VBA làm việc, bạn có thể đi làm việc khác, sẽ mang lại năng suất cao hơn rất nhiều. Mình nhận lời và bắt đầu nghiên cứu. Vào thời điểm đó, trình duyệt Google Chrome đã rất phổ biến, và mình chỉ thường xuyên dùng trình duyệt này, và hầu như không dùng Internet Explorer bao giờ. Nhưng trang Web này chỉ chạy trên IE, đó là vấn đề mình phải quay lại với IE. Sau một buổi chiều ngồi tham khảo và viết code, mình đã hoàn thành được bảng dữ liệu trong Excel với 1000 dòng thông tin cần trích xuất. Và khỏi nói sau đó mình có bao nhiêu “học viên – đồng nghiệp” tới hỏi và xin hướng giải quyết vấn đề.
Kiến thức về tự động hóa Internet Explorer mình có trình bày 1 phần nhỏ tại khóa học VBA201 – VBA nâng cao . Tuy nhiên, với sự phát triển của các trình duyệt mới tại thời điểm hiện tại thì IE không được dùng nhiều nữa, nhu cầu sử dụng VBA để điều khiển các thao tác trên trình duyệt không giới hạn ở việc điều khiển trình duyệt IE, mà còn điều khiển Chrome, Firfox … vậy nên các kiến thức này, mình đã đóng gói lại trong khóa học VBA301 – tự động hóa trình duyệt Web với VBA
Một nhánh nữa của việc “tự động hóa Web” đó là trích xuất được dữ liệu trên Web, việc này yêu cầu chúng ta cần có kiến thức về cách trang Web load dữ liệu về. Trong một số trường hợp, ví dụ như những trang Web thông tin giá chứng khoán, việc lấy dữ liệu về Excel có thể được thực hiện sử dụng những kiến thức trong khóa học Power Query
Năm 2015, một khách hàng trong ngành bán lẻ rất lớn ở Đức có rất nhiều quy trình làm việc với phần mềm ERP tên là SAP cần phải cái tiến và tự động hóa nhiều hơn để giảm thiểu thời gian dành cho những quy trình này, nâng cao độ trình xác và nhân sự đang phải dành thời gian làm những việc lặp đi lặp lại này sẽ có thêm công việc thú vị hơn để làm. Từ thời điểm năm 2012 là lần đầu tiên mình tiếp cận với phần mềm SAP tại KPMG thì mình đã biết đến khả năng SAP có thể được điều khiển từ VBA, vậy nên dự án này đối với mình không phải là một dự án khó về mặt kỹ thuật. Cái khó của dự án này là ở chỗ đi làm việc với nhiều nhân viên ở công ty khách hàng và thu thập được thông tin về việc họ tương tác như thế nào với phần mềm SAP, bởi vì có những quy trình trong SAP, được duyệt qua 4-5 người. Để tự động hóa được hoàn toàn các quy trình này, thì đầu tiên chúng ta phải hiểu các quy trình đó. Chưa nói đến tình thế tiến thoái lưỡng nan: cải tiến quy trình rồi tự động hóa, hay là tự động hóa luôn quy trình sẵn có. Vì nhiều lý do khác nhau trong dự án này, khách hàng quyết định tự động hóa luôn quy trình sẵn có.
Tổng kết lại, để thực hiện được dự án này, bạn cần có kiến thức trong khóa học tự động hóa phần mềm SAP với VBA
Với đặc tính dễ sử dụng, dễ phát triển của mình, VBA còn có thể được sử dụng trong việc phát triển công cụ và phần mềm. Trong những khách hàng mình đi tư vấn, thì gần đây, có một khách hàng trong ngành Automobile – Aerospace có một công cụ báo giá cho động cơ của họ được viết ra từ những năm 2000 và tiếp tục sử dụng tới bây giờ và vẫn tiếp tục được sử dụng. Phần mềm này vẫn luôn được sử dụng và là cầu nối giữa các phần mềm khác trong doanh nghiệp – đặc biệt khi nhu cầu của doanh nghiệp quá đặc biệt mà các phần mềm sẵn có chưa đáp ứng được và công sức để viết lại phần mềm này quá lớn.
Chúc mừng các bạn đã đọc đến đây, vì đến đây bạn cũng đã có được hình dung cụ thể hơn và cũng yên tâm hơn khi quyết định sử dụng VBA rồi. Bởi vì, những gì mình kể ra ở đây mới chỉ là một phần rất nhỏ những điều mà VBA có thể giúp cho các bạn trong công việc. Nếu các bạn đã sẵn sàng trong hành trình này, hãy tham khảo các khóa học VBA của Thanh.