Menu

Chia sẻ cách tự động tải dữ liệu từ SQL Server vào Excel bằng VBA

Tào Nho Gấm 14/06/2026 07:40 521 lượt xem 1 trả lời

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 Sub

Lư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é!

5

Hay quá bạn ơi! Mình cũng đang vật lộn với việc lấy dữ liệu từ SQL Server ra Excel đây. Mình thường dùng Power Query nhưng đôi khi vẫn muốn tự động hóa hơn nữa.

Bạn có thể chia sẻ chi tiết hơn về đoạn VBA code đó không? Ví dụ như cách bạn xử lý lỗi kết nối hoặc cách bạn định nghĩa câu truy vấn SQL trong code như thế nào? Mình rất tò mò muốn học hỏi thêm!

1

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký