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

thanh_huong@

Thành viên mới
Tham gia ngày
1 Tháng ba 2008
Bài viết
2
Được thích
0
Điểm
0
Tuổi
36
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 đỡ.
 

Mat Buon

Thành viên mới
Tham gia ngày
24 Tháng một 2007
Bài viết
4
Được thích
1
Điểm
0
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.
 

dlink500t

Thành viên mới
Tham gia ngày
30 Tháng một 2008
Bài viết
19
Được thích
0
Điểm
663
Tuổi
32
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á.
 

ptm0412

Excel Ordinary Member
Thành viên BQT
Super Moderator
Tham gia ngày
4 Tháng mười một 2007
Bài viết
9,453
Được thích
28,786
Điểm
1,910
Tuổi
58
Nơi ở
Gò Vấp
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
 

anhtuan1066

Thành viên gạo cội
Tham gia ngày
10 Tháng ba 2007
Bài viết
5,814
Được thích
6,836
Điểm
860
Tuổi
53
Nơi ở
Biên Hòa, Đồng Nai
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

ongtrungducmx25

Thành viên gạo cội
Tham gia ngày
5 Tháng hai 2007
Bài viết
2,077
Được thích
1,985
Điểm
860
Tuổi
39
Nơi ở
TP-Sóc Trăng
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>
 

minhlev

A - Bờ - Cờ
Thành viên danh dự
Tham gia ngày
2 Tháng bảy 2007
Bài viết
420
Được thích
894
Điểm
835
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
 

minhlev

A - Bờ - Cờ
Thành viên danh dự
Tham gia ngày
2 Tháng bảy 2007
Bài viết
420
Được thích
894
Điểm
835
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))
 

anhtuan1066

Thành viên gạo cội
Tham gia ngày
10 Tháng ba 2007
Bài viết
5,814
Được thích
6,836
Điểm
860
Tuổi
53
Nơi ở
Biên Hòa, Đồng Nai
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
 

thanh_huong@

Thành viên mới
Tham gia ngày
1 Tháng ba 2008
Bài viết
2
Được thích
0
Điểm
0
Tuổi
36
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.
 

chuang

Thành viên mới
Tham gia ngày
19 Tháng ba 2008
Bài viết
18
Được thích
3
Điểm
665
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!
 

roadno1

Thành viên chính thức
Tham gia ngày
16 Tháng mười 2013
Bài viết
67
Được thích
1
Điểm
0
Tuổi
32
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
 

chipham7777777

Thành viên mới
Tham gia ngày
19 Tháng mười hai 2019
Bài viết
2
Được thích
0
Điểm
13
Tuổi
29
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
 

giaiphap

Thành viên gạo cội
Tham gia ngày
12 Tháng ba 2007
Bài viết
4,841
Được thích
4,103
Điểm
860
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.
 
Top Bottom