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:
- Mở file Excel đầu tiên bạn muốn đổi tên.
- Nhấn
Alt + F11để mở cửa sổ VBA Editor. - Vào
Insert > Module. - 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
- 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. - 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!