Muốn tự động cập nhật số thứ tự khi chèn thêm dòng

Liên hệ QC

thanh_huong@

Thành viên mới
Tham gia
1/3/08
Bài viết
2
Được thích
0
Tôi có tài liệu excel như sau:A1: ghi STT, B1: ghi nội dung. Số thứ tự tự động gia tăng khi kéo xuống. VD:A2:1->A3:2->A4:3.Hàng thứ 5 thì merge cell lại.Hàng thứ 6 thì tự động tăng 4->5>6>7. Khi thêm 1 hàng hay xóa 1 hàng thì STT thay đổi theo.Rất mong được sự giúp đỡ.
 
Mình nghĩ bạn có thể dùng công thức
Ví dụ: A 3 = A 2+1
A 4 = A 3 + 1
A 6 = A 4 + 1
rồi cứ copy xuống thì nó tự động link với nhau.
Khi xóa một dòng thì copy công thức paste lại thôi.
 
trường hợp này: ô a9 ghi STT, a10 bạn ghi là:
=IF(B10="","",MAX($A$9:A9)+1)
cách này, nếu ô B10 có dữ liệu thì thì a10 tự động nhảy. ngược lại, nếu kô có thì tự động xoá.
 
Dùng cách sau:
- A2 = 1
- A3 = if(B3<>"";Max($A$2:A2)+1;"")
Fill xuống
Tốt nhất là merge cell từ B qua C, đừng merge từ A. Khi chèn dòng, xoá dòng phải fill công thức lại (chỉ cần fill 1 cell).
Một cách khác:

- A2 = if(B2<>"";row()+1;"")
Fill xuống
Khi xoá dòng, không cần sửa công thức xuống dưới. Nhưng không được cách quãng dữ liệu như cách trên
 
Làm bằng công thức chỉ có thể fill số TT khi xóa dòng... còn muốn nó fill luôn khi thêm dòng e rằng phải dùng VBA...
Hơn nữa khi kéo fill công thức làm sao mà "băng qua" dc merge cell đây?
Hic...
ANH TUẤN

Tôi nghỉ giãi quyết vụ này bằng VBA thì hay hơn, gợi ý cho bạn 1 code:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Er As Integer, Max As Integer
    If Not Intersect(Range("B2:B100"), Target) Is Nothing Then
      Er = Range("B1000").End(xlUp).Row
      For i = 2 To Er
        Max = Application.WorksheetFunction.Max(Range("A1:A" & i - 1))
        If Cells(i, 1).MergeCells = False Then
           Cells(i, 1).Value = Max + 1
        End If
      Next i
    End If
End Sub
Có thể sửa lại 1 tí cho phù hợp vơi thực tế!
Xem file đính kèm, khi chèn dòng hoặc xóa dòng thì STT tự cập nhật
Mến
ANH TUẤN
 

File đính kèm

  • STT.xls
    22.5 KB · Đọc: 297
sao em muốn sTT đếm từ B9:1 ;họ tên: C9 thì không chạy được nhỉ
tại B9:1 ====> C9:Thạch Huỳnh Trường ===>enter thì chạy toàn là số 1 tại A9:1
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Er As Integer, Max As Integer
    If Not Intersect(Range("C2:C100"), Target) Is Nothing Then
      Er = Range("C1000").End(xlUp).Row
      For i = 9 To Er
        Max = Application.WorksheetFunction.Max(Range("B9:B" & i - 1))
        If Cells(i, 1).MergeCells = False Then
           Cells(i, 1).Value = Max + 1
        End If
      Next i
    End If
End Sub
</SPAN></SPAN>
 
Bác sử lại đoạn code:
PHP:
        If Cells(i, 1).MergeCells = False Then
           Cells(i, 1).Value = Max + 1
thành
PHP:
        If Cells(i, 2).MergeCells = False Then
           Cells(i, 2).Value = Max + 1
 
