Hỏi về code tạo số thứ tự

Liên hệ QC

tungson_mrcc

Thành viên hoạt động
Tham gia
25/4/07
Bài viết
108
Được thích
72
Tôi nhớ trên GPE có bài viết về cách đánh số thứ tự rất hay, nay muốn tìm xem lại nhưng không sao tìm được. Đã thử tìm kiếm với các cụm từ "số thứ tự", "tạo số thứ tự"... nhưng đều không tìm được.
Bác nào biết đường link về đề tài này, xin chỉ dẫn giúp với.
Cảm ơn nhiều nhiều.
 
Tôi nhớ trên GPE có bài viết về cách đánh số thứ tự rất hay, nay muốn tìm xem lại nhưng không sao tìm được. Đã thử tìm kiếm với các cụm từ "số thứ tự", "tạo số thứ tự"... nhưng đều không tìm được.
Bác nào biết đường link về đề tài này, xin chỉ dẫn giúp với.
Cảm ơn nhiều nhiều.

Bạn vào đây đọc xem có thông tin gì giúp cho công việc của bạn không

Dùng VBA để đánh số thứ tự sau mỗi lần xóa bớt đi những dòng dữ liệu trong bảng tính
 
hi All
Thực ra không cần phải sử dụng VBA làm gì cho phức tạp, bạn có thể làm như sau:
ví dụ ta có bảng số liệu bao gồm 3 cột STT, Ho Va Ten, Năm sinh
1. Tại dòng đầu tiên của cột STT gõ lệnh: if(A1="","",1)
2. Tại dòng thứ 2 của cột STT gõ lệnh: if(A2="","", max($A$1:A1)+1)
đây là một cách điền số thứ tự rất hiệu quả và loại bỏ các khoảng trống.
chúc bạn thành công
 
hi All
Thực ra không cần phải sử dụng VBA làm gì cho phức tạp, bạn có thể làm như sau:
ví dụ ta có bảng số liệu bao gồm 3 cột STT, Ho Va Ten, Năm sinh
1. Tại dòng đầu tiên của cột STT gõ lệnh: if(A1="","",1)
2. Tại dòng thứ 2 của cột STT gõ lệnh: if(A2="","", max($A$1:A1)+1)
đây là một cách điền số thứ tự rất hiệu quả và loại bỏ các khoảng trống.
chúc bạn thành công
Thế lúc bạn chèn thêm dòng nó có đánh STT cho bạn không?
Nếu dễ thế ai hỏi làm gì
 
May quá về tìm lại trong các file đã tải thì thấy đúng cái mình đang cần, có kèm cả đường dẫn luôn, tại đây.
Còn đây là bài viết của Bác NDU, mình mới đọc ngày hôm nay.
Cảm ơn các bạn đã quan tâm trả lời.
Trân trọng.
 
Lần chỉnh sửa cuối:
Nhờ các Bác xem và góp ý thêm cho đoạn code tạo số thứ tự 4 cấp của tôi soạn sau khi tham khảo bài viết của Bác NDU và Bác TrongChinh.

Ở đây, tôi tạo STT cho các mục chi tiết trước khi tạo STT cho các phân nhóm
Tôi muốn dùng Evaluate và SpecialCells để tạo STT cho các mục chị tiết sau khi đã tạo STT cho các phân nhóm, nhưng không được. Nhờ các Bác hướng dẫn thêm.

Trân trọng.

PHP:
Sub mycode()
Dim i, erow3 As Integer
Dim N1, N2, N3 As String
Dim sttN1, sttN2, sttN3 As Integer
Application.ScreenUpdating = False
Range(Cells(27, "A"), Cells(Rows.Count, "A")).EntireRow.Delete shift:=xlUp    'Xoa du lieu cu
erow3 = Cells(Rows.Count, "B").End(xlUp).Row
Range(Cells(1, "A"), Cells(erow3, "I")).Copy Cells(27, "A") 'Copy du lieu chua xu ly vao o A27
erow3 = Cells(Rows.Count, "B").End(xlUp).Row
Range("A28").FormulaR1C1 = "=CONCATENATE(RC[6],RC[7],RC[8])"    'Tao SortKey
Range("A28").Copy Range(Cells(28, "A"), Cells(erow3, "A"))  'Tao SortKey
'Doan nay la y tuong cua Bac NDU
 
Range("A28:I" & erow3).Sort _
    Key1:=Range("A28"), Key1:=Range("B28"), DataOption2:=xlSortTextAsNumbers
Range("A28:A" & erow3).Value = Evaluate("Row(R1:R" & erow3 & ")")
 
