Đánh số thứ tự phiếu nhập hoặc xuất theo ngày tháng và số hóa đơn (1 người xem)

  • Thread starter Thread starter chinhld
  • Ngày gửi Ngày gửi
Liên hệ QC

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

chinhld

Thành viên chính thức
Tham gia
14/1/10
Bài viết
50
Được thích
2
Giới tính
Nam
Mình cần là: Đánh số thứ tự tại cột A, sao cho:
- Số thứ tự này có mã đầu là PNK khi cột D-số lượng nhập có giá trị; là PXK khi cột E-số lượng xuất có giá trị.
- Số thứ tự này tăng dần theo ngày tháng nhập ở cột C
- Số thứ tự là giống nhau khi cùng ngày tháng (cột C) và cùng số hóa đơn (cột B)
Mình cảm ơn nhiều!
 

File đính kèm

Bạn vận hành thử nghiệm bộ mã này trong file xem sao:

Mã được macro sự kiện (tại cột [D:E]) tạo ra, chúng luôn có độ dài là 8; Trong đó:

Kí tự đầu chỉ năm; Sau đó có thể là kí số hay kí tự chỉ tháng;
Kí tự (hay kí số thứ 3) chỉ ngày

Tiếp sau là 4 kí số chỉ thứ tự tăng dần của nhập hoặc xuất trong ngày
Cuối cùng là kí tự chỉ ra việc nhập hay xuất.
 

File đính kèm

Mã được macro sự kiện (tại cột [D:E]) tạo ra, chúng luôn có độ dài là 8; Trong đó:

Kí tự đầu chỉ năm; Sau đó có thể là kí số hay kí tự chỉ tháng;
Kí tự (hay kí số thứ 3) chỉ ngày

Tiếp sau là 4 kí số chỉ thứ tự tăng dần của nhập hoặc xuất trong ngày
Cuối cùng là kí tự chỉ ra việc nhập hay xuất.

File của bạn, mình đã xem rồi, nó không ổn ở chỗ-khi có sự kiện ở cột D-E xảy ra là ký tự X hoặc N sẽ thay đổi.
Nó cũng chưa đúng với yêu cầu của mình lắm.
Cảm ơn bạn đã quan tâm nhé.
 
Lần chỉnh sửa cuối:
Như bạn thì đánh số thứ tự sẽ là vầy:
[TABLE="width: 104"]
[TR]
[TD]PNK018
[/TD]
[/TR]
[TR]
[TD]PNK018
[/TD]
[/TR]
[TR]
[TD]PXK001
[/TD]
[/TR]
[TR]
[TD]PXK001
[/TD]
[/TR]
[TR]
[TD]PXK002

[/TD]
[/TR]
[/TABLE]

Nếu cần sắp xếp theo cột này theo tháng nào đó thì việc gì sẽ diễn ra?
& quan trọng hơn diễn ra như vậy có thuận tiện cho bạn không?
 
File của bạn, mình đã xem rồi, nó không ổn ở chỗ-khi có sự kiện ở cột D-E xảy ra là ký tự X hoặc N sẽ thay đổi.
Nó cũng chưa đúng với yêu cầu của mình lắm.
Cảm ơn bạn đã quan tâm nhé.

Chẳng liên quan gì đến ngày, chỉ xét số HĐ cột B là đủ.
Như kết quả mẫu của bạn thì cũng chẳng cần xem cột Xuât (E).
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, R As Long, nNhap As Long, nXuat As Long, Tmp As Long
sArr = Range("B5", Range("B5").End(xlDown)).Resize(, 3).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
For I = 1 To R
    If sArr(I, 1) <> Tmp Then
        Tmp = sArr(I, 1)
        If sArr(I, 3) <> Empty Then
            nNhap = nNhap + 1
        Else
            nXuat = nXuat + 1
        End If
    End If
    dArr(I, 1) = IIf(sArr(I, 3) <> Empty, "PNK" & Format(nNhap, "000"), "PXK" & Format(nXuat, "000"))
Next I
Range("A5").Resize(R) = dArr
End Sub
 
