Chào các bác, em là thành viên mới của diễn đàn. Dạo này em đang làm việc với một dự án cần tạo ra các mã sản phẩm tự động dựa trên một số điều kiện nhất định. Ví dụ, nếu sản phẩm thuộc loại 'A' và màu 'Xanh', mã sẽ là 'AX001'. Nếu loại 'B' và màu 'Đỏ', mã sẽ là 'BR005'.
Em đã thử dùng các hàm Excel thông thường nhưng với số lượng điều kiện phức tạp và yêu cầu tạo mã tăng dần theo từng loại, em thấy hơi đuối. Em nghĩ VBA sẽ là giải pháp tối ưu cho trường hợp này.
Hiện tại, em đang gặp khó khăn trong việc viết đoạn code để xử lý logic này. Cụ thể, em muốn:
- Đọc dữ liệu từ một bảng gồm các cột: Loại sản phẩm, Màu sắc.
- Dựa vào hai cột này để sinh ra một mã sản phẩm duy nhất.
- Mã sản phẩm sẽ có dạng
[Ký tự đầu loại][Ký tự đầu màu][Số thứ tự tăng dần theo từng cặp loại-màu]. - Ví dụ: Loại A, Màu Xanh -> AX001; Loại A, Màu Đỏ -> AR002; Loại B, Màu Xanh -> BX001.
Có cao nhân nào đã từng làm qua hoặc có kinh nghiệm về mảng này có thể chia sẻ cho em một đoạn code mẫu hoặc hướng dẫn em cách tiếp cận không ạ? Em cảm ơn rất nhiều!
Em xin phép để lại một đoạn code em thử viết nhưng chưa chạy được để mọi người tham khảo:
Sub TaoMaSanPham()
Dim wsData As Worksheet
Dim wsOutput As Worksheet
Dim lastRow As Long
Dim i As Long
Dim ma As String
Dim dict As Object
Set wsData = ThisWorkbook.Sheets("DuLieu") ' Giả sử dữ liệu ở sheet tên DuLieu
Set wsOutput = ThisWorkbook.Sheets("KetQua") ' Giả sử kết quả xuất ra sheet KetQua
lastRow = wsData.Cells(Rows.Count, "A").End(xlUp).Row
Set dict = CreateObject("Scripting.Dictionary")
For i = 2 To lastRow ' Bắt đầu từ dòng 2 để bỏ qua tiêu đề
Dim loai As String
Dim mau As String
loai = wsData.Cells(i, "A").Value ' Cột A là Loại
mau = wsData.Cells(i, "B").Value ' Cột B là Màu
Dim key As String
key = loai & "-" & mau
If Not dict.Exists(key) Then
dict.Add key, 1
Else
dict(key) = dict(key) + 1
End If
ma = Left(loai, 1) & Left(mau, 1) & Format(dict(key), "000")
wsOutput.Cells(i, "C").Value = ma ' Xuất mã ra cột C
Next i
MsgBox "Đã tạo mã sản phẩm xong!"
End Sub