Chào các anh chị em trong diễn đàn Sheet & Excel,
Mình đang làm việc với một hệ thống dữ liệu lớn lưu trên SQL Server và thường xuyên phải trích xuất dữ liệu ra Excel để phân tích. Trước đây, mình hay làm thủ công bằng cách export ra file CSV rồi import vào Excel, hoặc dùng tính năng Get & Transform Data (Power Query).
Tuy nhiên, để tự động hóa hoàn toàn quy trình này và giảm thiểu thao tác thủ công, mình đã tìm hiểu và viết một đoạn VBA code để kết nối trực tiếp với SQL Server và tải dữ liệu vào một sheet cụ thể trong file Excel của mình. Cách này rất tiện lợi, đặc biệt khi cần cập nhật dữ liệu hàng ngày hoặc hàng tuần.
Dưới đây là một ví dụ đơn giản về cách thực hiện:
Sub GetDataFromSQLServer() Dim cn As Object Dim rs As Object Dim ws As Worksheet Dim strConn As String Dim strSQL As String ' --- Cấu hình kết nối --- strConn = "Provider=SQLOLEDB;Data Source=YourServerName;Initial Catalog=YourDatabaseName;User ID=YourUsername;Password=YourPassword;" ' Thay YourServerName, YourDatabaseName, YourUsername, YourPassword cho phù hợp ' --- SQL Query --- strSQL = "SELECT Column1, Column2, Column3 FROM YourTableName WHERE SomeCondition;" ' Thay YourTableName và điều kiện lọc ' --- Khai báo sheet đích --- Set ws = ThisWorkbook.Sheets("DataSheet") ' Thay DataSheet bằng tên sheet bạn muốn tải dữ liệu vào ' --- Xóa dữ liệu cũ (tùy chọn) --- ws.Cells.ClearContents ' --- Tạo đối tượng kết nối và Recordset --- Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") ' --- Mở kết nối --- cn.Open strConn ' --- Thực thi Query và lấy dữ liệu --- rs.Open strSQL, cn ' --- Đổ dữ liệu vào Excel --- If Not rs.EOF Then ws.Range("A1").CopyFromRecordset rs End If ' --- Dọn dẹp --- rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox "Tải dữ liệu thành công!", vbInformation End SubLưu ý:
- Bạn cần bật tham chiếu Microsoft ActiveX Data Objects x.x Library trong VBA Editor (Tools -> References).
- Thay thế các thông tin kết nối và câu lệnh SQL cho phù hợp với hệ thống của bạn.
- Đoạn code này sẽ xóa toàn bộ dữ liệu cũ trên sheet đích trước khi tải dữ liệu mới. Nếu muốn giữ lại hoặc thêm mới, bạn cần điều chỉnh lại phần này.
Mình hy vọng chia sẻ này hữu ích cho các bạn đang làm việc với dữ liệu trên SQL Server và muốn tự động hóa quy trình lấy dữ liệu vào Excel. Nếu có ai có cách làm khác hoặc gặp khó khăn, chúng ta cùng thảo luận nhé!