Nguyên nhân là ở đoạn code
PHP:
For i = 9 To Er
Max = Application.WorksheetFunction.Max(Range("B9:B" & i - 1))
Bác sửa đoạn đó thành:
PHP:
For i = 9 To Er
Max = Application.WorksheetFunction.Max(Range("B8:B" & i - 1))
 
Sửa lại chổ này nhé:
Mã:
Max = Application.WorksheetFunction.Max(Range("B[COLOR=red][B]8[/B][/COLOR]:B" & i - 1))
Đồng chí đễ ý sẽ thấy rằng code này y chang cách ta dùng hàm =MAX($B$8:B8)+1 thôi mà
ANH TUẤN
 
Dòng A1: ghi STT, B1: ghi nội dung.
Trong đoạn code dòng:
If Cells(i, 1).MergeCells = False Then
Cells(i, 1).Value = Max + 1
Tôi đổi lại thành
If Cells(i, 2).MergeCells = False Then
Cells(i, 2).Value = Max + 1
Vì thế những nội dung trong cột B bị mất hết và thay vào đó là STT. Phần nội dung toàn là dữ liệu quan trọng. Xin hỏi có cách nào khôi phục lại được không? Xin cảm ơn mọi người rất nhiều.
 
Các bác cho em hoi chút; em khong biết nhiều vê excel nên không làm được; nếu cùng vói số thứ tự như trên và ở một vài cột nữa muốn copy công thức ở hàng trên xuống thì lệnh đó viết như thế nào? Rất cảm ơn những trả lời!
 
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Er As Integer, Max As Integer
    If Not Intersect(Range("B2:B100"), Target) Is Nothing Then
      Er = Range("B1000").End(xlUp).Row
      For i = 2 To Er
        Max = Application.WorksheetFunction.Max(Range("A1:A" & i - 1))
        If Cells(i, 1).MergeCells = False Then
           Cells(i, 1).Value = Max + 1
        End If
      Next i
    End If
End Sub

Code này có thể sửa để có thể tự động cập nhật số thứ tự khi dùng AutoFilter được không anh Tuấn,
Nếu nó tự động cập nhật số thứ tự khi AutoFilter nữa thì tuyệt vời
 
Làm bằng công thức chỉ có thể fill số TT khi xóa dòng... còn muốn nó fill luôn khi thêm dòng e rằng phải dùng VBA...
Hơn nữa khi kéo fill công thức làm sao mà "băng qua" dc merge cell đây?
Hic...
ANH TUẤN

Tôi nghỉ giãi quyết vụ này bằng VBA thì hay hơn, gợi ý cho bạn 1 code:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Er As Integer, Max As Integer
    If Not Intersect(Range("B2:B100"), Target) Is Nothing Then
      Er = Range("B1000").End(xlUp).Row
      For i = 2 To Er
        Max = Application.WorksheetFunction.Max(Range("A1:A" & i - 1))
        If Cells(i, 1).MergeCells = False Then
           Cells(i, 1).Value = Max + 1
        End If
      Next i
    End If
End Sub
Có thể sửa lại 1 tí cho phù hợp vơi thực tế!
Xem file đính kèm, khi chèn dòng hoặc xóa dòng thì STT tự cập nhật
Mến
ANH TUẤN
Anh cho em hỏi em bắt đầu đánh số ở cột A dòng thứ 3 thì thay đổi code như thế nào cho phù hợp, em đã đổi đủ kiểu rồi mà đánh vẫn không thành công, nó bắt đầu bằng 1 ở ô A2 và ô A3 vẫn là 1 rồi sau đó mới cộng dồn
 
Anh cho em hỏi em bắt đầu đánh số ở cột A dòng thứ 3 thì thay đổi code như thế nào cho phù hợp, em đã đổi đủ kiểu rồi mà đánh vẫn không thành công, nó bắt đầu bằng 1 ở ô A2 và ô A3 vẫn là 1 rồi sau đó mới cộng dồn
Tìm trong code chổ nào số 2 sửa lại thành số 3 là được.
 
Web KT
Back
Top Bottom