''''''
i = 28
Do While i <= erow3
    If Cells(i, "G") <> "" And Cells(i, "G") <> N1 Then
        N1 = Cells(i, "G")
        sttN1 = sttN1 + 1
        sttN2 = 0
        sttN3 = 0
        
        Cells(i, "G").EntireRow.Insert shift:=xlDown
        Cells(i, "A") = Chr(sttN1 + 64) & ". " & N1
        Cells(i, "G") = N1
        
        Range("A" & i & ":B" & i).HorizontalAlignment = xlLeft
        Range("A" & i & ":B" & i).Font.FontStyle = "Bold"
        Range("A" & i & ":F" & i).Interior.ColorIndex = 8 'Mau xanh coban
        erow3 = erow3 + 1
    End If
    If Cells(i, "H") <> "" And Cells(i, "H") <> N2 Then
        N2 = Cells(i, "H")
        sttN2 = sttN2 + 1
        sttN3 = 0
        
        Cells(i, "H").EntireRow.Insert shift:=xlDown
        Cells(i, "A") = Chr(sttN1 + 64) & "." & sttN2 & ". " & N2
        Cells(i, "H") = N2
        
        Range("A" & i & ":B" & i).HorizontalAlignment = xlLeft
        Range("A" & i & ":B" & i).Font.FontStyle = "Bold"   ' "Bold Italic"
        Range("A" & i & ":F" & i).Interior.ColorIndex = 40 'Mau nau nhat
        erow3 = erow3 + 1
    End If
    If Cells(i, "I") <> "" And Cells(i, "I") <> N3 Then
        N3 = Cells(i, "I")
        sttN3 = sttN3 + 1
        Cells(i, "I").EntireRow.Insert shift:=xlDown
        Cells(i, "A") = Chr(sttN1 + 64) & "." & sttN2 & "." & sttN3 & ". " & N3
        Cells(i, "I") = N3
        
        Range("A" & i & ":B" & i).HorizontalAlignment = xlLeft
        Range("A" & i & ":B" & i).Font.FontStyle = "Bold"   '"Italic"
        Range("A" & i & ":F" & i).Interior.ColorIndex = 36 'Mau vang nhat
        erow3 = erow3 + 1
    End If
    
    If Cells(i + 1, "G") = N1 Then Cells(i + 1, "G") = ""
    If Cells(i + 1, "H") = N2 Then Cells(i + 1, "H") = ""
    If Cells(i + 1, "I") = N3 Then Cells(i + 1, "I") = ""
    
    i = i + 1
Loop
If WorksheetFunction.CountA(Range("G28:G" & erow3)) = 1 Then _
    Range("G28:G" & erow3).SpecialCells(xlCellTypeConstants).EntireRow.Delete shift:=xlUp
If WorksheetFunction.CountA(Range("H28:H" & erow3)) = 1 Then _
    Range("H28:H" & erow3).SpecialCells(xlCellTypeConstants).EntireRow.Delete shift:=xlUp
If WorksheetFunction.CountA(Range("I28:I" & erow3)) = 1 Then _
    Range("I28:I" & erow3).SpecialCells(xlCellTypeConstants).EntireRow.Delete shift:=xlUp
Range("G27:I" & erow3).ClearContents
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • Son_STT.xls
    59.5 KB · Đọc: 23
Nhờ thầy NDU hướng dẫn thêm về cách áp dụng SpecialCellsEvaluate
ở trước vòng DO...Loop, Khi tôi thay câu lệnh
Range("A28:A" & erow3).Value = Evaluate("Row(R1:R" & erow3 & ")")
bằng câu lệnh
Range("A28:A" & erow3).ClearContents

Sau đó tôi đặt câu lệnh
Range("A28:A" & erow3).SpecialCells(xlCellTypeBlanks) = Evaluate("row(R1:R1000)")
ở phía sau vòng Do...Loop, thì kết quả không nhu ý muốn.

Tôi không hiểu mình sai ở chỗ nào, mong thầy chỉ giúp.

Trân trọng
 

File đính kèm

  • Son_STT_ThacMac.xls
    47 KB · Đọc: 7
Nhờ thầy NDU hướng dẫn thêm về cách áp dụng SpecialCellsEvaluate
ở trước vòng DO...Loop, Khi tôi thay câu lệnh
Range("A28:A" & erow3).Value = Evaluate("Row(R1:R" & erow3 & ")")
bằng câu lệnh
Range("A28:A" & erow3).ClearContents

Sau đó tôi đặt câu lệnh
Range("A28:A" & erow3).SpecialCells(xlCellTypeBlanks) = Evaluate("row(R1:R1000)")
ở phía sau vòng Do...Loop, thì kết quả không nhu ý muốn.

Tôi không hiểu mình sai ở chỗ nào, mong thầy chỉ giúp.

Trân trọng
Thứ nhất: Tất cả chổ nào có đoạn Evaluate("row(R1... gì gì đó, bạn cứ sửa thành Evaluate("ROW(R:R)") là được rồi --> Không cần xác định dòng cuối
Thứ hai: Cách điền STT kiểu này chỉ có tác dụng với vùng dữ liệu liên tục ---> Bạn dùng SpecialCells(xlCellTypeBlanks) thì đấy là vùng không liên tục rồi ---> Chơi Evaluate(...) không ăn đâu
 
Web KT

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

Back
Top Bottom