Giúp sửa lỗi code đánh số thứ tự

Liên hệ QC

DungMD

Thành viên chính thức
Tham gia
21/6/21
Bài viết
65
Được thích
16
1. Hiện tại Code của tôi thay vì đánh số thứ tự dựa trên xuất hiện giá trị cột " P" thì nó lại bị dựa trên "không có " giá trị cột " P"
Vậy tôi phải làm cách nào để sửa ?
2. Để số năm đứng sau số thứ tự : vidu 19.0002 thành 0002.19 thì làm cách nào ?
3. Tôi muốn đánh số thứ tự dựa trên khoảng thời gian cell B1: C1 ( tham chiếu tới cột Q của bảng" ) thì code sẽ phải thực hiện ntn ?

Mong các bác góp ý
Xin cảm ơn !



z2610600501367_2648c61ae154d35b0d26f88535538230.jpg

Sub SoTT()
Dim sArr(), Res(), Dic As Object
Dim sRow&, i&, yy$, ct$, iKey$, ikey2$

Set Dic = CreateObject("scripting.dictionary")
With Sheets("sheet1")
sArr = .Range("B4:R" & .Range("P" & Rows.Count).End(xlUp).Row).Value
End With
sRow = UBound(sArr)
ReDim Res(1 To sRow, 1 To 1)
For i = 1 To sRow
Select Case sArr(i, 15)

Case " ", Empty: ct = "."
Case Else: ct = Empty
End Select

If ct <> Empty Then
yy = Right(Year(sArr(i, 3)), 2) & "."
iKey = ct & "#" & sArr(i, 1) & "#" & sArr(i, 2) & sArr(i, 3) & sArr(i, 5) & sArr(i, 6)
ikey2 = yy & "#" & ct
If Not Dic.Exists(iKey) Then
Dic.Add iKey, ""
Dic.Item(ikey2) = Dic.Item(ikey2) + 1
End If
Res(i, 1) = ct & yy & Format(Dic.Item(ikey2), "0000")
End If
Next i
Sheets("sheet1").Range("A4").Resize(sRow).Value = Res
End Sub
Bài đã được tự động gộp:

 

File đính kèm

  • z2610600076173_8ddefb329f5ac225f03fb13671cb5be8.jpg
    z2610600076173_8ddefb329f5ac225f03fb13671cb5be8.jpg
    114 KB · Đọc: 5
  • XXX.xlsm
    22.7 KB · Đọc: 6
Bạn tham khảo thử nha:

(1)
PHP:
Sub DanhSTT()
 Dim Arr()
 Dim Rws As Long, J As Long, W As Integer
 Dim fW As String
  
 With Sheets("sheet1")
    Rws = .[C4].CurrentRegion.Rows.Count:       ReDim Res(1 To Rws, 1 To 1)
    Arr = .Range("C4:P" & Rws).Value           '?R '
 End With
 For J = 1 To UBound(Arr())
    If Arr(J, 14) > 0 And IsDate(Arr(J, 2)) Then
        W = W + 1
        fW = CStr(Year(Arr(J, 2)) Mod 100) & "." & Right("000" & CStr(W), 4)
        Res(J, 1) = fW
    End If
 Next J
 Sheets("Sh").Range("C4").Resize(J).Value = Res
End Sub

(2) Đổi thứ tự của câu lệnh này
Mã:
fW = CStr(Year(Arr(J, 2)) Mod 100) & "." & Right("000" & CStr(W), 4)

(3) ???
 
Upvote 0
Bạn tham khảo thử nha:

(1)
PHP:
Sub DanhSTT()
 Dim Arr()
 Dim Rws As Long, J As Long, W As Integer
 Dim fW As String
 
 With Sheets("sheet1")
    Rws = .[C4].CurrentRegion.Rows.Count:       ReDim Res(1 To Rws, 1 To 1)
    Arr = .Range("C4:P" & Rws).Value           '?R '
 End With
 For J = 1 To UBound(Arr())
    If Arr(J, 14) > 0 And IsDate(Arr(J, 2)) Then
        W = W + 1
        fW = CStr(Year(Arr(J, 2)) Mod 100) & "." & Right("000" & CStr(W), 4)
        Res(J, 1) = fW
    End If
 Next J
 Sheets("Sh").Range("C4").Resize(J).Value = Res
End Sub

(2) Đổi thứ tự của câu lệnh này
Mã:
fW = CStr(Year(Arr(J, 2)) Mod 100) & "." & Right("000" & CStr(W), 4)

(3) ???
Tôi cảm ơn rất nhiều !
 
Upvote 0
. . . . . .
3. Tôi muốn đánh số thứ tự dựa trên khoảng thời gian cell B1: C1 ( tham chiếu tới cột Q của bảng" ) thì code sẽ phải thực hiện ntn ?
Mong các bác góp ý Xin cảm ơn !
Nhưng trong cột [Q] của bạn dữ liệu không đồng nhất, thì làm thế nào mà thống kê được:

NGAY_GHI
4/24/2019​
4/24/2019​
4/25/2019​
4/25/2019​
4/25/2019​
4/30/2019​
5/31/2019​
5/31/2019​
6/10/2019​
PKT-19/0004
6/25/2019​
6/25/2019​
6/25/2019​
6/25/2019​
PKT-19/0006
6/25/2019​

(4) Thiết nghĩ bạn không nên tạo mã có những kí tự dễ 'phạm húy' như 19.0007, . . . . mà nên là 19_0007,. . . .
(4.1) & nếu là mình thì con 19 mình sẽ thay bỡi 'D', năm 2020 sẽ được biểu thị bỡi 'E',. . . .
(4.2) Ta không nên chuyển các kí số hay ký tự đại diện cho năm ra sau, như iêu cầu (2) của bạn; Lí do là khi sắp xếp thì trật tự lộn tùng phèo!

$$$$@
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng trong cột [Q] của bạn dữ liệu không đồng nhất, thì làm thế nào mà thống kê được:

NGAY_GHI
4/24/2019​
4/24/2019​
4/25/2019​
4/25/2019​
4/25/2019​
4/30/2019​
5/31/2019​
5/31/2019​
6/10/2019​
PKT-19/0004
6/25/2019​
6/25/2019​
6/25/2019​
6/25/2019​
PKT-19/0006
6/25/2019​

(4) Thiết nghĩ bạn không nên tạo mã có những kí tự dễ 'phạm húy' như 19.0007, . . . . mà nên là 19_0007,. . . .
(4.1) & nếu là mình thì con 19 mình sẽ thay bỡi 'D', năm 2020 sẽ được biểu thị bỡi 'E',. . . .
(4.2) Ta không nên chuyển các kí số hay ký tự đại diện cho năm ra sau, như iêu cầu (2) của bạn; Lí do là khi sắp xếp thì trật tự lộn tùng phèo!

$$$$@
Thanks lời tư vấn của bác, đúng là vấn đề 4.2 , 4.1 tôi chưa nghĩ đến. Thực sự cảm ơn
Về cột Q tôi vẫn chưa nghĩ ra cách. Trường hợp này tôi muốn đánh lại STT trong khoảng thời gian cho phép vì không muốn đánh lại các năm đã có số ( sợ bị ảnh hưởng khi chạy code), vì vậy tôi mới nghĩ ra cách để tham chiếu Cột Q sang khoảng thời gian. ko biết là nó có khả thi ko ?

Cột Q có mấy dòng khác biệt do tôi vô tình coppy bị lỗi, thực ra nó chỉ có ngày tháng
 
Upvote 0
Về cột Q tôi vẫn chưa nghĩ ra cách. Trường hợp này tôi muốn đánh lại STT trong khoảng thời gian cho phép vì không muốn đánh lại các năm đã có số ( sợ bị ảnh hưởng khi chạy code), vì vậy tôi mới nghĩ ra cách để tham chiếu Cột Q sang khoảng thời gian. ko biết là nó có khả thi ko ?

Cột Q có mấy dòng khác biệt do tôi vô tình coppy bị lỗi, thực ra nó chỉ có ngày tháng
Điều hiễn nhiên là bạn (chứ không ai khác) loại trừ các lỗi trong cột 'Q'
Bạn đang muốn đánh lại STT của 1 giai đoạn, cũng được mà!
Tuy nhiên giai đoạn đó nên là năm;
Nếu giai thời đó là tháng thì ta nên thực hiện cách 4.1.1 sau đây:
E9_ cho các số phiếu của tháng 9 năm 2020 & EA_ cho phiếu phát sinh trong tháng 10 của năm này. . . .
 
Upvote 0
Điều hiễn nhiên là bạn (chứ không ai khác) loại trừ các lỗi trong cột 'Q'
Bạn đang muốn đánh lại STT của 1 giai đoạn, cũng được mà!
Tuy nhiên giai đoạn đó nên là năm;
Nếu giai thời đó là tháng thì ta nên thực hiện cách 4.1.1 sau đây:
E9_ cho các số phiếu của tháng 9 năm 2020 & EA_ cho phiếu phát sinh trong tháng 10 của năm này. . . .
Tôi chỉ đánh theo năm thôi, theo tháng thực sự không cần thiết. Vậy có cách nào gép được vào công thưc cũ của tôi không ?
 
Upvote 0
2. . . . . .
3. Tôi muốn đánh số thứ tự dựa trên khoảng thời gian cell B1: C1 ( tham chiếu tới cột Q của bảng" ) thì code sẽ phải thực hiện ntn ?

Thật ra mình chưa hiểu hết í của bạn . . . .
 

File đính kèm

  • GPE.rar
    22.8 KB · Đọc: 5
Upvote 0
Web KT

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

Back
Top Bottom