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

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

vungoc

Find Sexy Womans from your town for night
Tham gia
2/8/06
Bài viết
633
Được thích
2,604
Giới tính
Nam
Nghề nghiệp
Search
Nhờ các bạn giúp mình:

Trong bảng tính excel (đính kèm), nếu khi ta xóa đi một dòng bất kỳ nào đó (Xóa nguyên cả dòng - EntireRow.Delete), thì Code trong VBA sẽ tự động đánh lại số thứ tự. Kể từ dòng A2 trở đi, mỗi dòng kế tiếp nhau tăng lên 1 đơn vị cho nguyên bảng dữ liệu này.

(Vui lòng xem file đính kèm)

Mong sớm nhận được sự trợ giúp - Cảm ơn các bạn !
 

File đính kèm

Chỉ sợ Insert Row thì khó chứ còn xóa bớt đâu có vấn đề gì chứ... Chỉ cần công thức cũng đũ rồi
 
Upvote 0
Đây là một câu hỏi em trích xuất trong cái chương trình QUẢN LÝ PHỤ TÙNG em đang xây dựng dở dang.

Em không muốn dùng công thức, chỉ muốn dùng VBA thôi (có lý do phụ thuộc của chương trình này).

Thân ái !
 
Upvote 0
vungoc đã viết:
Nhờ các bạn giúp mình:

Trong bảng tính excel (đính kèm), nếu khi ta xóa đi một dòng bất kỳ nào đó (Xóa nguyên cả dòng - EntireRow.Delete), thì Code trong VBA sẽ tự động đánh lại số thứ tự. Kể từ dòng A2 trở đi, mỗi dòng kế tiếp nhau tăng lên 1 đơn vị cho nguyên bảng dữ liệu này.

(Vui lòng xem file đính kèm)

Mong sớm nhận được sự trợ giúp - Cảm ơn các bạn !
Nhưng sao lại bắt buộc xóa nguyên cả dòng vậy bác, sao không xóa bắt đầu từ cột B thôi ??? Như vật STT vẫn giữ nguyên.

File của bác em gần xong rồi, hy vọng ngày mai CF được--=0--=0

Thân!
 
Upvote 0
Xóa từ cột B thì trong List (nhập tạm) sẽ:
Ví dụ: - Lúc đầu có 10 dòng dữ liệu (số thứ tự từ 1 đến 10)
- Ghi tạm xong, thấy sai, xóa đi 2 dòng. Trong trường hợp này nếu xóa từ cột B trở đi thì cột A (STT) vẫn giữ nguyên số TT từ 1 đến số 10, mà thực tế thì dữ liệu chỉ có 8 dòng thôi (vì đã xóa bớt đi 2 dòng rồi).

Cho nên cột số tự chỉ còn lại số từ 1 đến 8 mới đúng (tương ứng với số dòng dữ liệu hiện hành).

Rất mong ngày mai gặp lại bác Hiếu - CF xong nhậu khánh thành file đó luôn !

Thân ái !
 
Lần chỉnh sửa cuối:
Upvote 0
vungoc đã viết:
Xóa từ cột B thì trong List (nhập tạm) sẽ:
Ví dụ: - Lúc đầu có 10 dòng dữ liệu (số thứ tự từ 1 đến 10)
- Ghi tạm xong, thấy sai, xóa đi 2 dòng. Trong trường hợp này nếu xóa từ cột B trở đi thì cột A (STT) vẫn giữ nguyên số TT từ 1 đến số 10, mà thực tế thì dữ liệu chỉ có 8 dòng thôi (vì đã xóa bớt đi 2 dòng rồi).

Cho nên cột số tự chỉ còn lại số từ 1 đến 8 mới đúng (tương ứng với số dòng dữ liệu hiện hành).

Rất mong ngày mai gặp lại bác Hiếu - CF xong nhậu khánh thành file đó luôn !

Thân ái !

Cái List đó là động, và không lấy theo cột A mà lấy theo cột B bác ạ. Có nghĩa là cột B thay đổi thì nó thay đổi theo, còn STT ở cột A vẫn giữ nguyên.
bác có cần em làm VD không ???

Thân!
 
