Chào mọi người,
Dạo này mình đang làm một dự án nhỏ liên quan đến việc quản lý mã sản phẩm. Mỗi khi thêm sản phẩm mới, mình cần tạo một mã duy nhất theo dạng SP001, SP002, ... tăng dần. Làm thủ công thì khá mất thời gian và dễ sai sót, đặc biệt khi số lượng sản phẩm lớn.
Mình đã thử tìm hiểu và áp dụng VBA để tự động hóa việc này. Ý tưởng là mình sẽ tạo một hàm tùy chỉnh (User Defined Function - UDF) hoặc một Sub để nó tự động lấy mã cuối cùng, tăng giá trị số lên 1 và thêm vào phía trước chuỗi cố định là 'SP'.
Đây là đoạn code mình viết thử, mọi người xem giúp mình có tối ưu không và có cách nào hay hơn không:
Function GetNextProductCode() As String
Dim lastRow As Long
Dim lastCode As String
Dim nextCodeNum As Long
' Giả định mã sản phẩm nằm ở cột A, bắt đầu từ dòng 2
With ThisWorkbook.Sheets("Products") ' Thay "Products" bằng tên sheet của bạn
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
If lastRow < 2 Then
nextCodeNum = 1
Else
lastCode = .Cells(lastRow, "A").Value
' Tách phần số ra khỏi chuỗi
nextCodeNum = CInt(Right(lastCode, Len(lastCode) - 2)) + 1
End If
End With
' Định dạng lại số với 3 chữ số 0 ở đầu (ví dụ: 001, 010, 100)
GetNextProductCode = "SP" & Format(nextCodeNum, "000")
End FunctionCách sử dụng là bạn chỉ cần nhập công thức =GetNextProductCode() vào ô bạn muốn hiển thị mã sản phẩm mới. Mỗi lần nhập công thức này hoặc khi bảng tính được tính toán lại, nó sẽ trả về mã tiếp theo.
Tuy nhiên, mình đang băn khoăn một chút về hiệu suất nếu bảng tính có quá nhiều dòng và việc gọi hàm liên tục có thể ảnh hưởng. Có cách nào để nó chỉ cập nhật mã khi có sự kiện thêm dữ liệu mới (ví dụ: sự kiện Worksheet_Change) thì sẽ tốt hơn không?
Rất mong nhận được sự chỉ giáo của các cao thủ VBA!