Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa việc tạo chuỗi ký tự động tăng trong Excel VBA

Nhâm Hữu Anh 10/04/2026 04:43 269 lượt xem 2 trả lời

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 Function

Cá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!

3

Chào bạn,

Ý tưởng tự động hóa việc tạo mã sản phẩm bằng VBA của bạn rất hay. Mình cũng từng gặp tình huống tương tự và thường dùng một Sub để xử lý. Thay vì dùng UDF, bạn có thể thử cách lấy mã cuối cùng từ một ô cụ thể (ví dụ: ô chứa mã SP cuối cùng đã lưu) hoặc từ một bảng dữ liệu, sau đó tách phần số ra, cộng 1 và ghép lại.

Bạn có thể chia sẻ cụ thể hơn về cách bạn đang áp dụng UDF không? Mình tò mò muốn biết bạn xử lý phần lấy mã cuối cùng như thế nào.

3

Chào bạn,

Ý tưởng tự động hóa việc tạo mã sản phẩm bằng VBA của bạn rất hay. Mình cũng từng gặp tình huống tương tự và thường dùng một Sub để xử lý. Thay vì dùng UDF, bạn có thể thử cách lấy mã cuối cùng từ một ô cụ thể (ví dụ: ô chứa mã SP cuối cùng đã lưu) hoặc từ một bảng dữ liệu, sau đó tách phần số ra, cộng 1 và ghép lại.

Bạn có thể chia sẻ cụ thể hơn về cách bạn đang áp dụng UDF không? Mình tò mò muốn biết bạn xử lý phần lấy mã cuối cùng như thế nào.

0

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

Đăng nhập Đăng ký