Upvote 0
/-(ình như Vũ /(/gọc phức tạp hóa sự việc hay sao í?!

Mã:
Option Explicit[b]

Sub NumRowAfterDelete()[/b]
On Error GoTo CFC
 Dim StrC As String, LastRow As Long
 Dim Ij As Long
 Application.ScreenUpdating = False
 LastRow = Range("A65432").End(xlUp).Row
 For Ij = 2 To LastRow
    Range("A" & Ij) = Ij - 1
 Next Ij
 Exit Sub
CFC:  MsgBox "DI NHAU THOI!", , "CFC!" [b]
End Sub[/b]
Bạn cứ thử code này xem ; nếu chạy đúng í thì gán cho nó tổ hợp fím;
Sau các lần xóa dòng thì cho nó chạy lại!
 
Upvote 0
Bạn thử đoạn code này, cho biết kết quả nhé:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim i, j
i = Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To i
If Not Intersect(Range("A:A"), Target) Is Nothing Then
Application.EnableEvents = False
Cells(j, 1) = j
End If
Next
Application.EnableEvents = True
End Sub
 
Upvote 0
SA_DQ đã viết:
Mã:
Option Explicit[B]

Sub NumRowAfterDelete()[/B]
On Error GoTo CFC
 Dim StrC As String, LastRow As Long
 Dim Ij As Long
 Application.ScreenUpdating = False
 LastRow = Range("A65432").End(xlUp).Row
 For Ij = 2 To LastRow
    Range("A" & Ij) = Ij - 1
 Next Ij
 Exit Sub
CFC:  MsgBox "DI NHAU THOI!", , "CFC!" [B]
End Sub[/B]
Bạn cứ thử code này xem ; nếu chạy đúng í thì gán cho nó tổ hợp fím;
Sau các lần xóa dòng thì cho nó chạy lại!

Thực ra cả bác và Vũ Ngọc đều phức tạp hóa vấn đề đấy, cả bác Voda nữa. Vấn đề đơn giản mà, mình chỉ xóa đi từ cột B thôi. Đặt name lại là xong mà. Không cần nhờ đến VBA đâu.

Thân!
 
Upvote 0
Em xin cảm ơn 2 bác SA_DQ & voda.
Cảm ơn luôn bác Okebab.

Chúc các bác luôn mạnh khỏe & trí tuệ
(Đàn em được nhờ dài dài).

Thân mến !
 
Upvote 0
Muốn đánh STT bắt đầu từ dòng số 10, bạn chỉnh lại code như sau:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim i, j
i = Cells(Rows.Count, 1).End(xlUp).Row
For j = 10 To i
If Not Intersect(Range("A:A"), Target) Is Nothing Then
Application.EnableEvents = False
Cells(j, 1) = j - 9
End If
Next
Application.EnableEvents = True
End Sub
 
Upvote 0
voda đã viết:
Muốn đánh STT bắt đầu từ dòng số 10, bạn chỉnh lại code như sau:
Voda hay thật. Bạn Voda nếu mình muốn nó điền STT chỉ khi B 0 và cách dòng được không? VD cụ thể : B10 -> B13 0 nên cột STT A10 -> A13 là 1, 2, 3 và B150, nó STT tiếp theo là 4
 
Lần chỉnh sửa cuối:
Upvote 0
Nguyên văn bởi Duong gia
Bạn Voda nếu mình muốn nó điền STT chỉ khi B <> 0 và cách dòng được không?
Vấn đề bạn nêu mình thấy trên diễn đàn này, các bạn đã bàn nhiều. Tùy theo yêu cầu mà dùng hàm hay dùng VBA. Bạn dùng thử đoạn code sau đây:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim i, j, k
i = Cells(Rows.Count, 2).End(xlUp).Row
k = 1
Application.EnableEvents = False
Range("A:A").ClearContents
For j = 1 To i
If Not Intersect(Range("A:B"), Target) Is Nothing Then
If Cells(j, 2) <> "" Then
Cells(j, 1) = k
k = k + 1
End If
End If
Next
Application.EnableEvents = True
End Sub
 
Upvote 0
Hàm này của Thầy "Vợ Đá" rất hay!
Cảm ơn Thầy!
 
Upvote 0
Don gian thoi ban a.Minh gui lai cho ban nhe
Ban danh ham nay vao O STT o o A2 nhe:
=MAX($A$1:A1)+1
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy ta có thể dùng công thức này, insert dòng, delete dòng thoải mái luôn:
Ý mình muốn nói là khi Insert dòng thì dòng mới này đâu có công thức? (ta phải fill bằng tay)
Chính vì lẽ đó để đạt được mức độ tự động cao hơn thì chỉ có mổi cách VBA
 
Upvote 0
Cần gì phải phức tạp, chỉ dùng công thức đơn giản vẫn dùng thoải mái.Tại ôA2 và A3 (ô có số thứ tự là 1 và 2), từ ô A4 trở đi đặt công thức =Max(A2:A3)+1, sau đó kéo xuống cho đến hết thì thôi. Như vậy sau khi xoá lần lượt nguyên 1 dòng thì số thứ tự sẽ được tự động đánh lại. Nếu xoá nhiều dòng (>2 dòng) thì các ô thứ tự từ dòng bị xoá trở về sau bị lỗi, rê chuột kéo lại thì hết.
Nếu thích thì đặt thêm hàm IF cho mã phụ tùng chư nhập (rỗng) cũng đực. Ví dụ: tại ô A4 đặt công thức =IF(B3<>"";Max(A2:A3)+1;""). Thế là xong.
 
Upvote 0
Web KT

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

Back
Top Bottom