Menu

Tự động cập nhật dữ liệu Excel từ Google Sheets không cần Power Query - Chia sẻ cách làm

Quản Kiên Hồng 11/06/2026 13:26 575 lượt xem 1 trả lời

Chào mọi người,

Dạo này mình đang phải làm việc với nhiều nguồn dữ liệu khác nhau, trong đó có cả Google Sheets. Mình muốn tìm cách để dữ liệu trong file Excel của mình luôn được cập nhật tự động từ Google Sheets mà không cần phải ngồi tải về hay dùng Power Query (vì đôi khi Power Query hơi chậm hoặc phức tạp với một số người dùng quen thuộc với VBA).

Sau một thời gian tìm tòi, mình đã tìm ra một giải pháp khá hay bằng VBA. Về cơ bản, nó sẽ lấy dữ liệu từ một URL được chia sẻ của Google Sheet và đưa vào file Excel của mình.

Cách thực hiện:

  • Đầu tiên, bạn cần chia sẻ Google Sheet của mình ở chế độ Bất kỳ ai có đường liên kết đều có thể xem.
  • Sau đó, bạn tạo một URL để xuất dữ liệu dưới dạng CSV hoặc TSV. Ví dụ, nếu URL Google Sheet của bạn là: https://docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz0123456789_ABCDEFG/edit#gid=0, thì URL để lấy dữ liệu dạng CSV sẽ là: https://docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz0123456789_ABCDEFG/export?format=csv&gid=0
  • Tiếp theo, bạn sử dụng VBA để tải dữ liệu từ URL này vào một Sheet trong Excel. Dưới đây là một đoạn code ví dụ bạn có thể tham khảo:
Sub ImportFromGoogleSheetsCSV()
    Dim wsDest As Worksheet
    Dim url As String
    Dim xmlHttp As Object
    Dim data As String

    ' Thay thế bằng URL xuất CSV của bạn
    url = "https://docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz0123456789_ABCDEFG/export?format=csv&gid=0"

    Set wsDest = ThisWorkbook.Sheets("Sheet1") ' Thay "Sheet1" bằng tên sheet bạn muốn nhập dữ liệu vào

    On Error Resume Next
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    xmlHttp.Open "GET", url, False
    xmlHttp.Send

    If xmlHttp.Status = 200 Then
        data = xmlHttp.responseText
        
        ' Xóa dữ liệu cũ trong sheet đích
        wsDest.Cells.ClearContents
        
        ' Chuyển đổi dữ liệu CSV thành mảng và ghi vào Excel
        Dim arrData As Variant
        arrData = Split(data, vbCrLf) ' Tách theo dòng
        
        Dim i As Long
        For i = LBound(arrData) To UBound(arrData)
            Dim arrRow As Variant
            arrRow = Split(arrData(i), ",") ' Tách theo dấu phẩy (hoặc ký tự phân tách khác nếu có)
            wsDest.Cells(i + 1, 1).Resize(1, UBound(arrRow) + 1).Value = arrRow
        Next i
        
        MsgBox "Đã cập nhật dữ liệu từ Google Sheets thành công!", vbInformation
    Else
        MsgBox "Không thể tải dữ liệu. Lỗi: " & xmlHttp.Status & " - " & xmlHttp.StatusText, vbCritical
    End If
    On Error GoTo 0
    Set xmlHttp = Nothing
End Sub

Lưu ý:

  • Đoạn code trên giả định dữ liệu được phân tách bằng dấu phẩy. Nếu Google Sheet của bạn dùng dấu chấm phẩy hoặc ký tự khác, bạn cần chỉnh sửa dòng arrRow = Split(arrData(i), ",") cho phù hợp.
  • Bạn có thể đặt đoạn code này vào một Module và gọi nó bằng nút bấm hoặc sự kiện nào đó để tự động hóa quy trình.

Hy vọng chia sẻ này hữu ích với mọi người!

5

Hay quá bạn ơi! Mình cũng đang đau đầu vụ này, ngại dùng Power Query với lại muốn file Excel nhẹ nhàng hơn.

Bạn chia sẻ chi tiết hơn về đoạn code VBA đó được không? Cụ thể là làm sao để lấy được dữ liệu từ URL được chia sẻ của Google Sheet vậy ạ? Mình tò mò lắm!

Cảm ơn bạn đã chia sẻ một giải pháp hữu ích nhé!

0

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

Đăng nhập Đăng ký