Menu

Tự động hóa trích xuất dữ liệu từ Access vào Excel bằng VBA - Chia sẻ kinh nghiệm

Vĩnh Trường Đăng 09/06/2026 12:16 463 lượt xem 3 trả lời

Chào mọi người trong diễn đàn Sheet & Excel,

Dạo gần đây, mình có làm việc nhiều với Microsoft Access và nhận thấy việc trích xuất dữ liệu thủ công sang Excel tốn khá nhiều thời gian, đặc biệt là khi cần cập nhật thường xuyên. Sau một thời gian mày mò, mình đã tìm ra cách tự động hóa quá trình này bằng VBA. Nhân tiện, mình muốn chia sẻ lại cho anh em nào đang gặp tình huống tương tự.

Cách này khá đơn giản, chủ yếu là sử dụng các câu lệnh SQL để truy vấn dữ liệu trực tiếp từ Access và nạp vào một bảng tính Excel đã được định sẵn.

Các bước cơ bản mình thường làm:

  • Tạo một form trong Access để người dùng có thể chọn bảng hoặc truy vấn cần xuất.
  • Viết một đoạn code VBA trong Excel để kết nối tới file Access (.accdb hoặc .mdb).
  • Sử dụng câu lệnh SELECT ... FROM ... WHERE ... để lấy dữ liệu theo điều kiện mong muốn.
  • Nạp kết quả vào một sheet cụ thể trong Excel, có thể ghi đè hoặc thêm mới tùy vào nhu cầu.

Ví dụ, để lấy tất cả dữ liệu từ bảng 'KhachHang' trong file Access 'DuLieu.accdb' và nạp vào sheet 'DSKH' của file Excel hiện tại, mình có thể dùng đoạn code tương tự như sau:

Sub ExportAccessData()    Dim cn As Object    Dim rs As Object    Dim strConn As String    Dim strSQL As String    Dim ws As Worksheet        ' Thiết lập kết nối đến file Access    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Path\To\DuLieu.accdb;"    Set cn = CreateObject("ADODB.Connection")    cn.Open strConn        ' Câu lệnh SQL để lấy dữ liệu    strSQL = "SELECT * FROM KhachHang"        ' Mở Recordset    Set rs = CreateObject("ADODB.Recordset")    rs.Open strSQL, cn, 3, 3 ' adOpenStatic, adLockOptimistic        ' Thiết lập sheet đích    Set ws = ThisWorkbook.Sheets("DSKH")    ws.Cells.ClearContents ' Xóa dữ liệu cũ    ws.Cells.CopyFromRecordset rs ' Nạp dữ liệu mới        ' Dọn dẹp    rs.Close    Set rs = Nothing    cn.Close    Set cn = Nothing        MsgBox "Đã xuất dữ liệu thành công!" End Sub

Lưu ý: Bạn cần thay đổi đường dẫn file Access và tên bảng/truy vấn cho phù hợp. Ngoài ra, cần đảm bảo bạn đã bật tham chiếu đến Microsoft ActiveX Data Objects Library trong VBA Editor (Tools -> References).

Cách này giúp mình tiết kiệm hàng giờ đồng hồ mỗi tuần. Hy vọng nó cũng hữu ích cho các bạn!

Có anh em nào có kinh nghiệm hoặc cách làm nào khác hay hơn thì chia sẻ thêm nhé!

5

Hay quá bạn ơi! Mình cũng đang vật lộn với việc trích xuất dữ liệu từ Access sang Excel đây. Công nhận là làm thủ công tốn thời gian thật. Bạn có thể chia sẻ chi tiết hơn về đoạn code VBA bạn dùng không? Đặc biệt là phần câu lệnh SQL ấy, mình hơi yếu phần này.

4

Tuyệt vời! Mình cũng từng gặp vấn đề tương tự khi làm việc với Access và Excel. Tự động hóa bằng VBA đúng là cứu cánh.

Bạn có thể chia sẻ thêm về cách bạn xử lý trường hợp có nhiều bảng (table) trong Access cần trích xuất không? Liệu có cần viết nhiều macro riêng biệt cho từng bảng hay có cách nào gom lại cho gọn không ạ?

Cảm ơn bạn đã chia sẻ kinh nghiệm hữu ích này! Việc tự động hóa trích xuất dữ liệu từ Access sang Excel thực sự giúp tiết kiệm rất nhiều thời gian và giảm thiểu sai sót so với làm thủ công.

Mình có một thắc mắc nhỏ, nếu dữ liệu nguồn trong Access có định dạng phức tạp (ví dụ: cột chứa nhiều giá trị cách nhau bằng dấu phẩy), bạn xử lý việc trích xuất này như thế nào để đưa sang Excel cho dễ phân tích ạ?

Việc tự động hóa kết nối Access và Excel bằng VBA là một kỹ năng rất đáng giá, nhất là với những ai thường xuyên phải làm báo cáo từ hai nguồn này.

Bạn có thể chia sẻ thêm về cách xử lý lỗi trong quá trình chạy macro không? Ví dụ như trường hợp file Access bị khóa hoặc đường dẫn file thay đổi thì code của bạn có cơ chế tự khắc phục hay thông báo lỗi cho người dùng không ạ?

5
Hay quá bạn ơi! Mình cũng đang vật lộn với việc trích xuất dữ liệu từ Access sang Excel đây. Công nhận là làm thủ công tốn thời gian thật. Bạn có thể chia sẻ chi tiết hơn về đoạn code VBA bạn dùng không? Đặc biệt là phần câu lệnh SQL ấy, mình hơi yếu phần này.
3

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

Đăng nhập Đăng ký