Menu

Tự động hóa tạo biểu đồ tương tác với dữ liệu thay đổi hàng ngày bằng VBA

Á Vũ Phong 05/06/2026 13:25 457 lượt xem 1 trả lời

Chào các anh em trong diễn đàn,

Mình mới tìm hiểu sâu hơn về VBA và có một tình huống khá hay muốn chia sẻ và cũng muốn học hỏi thêm từ mọi người. Công việc của mình thỉnh thoảng phải cập nhật báo cáo với biểu đồ dựa trên dữ liệu thay đổi liên tục, mà cứ mỗi lần dữ liệu thay đổi là phải ngồi vẽ lại biểu đồ mệt lắm.

Sau một thời gian mày mò, mình đã viết được một đoạn code VBA nhỏ để tự động hóa việc này. Ý tưởng là mình sẽ định nghĩa sẵn một vùng dữ liệu nguồn, và khi dữ liệu trong vùng đó thay đổi (ví dụ: thêm dòng mới, sửa dữ liệu), code sẽ tự động cập nhật biểu đồ tương ứng. Nó giúp mình tiết kiệm kha khá thời gian mỗi khi cần báo cáo nhanh.

Cụ thể, mình dùng các hàm như ChartObjects, SetSourceData và một chút logic để kiểm tra xem vùng dữ liệu nguồn có thay đổi gì không. Nếu có, nó sẽ cập nhật lại SourceData của biểu đồ.

Đây là đoạn code cơ bản mình đang dùng:

Sub UpdateChart()
    Dim wsData As Worksheet
    Dim wsChart As Worksheet
    Dim chtObj As ChartObject
    Dim dataRange As Range

    Set wsData = ThisWorkbook.Sheets("Sheet1") ' Sheet chứa dữ liệu
    Set wsChart = ThisWorkbook.Sheets("Sheet2") ' Sheet chứa biểu đồ

    ' Xác định vùng dữ liệu nguồn (ví dụ: từ A1 đến B10, có thể điều chỉnh cho động hơn)
    Set dataRange = wsData.Range("A1:B10")

    On Error Resume Next
    Set chtObj = wsChart.ChartObjects("MyChart") ' Tên của biểu đồ bạn đặt trong Excel
    On Error GoTo 0

    If Not chtObj Is Nothing Then
        chtObj.Chart.SetSourceData Source:=dataRange
        MsgBox "Biểu đồ đã được cập nhật!"
    Else
        MsgBox "Không tìm thấy biểu đồ có tên 'MyChart'. Vui lòng kiểm tra lại tên biểu đồ."
    End If

    Set wsData = Nothing
    Set wsChart = Nothing
    Set dataRange = Nothing
    Set chtObj = Nothing
End Sub

Mọi người có cao kiến gì để làm cho đoạn code này linh hoạt hơn không, ví dụ như tự động nhận diện vùng dữ liệu thay đổi mà không cần định nghĩa cứng? Hoặc có cách nào khác tối ưu hơn không? Rất mong được các cao thủ chỉ giáo!

4

Hay quá bạn ơi! Mình cũng đang đau đầu với vụ tự động hóa biểu đồ đây. Bạn có thể chia sẻ đoạn code VBA đó được không? Mình muốn xem cách bạn xử lý phần định nghĩa vùng dữ liệu nguồn và cách code tự động cập nhật biểu đồ.

2

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

Đăng nhập Đăng ký