Viết chương trình ứng dụng thực tế" tập trung vào việc khai thác sức mạnh của VBA trong Excel kết hợp với ngôn ngữ truy vấn SQL để tự động hóa và tối ưu hóa quá trình xử lý dữ liệu. Qua đó, người học sẽ biết cách xây dựng các ứng dụng thực tế như trích xuất, lọc, tổng hợp dữ liệu từ các nguồn khác nhau một cách linh hoạt và hiệu quả.
- VBA (Visual Basic for Applications) là một ngôn ngữ lập trình được tích hợp trong các ứng dụng Microsoft Office như Excel, Word, Access và Outlook.
- VBA dùng để:
+ Tự động hóa: Lặp đi lặp lại thao tác như sao chép, định dạng, gửi email
+ Tạo báo cáo: Tổng hợp dữ liệu theo mẫu có sẵn, xuất PDF, xuất bảng
+ Tương tác dữ liệu: Lọc, tính toán, tạo biểu đồ, phân tích dữ liệu
+ Tạo Form: Thiết kế giao diện nhập liệu chuyên nghiệp
+ Gửi email: Tự động gửi báo cáo qua Outlook kèm file đính kèm
- Database là một hệ thống lưu trữ dữ liệu có tổ chức, sử dụng ngôn ngữ SQL (Structured Query Language) để truy vấn, quản lý và thao tác dữ liệu.
- SQL Database được dùng để làm gì?
+ Quản lý dữ liệu doanh nghiệp (bán hàng, kho, khách hàng,...)
+ Lưu trữ dữ liệu từ phần mềm, website, app
+ Phân tích, báo cáo dữ liệu lớn
+ Là nền tảng kết hợp với VBA, Power BI, Power Apps, v.v.
Để kết hợp SQL và VBA trong xử lý dữ liệu, bạn sử dụng SQL như ngôn ngữ truy vấn dữ liệu, còn VBA như công cụ điều khiển và tự động hóa trong Excel. Sự kết hợp này giúp bạn tự động hóa truy vấn, lọc, tính toán dữ liệu nhanh và hiệu quả, kể cả với dữ liệu lớn hoặc phức tạp.
SQL | VBA |
---|---|
Xử lý dữ liệu mạnh mẽ, nhanh | Tự động hóa, tạo giao diện người dùng |
Dễ lọc, tổng hợp, join nhiều bảng | Giao tiếp Excel và người dùng dễ dàng |
Giảm tải cho Excel khi xử lý lượng lớn dữ liệu | Tạo luồng xử lý hoàn chỉnh, thân thiện |
SQL làm gì? | VBA làm gì? |
---|---|
Truy vấn, lọc, tính tổng, nhóm dữ liệu | Tạo kết nối, gửi câu lệnh SQL, nhận kết quả |
JOIN nhiều bảng, phân tích dữ liệu | Điều khiển Excel, ghi kết quả ra sheet, tạo báo cáo |
Truy vấn dữ liệu từ Access, Excel, SQL Server, v.v. | Tự động hóa toàn bộ quy trình xử lý |
👉 Bước 1: Tạo kết nối từ VBA đến nguồn dữ liệu bằng ADO
Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
' Kết nối file Access
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DuLieu\myDB.accdb;"
' Hoặc kết nối SQL Server
' conn.Open "Provider=SQLOLEDB;Data Source=TenServer;Initial Catalog=TenCSDL;User ID=sa;Password=matkhau;"
👉 Bước 2: Viết và gửi câu lệnh SQL bằng VBA
Dim rs As Object
Dim sql As String
Set rs = CreateObject("ADODB.Recordset")
sql = "SELECT MaSP, SUM(SoLuong) AS TongSL FROM NhapKho GROUP BY MaSP"
rs.Open sql, conn
=> Bạn có thể sử dụng bất kỳ câu lệnh SQL nào như SELECT, WHERE, JOIN, GROUP BY, ORDER BY, INSERT, UPDATE, v.v.
👉 Bước 3: Đưa dữ liệu từ SQL vào Excel
Sheets("Báo cáo").Range("A2").CopyFromRecordset rs
=> Kết quả từ SQL sẽ được đổ trực tiếp vào vùng ô Excel.
👉 Bước 4: Tự động hóa tiếp bằng VBA
- Format bảng
- Gửi email báo cáo
- Xuất PDF
- Tạo biểu đồ từ dữ liệu đã truy vấn
Sub TruyVanDuLieu()
Dim conn As Object
Dim rs As Object
Dim sql As String
Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
' Kết nối Access
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\Kho.accdb;"
' Câu lệnh SQL: tổng số lượng nhập theo sản phẩm
sql = "SELECT MaSP, SUM(SoLuong) AS TongNhap FROM NhapKho GROUP BY MaSP"
' Mở recordset
rs.Open sql, conn
' Đổ dữ liệu ra Excel
With Sheets("BaoCao")
.Range("A1:B1").Value = Array("Mã SP", "Tổng Nhập")
.Range("A2").CopyFromRecordset rs
End With
' Đóng kết nối
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
MsgBox "Đã truy vấn và xuất dữ liệu!", vbInformation
End Sub
👉 Bạn có thể dùng SQL + VBA cho các kịch bản:
- Xuất báo cáo tự động từ Access mỗi tuần
- Tổng hợp dữ liệu từ nhiều file Excel
- Truy vấn và gửi mail báo cáo kết quả
- Tạo nút "Lấy dữ liệu mới nhất" trong Excel
👉 Những lưu ý quan trọng
- Thư viện ADO: Không bắt buộc khai báo, nhưng có thể vào VBA > Tools > References > chọn "Microsoft ActiveX Data Objects x.x Library" để có IntelliSense
- Câu lệnh SQL: Nên kiểm tra trước trong Access/SQL để chắc cú pháp đúng
- Bảo mật: Tránh hard-code mật khẩu trong VBA nếu kết nối SQL Server
- Nguồn dữ liệu Excel: VBA + SQL có thể truy vấn dữ liệu Excel luôn bằng ADO!