Giúp tạo mã theo năm hiện hành (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

mickeybh

Thành viên hoạt động
Tham gia
26/9/13
Bài viết
156
Được thích
33
Gửi các Anh/ Chị và các bạn trên GPE!
Nhờ Anh/ Chị và các bạn giúp mình viết code tạo ra mã số gồm 6 chữ số kiểu AABBBB
AA: là 2 ký tự cuối của năm hiện hành, năm 2015 thì 2 ký tự cuối là 15
BBBB: chạy từ 0000 đến 9999.
Theo ví dụ trong file đính kèm mình gửi lên cột A là cột chứa những mã số mới tạo ra và E2 là nơi gán mã số mới tạo ra.
Với năm hiện tại trong cột A có mã số 150012 là mã số cuối cùng trong năm 2015, khi nhấn tạo mã thì mã số tiếp theo sẽ là 150013, gán 150013 vào ô A70 và E2, nhấn tạo mã số sẽ tạo ra số 150014 và gán vào A71 và E2 và cứ thế tiếp tục.
Khi sang năm 2016 thì nhấn vào tạo mã sẽ tạo ra mã số đầu tiên là 160000, 160001....và cứ thế cho những năm tiếp theo.

Mong được Anh/ Chị và các bạn giúp mình viết code theo yêu cầu giúp đỡ như trên. Có gì chưa hiểu mong được trao đổi tiếp.
 

File đính kèm

Code của bạn có dạng sau, bạn tùy biến nhé
Mã:
Sub TaoMa()
    Dim YY As Long, i As Long
    YY = Right(Year(Now()), 2)
    Range("A1:A101").NumberFormat = "@"
    For i = 1 To 100
        Cells(i + 1, 1) = YY & Format(i, "0000")
    Next
End Sub
 
Upvote 0
Cảm ơn bạn quan tâm và dành thời gian giúp đỡ, tuy nhiên:
- Mỗi lần mình chỉ tạo ra 1 mã và nó liên tiếp với mã đã tạo ra trước đó bằng cách xác định trong năm đó đã tạo ra những mà nào, lấy mã lớn nhất của năm đó để tạo 1 mã mới kế tiếp mã đó bạn à.
 
Upvote 0
Cảm ơn bạn quan tâm và dành thời gian giúp đỡ, tuy nhiên:
- Mỗi lần mình chỉ tạo ra 1 mã và nó liên tiếp với mã đã tạo ra trước đó bằng cách xác định trong năm đó đã tạo ra những mà nào, lấy mã lớn nhất của năm đó để tạo 1 mã mới kế tiếp mã đó bạn à.
Bạn thử đoạn sau nhé:

Mã:
Sub ma()
    Dim n&, m As Long, rng As Range, YY As Long
    n = Sheet1.Range("A65535").End(xlUp).Row
    Set rng = Sheet1.Range("A1", "A" & n)
    m = Application.WorksheetFunction.max(rng)
    YY = Right(Year(Now()), 2)
    
    If Left(m, 2) = YY Then
        Sheet1.Range("A" & (n + 1)) = m + 1
        Sheet1.Range("E2") = m + 1
    End If
    
    If Left(m, 2) < YY Then
        Sheet1.Range("A" & (n + 1)) = 10000 * YY + 1
        Sheet1.Range("E2") = 10000 * YY + 1
    End If
    
    If Left(m, 2) > YY Then
        tb = MsgBox("Ton tai ma so khong hop le!", , "Thông báo")
        Exit Sub
    End If
End Sub
 
Upvote 0
Bạn thử đoạn sau nhé:

Mã:
Sub ma()
    Dim n&, m As Long, rng As Range, YY As Long
    n = Sheet1.Range("A65535").End(xlUp).Row
    Set rng = Sheet1.Range("A1", "A" & n)
    m = Application.WorksheetFunction.max(rng)
    YY = Right(Year(Now()), 2)
    
    If Left(m, 2) = YY Then
        Sheet1.Range("A" & (n + 1)) = m + 1
        Sheet1.Range("E2") = m + 1
    End If
    
    If Left(m, 2) < YY Then
        Sheet1.Range("A" & (n + 1)) = 10000 * YY + 1
        Sheet1.Range("E2") = 10000 * YY + 1
    End If
    
    If Left(m, 2) > YY Then
        tb = MsgBox("Ton tai ma so khong hop le!", , "Thông báo")
        Exit Sub
    End If
End Sub

Cảm ơn bạn code hoạt động tốt, đúng như mong muốn của mình.
Mong nhận được nhiều code khác từ các anh/chị và các bạn!
 
Upvote 0
Thêm 1 tham khảo về hàm tự tạo cho bạn đây:
PHP:
Option Explicit
Function TaoMaMoi(Ma As Long)
 Dim Nam As Byte
 
 Nam = Ma \ 10 ^ 4
 If Nam = Year(Date) Mod 100 Then
    TaoMaMoi = (Nam * 10 ^ 4) + (Ma Mod 10 ^ 4) + 1
 Else
    TaoMaMoi = Year(Date) * 10 ^ 4 + 0
 End If
End Function
 
Upvote 0
Dùng hàm max cộng hàm if để tìm mã lớn nhất trong năm muốn tìm. Cộng thêm 1 thì được mã mới.

hàm workssheet (năm 2015):
=MAX(IF(A2:A69>=150000,IF(A2:A69<160000,A2:A69))) { công thức mảng, gõ Ctrl+Shift+Enter }

VBA:
Evaluate("=MAX(IF(A2:A69>=150000,IF(A2:A69<160000,A2:A69)))")

Lưu ý: nếu năm chưa có mã nào thì hàm trên trả về 0. Để có thể mặc định mã đầu tiên thì thêm một hàm MAX.
 
Upvote 0
Dùng hàm max cộng hàm if để tìm mã lớn nhất trong năm muốn tìm. Cộng thêm 1 thì được mã mới.

hàm workssheet (năm 2015):
=MAX(IF(A2:A69>=150000,IF(A2:A69<160000,A2:A69))) { công thức mảng, gõ Ctrl+Shift+Enter }

VBA:
Evaluate("=MAX(IF(A2:A69>=150000,IF(A2:A69<160000,A2:A69)))")

Lưu ý: nếu năm chưa có mã nào thì hàm trên trả về 0. Để có thể mặc định mã đầu tiên thì thêm một hàm MAX.
Cảm ơn anh! em làm trên form với lại thỉnh thoảng mới phát sinh mã số mới theo năm nên khi cần tạo em chạy sub là được.
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom