Menu

Tự động đổi tên file theo nội dung ô Excel bằng VBA

Doãn Sơn Mỹ 12/06/2026 10:44 266 lượt xem 3 trả lời

Chào mọi người,

Dạo này mình đang làm một dự án cần xử lý rất nhiều file Excel và phải đổi tên thủ công theo một quy tắc nhất định dựa trên dữ liệu trong một ô của file đó. Việc này tốn rất nhiều thời gian và dễ sai sót. Sau một hồi tìm tòi, mình đã tìm ra cách tự động hóa việc này bằng VBA. Nay chia sẻ lại cho anh em nào đang gặp tình huống tương tự.

Giả sử mình có một danh sách các file Excel, và trong mỗi file, mình muốn lấy dữ liệu ở ô A1 để đặt làm tên mới cho chính file đó. Ví dụ, file gốc tên là BaoCao_Thang1.xlsx, và trong ô A1 của file này có nội dung là BaoCao_Quy1_2024, thì mình muốn đổi tên file thành BaoCao_Quy1_2024.xlsx.

Cách làm như sau:

  1. Mở file Excel đầu tiên bạn muốn đổi tên.
  2. Nhấn Alt + F11 để mở cửa sổ VBA Editor.
  3. Vào Insert > Module.
  4. Dán đoạn code sau vào:
Sub RenameFileBasedOnCellA1()
    Dim ws As Worksheet
    Dim newFileName As String
    Dim oldFileName As String
    Dim filePath As String

    ' Lấy tên file hiện tại
    filePath = ActiveWorkbook.Path
    oldFileName = ActiveWorkbook.Name

    ' Đặt tên sheet bạn muốn lấy dữ liệu (ví dụ: Sheet1)
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    ' Lấy dữ liệu từ ô A1
    newFileName = ws.Range("A1").Value

    ' Kiểm tra xem tên mới có hợp lệ không
    If newFileName = "" Then
        MsgBox "Ô A1 trống, không thể đổi tên file.", vbExclamation
        Exit Sub
    End If

    ' Xóa các ký tự không hợp lệ trong tên file (tùy chọn)
    newFileName = Replace(newFileName, "/", "-")
    newFileName = Replace(newFileName, "\", "-")
    newFileName = Replace(newFileName, ":", "-")
    newFileName = Replace(newFileName, "*", "-")
    newFileName = Replace(newFileName, "?", "-")
    newFileName = Replace(newFileName, """, "-")
    newFileName = Replace(newFileName, "", "-")
    newFileName = Replace(newFileName, "|", "-")

    ' Thêm đuôi file .xlsx
    newFileName = newFileName & ".xlsx"

    ' Đổi tên file
    On Error Resume Next ' Bỏ qua lỗi nếu có
    Name filePath & "\" & oldFileName As filePath & "\" & newFileName
    If Err.Number  0 Then
        MsgBox "Lỗi khi đổi tên file. Kiểm tra lại tên file mới hoặc quyền truy cập.", vbCritical
        Err.Clear
    Else
        MsgBox "Đã đổi tên file thành công thành: " & newFileName, vbInformation
    End If
    On Error GoTo 0 ' Bật lại xử lý lỗi mặc định

End Sub
  1. Chỉnh sửa tên sheet (Sheets("Sheet1")) và ô chứa dữ liệu (Range("A1")) cho phù hợp với file của bạn.
  2. Nhấn F5 để chạy macro.

Lưu ý: Bạn cần lưu file lại trước khi chạy macro để đảm bảo an toàn. Nếu muốn xử lý hàng loạt, bạn có thể tạo một file Excel khác, liệt kê đường dẫn đến các file cần đổi tên, sau đó dùng VBA để lặp qua từng file và chạy macro trên.

Chúc các bạn thành công!

0

Hay quá bạn ơi! Cái này đúng là cứu cánh cho những ai phải xử lý file hàng loạt đây. Mình cũng từng vật lộn với việc đổi tên file thủ công, đúng là tốn thời gian thật.

Cho mình hỏi nhỏ nhé: Code VBA của bạn có xử lý trường hợp tên file mới trùng lặp không? Hay là mình phải tự kiểm tra trước ạ?

2

Tuyệt vời, cảm ơn bạn đã chia sẻ đoạn code VBA hữu ích này! Đúng là công việc đổi tên file thủ công rất dễ gây mệt mỏi và sai sót, nhất là với số lượng file lớn. Mình cũng từng gặp trường hợp tương tự và đã thử dùng một cách khác, đó là kết hợp Power Query để gom dữ liệu rồi dùng script để đổi tên hàng loạt. Tuy nhiên, cách của bạn trực tiếp và có vẻ đơn giản hơn nhiều cho những ai mới bắt đầu với VBA.

Nhân tiện, bạn có thể chia sẻ thêm về cách xử lý các ký tự đặc biệt có thể xuất hiện trong ô A1 không? Đôi khi tên file không cho phép một số ký tự nhất định, và việc này có thể gây lỗi khi đổi tên.

2

Tuyệt vời, cảm ơn bạn đã chia sẻ đoạn code VBA hữu ích này! Đúng là công việc đổi tên file thủ công rất dễ gây mệt mỏi và sai sót, nhất là với số lượng file lớn.

Mình cũng từng gặp trường hợp tương tự và đã thử dùng một cách khác, đó là kết hợp Power Query để gom dữ liệu rồi dùng script để đổi tên hàng loạt. Tuy nhiên, cách của bạn trực tiếp và có vẻ đơn giản hơn nhiều cho những ai mới bắt đầu với VBA.

Nhân tiện, bạn có thể chia sẻ thêm về cách xử lý các ký tự đặc biệt có thể xuất hiện trong ô A1 không? Đôi khi tên file không cho phép một số ký tự nhất định, và việc này có thể gây lỗi khi đổi tên.

3

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

Đăng nhập Đăng ký