Lần chỉnh sửa cuối:
Chính xác! Ta có thể bỏ luôn trường/cột [Ngày] trong CSDL đi! (Một khi đã đưa nó vô mã dạng ngắn gọn: 'YMD' với 3 kí tự của ngày nhập liệu

Lúc đó, ta cần biến đổi (để biết) 3 kí tự đầu của mã là biểu hiện của 1 ngày nào, ta lại xài:
PHP:
Function NgayMa(StrC As String) As Date
 Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXIZ"
 Dim Nm As Integer, Th As Byte, Ng As Byte, VT As Byte
 
 Nm = InStr(Alf, Left(StrC, 1)) + 2002
 Th = InStr(Alf, Mid$(StrC, 2, 1)) - 1
 Ng = InStr(Alf, Right$(StrC, 1)) - 1
 NgayMa = DateSerial(Nm, Th, Ng)
End Function
 
Lần chỉnh sửa cuối:
Bạn ơi, có vài hóa đơn giống hệt số đấy bạn-do có nhiều đơn vị cung cấp mà, nên cần là số hóa đơn đó-nhưng ngày đó sẽ là PNK001, nhưng với ngày khác thì nó sẽ là PNK002-sắp xếp theo chiều tăng của ngày tháng.
Bạn có thể sửa giùm mình theo như yêu cầu được không?
Mình cảm ơn nhé.
Chẳng liên quan gì đến ngày, chỉ xét số HĐ cột B là đủ.
Như kết quả mẫu của bạn thì cũng chẳng cần xem cột Xuât (E).
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, R As Long, nNhap As Long, nXuat As Long, Tmp As Long
sArr = Range("B5", Range("B5").End(xlDown)).Resize(, 3).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
For I = 1 To R
    If sArr(I, 1) <> Tmp Then
        Tmp = sArr(I, 1)
        If sArr(I, 3) <> Empty Then
            nNhap = nNhap + 1
        Else
            nXuat = nXuat + 1
        End If
    End If
    dArr(I, 1) = IIf(sArr(I, 3) <> Empty, "PNK" & Format(nNhap, "000"), "PXK" & Format(nXuat, "000"))
Next I
Range("A5").Resize(R) = dArr
End Sub
 
Lần chỉnh sửa cuối:
Bạn ơi, có vài hóa đơn giống hệt số đấy bạn-do có nhiều đơn vị cung cấp mà, nên cần là số hóa đơn đó-nhưng ngày đó sẽ là PNK001, nhưng với ngày khác thì nó sẽ là PNK002-sắp xếp theo chiều tăng của ngày tháng.
Bạn có thể sửa giùm mình theo như yêu cầu được không?
Mình cảm ơn nhé.

Những số HĐ cùng ngày phải được Sort liên tục. Nếu không thì "nát bét".
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, R As Long, nNhap As Long, nXuat As Long, Tmp As String
sArr = Range("B5", Range("B5").End(xlDown)).Resize(, 3).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
For I = 1 To R
    If sArr(I, 1) & "#" & sArr(I, 2) <> Tmp Then
        Tmp = sArr(I, 1) & "#" & sArr(I, 2)
        If sArr(I, 3) <> Empty Then
            nNhap = nNhap + 1
        Else
            nXuat = nXuat + 1
        End If
    End If
    dArr(I, 1) = IIf(sArr(I, 3) <> Empty, "PNK" & Format(nNhap, "000"), "PXK" & Format(nXuat, "000"))
Next I
Range("A5").Resize(R) = dArr
End Sub
Đơn vị A và B và C ... cùng cung cấp số HĐ 0001, cùng ngày 27/8/2015 thì sao ta?
 
Lần chỉnh sửa cuối:
Cảm ơn bạn nhiều nhé. Bạn nói đúng, mình sơ ý thật đấy, cùng số cùng ngày thì khó mà phân biệt được.
Bạn ơi, giúp mình cho trót nhé, mình gửi bạn file mới, trong đó có thêm mã doanh nghiệp, nếu cùng số hóa đơn, cùng ngày thì cùng một mã doanh nghiệp sẽ cùng một số PNK (PXK), sang mã doanh nghiệp khác sẽ là số PNK(PXK) tiếp theo.
Mình cảm ơn bạn nhé.
Những số HĐ cùng ngày phải được Sort liên tục. Nếu không thì "nát bét".
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, R As Long, nNhap As Long, nXuat As Long, Tmp As String
sArr = Range("B5", Range("B5").End(xlDown)).Resize(, 3).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
For I = 1 To R
    If sArr(I, 1) & "#" & sArr(I, 2) <> Tmp Then
        Tmp = sArr(I, 1) & "#" & sArr(I, 2)
        If sArr(I, 3) <> Empty Then
            nNhap = nNhap + 1
        Else
            nXuat = nXuat + 1
        End If
    End If
    dArr(I, 1) = IIf(sArr(I, 3) <> Empty, "PNK" & Format(nNhap, "000"), "PXK" & Format(nXuat, "000"))
Next I
Range("A5").Resize(R) = dArr
End Sub
Đơn vị A và B và C ... cùng cung cấp số HĐ 0001, cùng ngày 27/8/2015 thì sao ta?
 

File đính kèm

Cảm ơn bạn nhiều nhé. Bạn nói đúng, mình sơ ý thật đấy, cùng số cùng ngày thì khó mà phân biệt được.
Bạn ơi, giúp mình cho trót nhé, mình gửi bạn file mới, trong đó có thêm mã doanh nghiệp, nếu cùng số hóa đơn, cùng ngày thì cùng một mã doanh nghiệp sẽ cùng một số PNK (PXK), sang mã doanh nghiệp khác sẽ là số PNK(PXK) tiếp theo.
Mình cảm ơn bạn nhé.

Bạn chưa "hình dung" dữ liệu và kết quả muốn có, đã vội vàng "muốn" kết quả.
Có dòng không nhập, không xuất (ví dụ 102, 203) thì gán nó bằng PNK hay PXK hay không ghi gì cả?
Dữ liệu ban đầu bạn đưa lên đều có cột Nhập hoặc Xuất >0. Bây giờ thì khác.
 
Lần chỉnh sửa cuối:
Bạn ơi, chỗ đó mình chưa nhập vào đấy. Mỗi dòng sẽ luôn có dữ liệu, và chỉ có hoặc nhập hoặc xuất thôi.
Bạn giúp mình thêm căn cứ của cột mã doanh nghiệp nhé.
Mình cảm ơn!
Bạn chưa "hình dung" dữ liệu và kết quả muốn có, đã vội vàng "muốn" kết quả.
Có dòng không nhập, không xuất (ví dụ 203) thì gán nó bằng PNK hay PXK hay không ghi gì cả?
 
Bạn ơi, chỗ đó mình chưa nhập vào đấy. Mỗi dòng sẽ luôn có dữ liệu, và chỉ có hoặc nhập hoặc xuất thôi.
Bạn giúp mình thêm căn cứ của cột mã doanh nghiệp nhé.
Mình cảm ơn!

Vậy nếu không có Nhập thì coi như Xuất (Kể cả Xuất cũng =0).
Code cho file bài #9:
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, R As Long, nNhap As Long, nXuat As Long, Tmp As String
sArr = Range("B12", Range("B12").End(xlDown)).Resize(, 4).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
For I = 1 To R
    If sArr(I, 1) & "#" & sArr(I, 2) & "$" & sArr(I, 3) <> Tmp Then
        Tmp = sArr(I, 1) & "#" & sArr(I, 2) & "$" & sArr(I, 3)
        If sArr(I, 4) > 0 Then
            nNhap = nNhap + 1
        Else
            nXuat = nXuat + 1
        End If
    End If
    dArr(I, 1) = IIf(sArr(I, 4) > 0, "PNK" & Format(nNhap, "000"), "PXK" & Format(nXuat, "000"))
Next I
Range("A12").Resize(R) = dArr
End Sub
 
Cảm ơn bạn nhiều nhé!
 
Web KT

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

Back
Top Bottom