Hỏi code vòng lặp để xóa row

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Chào các anh

Em xin được hỏi code để xóa như sau
- Xóa 12 hàng trên cùng
- Trừ hàng tiều đề trên cùng, những hàng phía dưới nếu tại cột A ko phải là số thì del row đó đi

Cám ơn anh chị chỉ giáo
 
Khỏi vòng lặp bạn à!

Bạn tham khảo macro sau:
PHP:
Option Explicit
Sub DeleteTextValue()
 [a1].Resize(12).EntireRow.Delete
 Range([a2], [a65500].End(xlUp)).Select
 Selection.SpecialCells(xlCellTypeConstants, 22).EntireRow.Delete
End Sub
 
Upvote 0
Chào các anh

Em xin được hỏi code để xóa như sau
- Xóa 12 hàng trên cùng
- Trừ hàng tiều đề trên cùng, những hàng phía dưới nếu tại cột A ko phải là số thì del row đó đi

Cám ơn anh chị chỉ giáo
DelRows xóa các dòng từ 2 đến 12 (If rc > 1 And rc < 13), các dòng mà dữ liệu trong cột A rổng (Trim(Cells(rc, 1)) = "") hoặc không phải là số (IsNumeric(Cells(rc, 1)) = False)
Tùy yêu cầu mà bạn chỉnh lại cho phù hợp.
Mã:
Sub DelRows()
Dim r As Long
r = Cells(Cells.Rows.Count, 1).End(xlUp).Row
Do
  If rc > 1 And rc < 13 Or Trim(Cells(rc, 1)) = "" Or IsNumeric(Cells(rc, 1)) = False Then
    Cells(rc, 1).EntireRow.Delete Shift:=xlUp
  End If
  rc = rc - 1
Loop While rc > 1
End Sub
 
Upvote 0
Em cũng làm theo cách của sư phụ HYen17 (không vòng lập)... Chỉ sửa lại tí cho chính xác!
Giã sử vùng dử liệu bằng đầu tại A9, vậy thì:
PHP:
Option Explicit
Sub DeleteTextValue()
  Dim Rng As Range
  Set Rng = [A9].CurrentRegion
  Rng.Offset(1).Resize(12).EntireRow.Delete
  Rng.Offset(1).Resize(, 1).SpecialCells(2, 22).EntireRow.Delete
End Sub
Nhanh gọn!
Nếu muốn xóa luôn các cell rổng tại cột A thì thêm 1 cái SpecialCells(4) nữa là xong!
 
Lần chỉnh sửa cuối:
Upvote 0
Anh NDU code chạy veo véo

Hộ em cái SpecialCell(4) với, cái này em chưa biết

Và Em xin được hỏi ý nghĩa của dòng code sau với
SpecialCells(xlCellTypeConstants, 22)



Cám ơn anh
ST
 
Lần chỉnh sửa cuối:
Upvote 0
PDL đã viết:
r = Cells(Cells.Rows.Count, 1).End(xlUp).Row

Cám ơn anh, anh Dim R nhưng phía dưới anh làm một loạt rc
thảm nào em chạy mãi không được

If rc > 1 And rc < 13 Or Trim(Cells(rc, 1)) = "" Or IsNumeric(Cells(rc, 1)) = False Then
Cells(rc, 1).EntireRow.Delete Shift:=xlUp

anh ơi Shift: =xlup có nghĩa là gì vay?

Cám ơn anh nhé, code chạy hay lắm
ST
 
Lần chỉnh sửa cuối:
Upvote 0
Em xin hỏi code để xóa như sau
- Xóa 12 hàng trên cùng
- Trừ hàng tiều đề trên cùng, những hàng phía dưới nếu tại cột A ko phải là số thì del row đó đi
Viết thế này, thì mình cũng nghĩ các tiêu đề ban đầu nằm ở dòng 13.
Còn nếu chúng nằm ở dòng 1 thì
ta gộp chung chúng mà xóa thôi. Chỉ có điều xóa 1 lần có được không nữa
Range([A2].resize(12), Range([a14], [a65500].End (xlUp)) _
.SpecialCells(xlCellTypeConstants, 22)).EntireRow.Delete

 
Upvote 0
Anh NDU code chạy veo véo

Hộ em cái SpecialCell(4) với, cái này em chưa biết

Và Em xin được hỏi ý nghĩa của dòng code sau với




Cám ơn anh
ST
Mấy cái SpecialCells đều tương đương với việc bạn bấm Ctrl + G\Special và chọn 1 mục nào đó... SpecialCells(4) tương đương với chọn mục Blanks (nằm vị trí thứ 4 từ trên xuống)
Bạn cứ record macro và chọn từng mục rồi xem code sẽ hiểu
anh ơi Shift: =xlup có nghĩa là gì vay?
ST
Click phải 1 cell bất kỳ, chọn Delete sẽ thấy 4 mục chọn, trong đó có mục Shift cell Up, chính là cái bạn cần hỏi
 
Lần chỉnh sửa cuối:
Upvote 0
Viết thế này, thì mình cũng nghĩ các tiêu đề ban đầu nằm ở dòng 13.
Còn nếu chúng nằm ở dòng 1 thì
ta gộp chung chúng mà xóa thôi. Chỉ có điều xóa 1 lần có được không nữa
Range([A2].resize(12), Range([a14], [a65500].End (xlUp)) _
.SpecialCells(xlCellTypeConstants, 22)).EntireRow.Delete

Tôi nghĩ là được, nhưng e rằng không phải làm như vậy!
Dùng Union để gộp!
Ví dụ
PHP:
  Set Rng1 = ............
  Set Rng2 = ............
  Union(Rng1, Rng2).EntireRow.Delete
Đơn giãn vì Range 1 và Range 2 không nằm trong 1 vùng liên tục
Có điều cách này chưa chắc khả thi, vì những lý do sau:
- Range 1 được xác định = 12 dòng dưới dòng tiêu đề ---> cái này hoàn toàn có thể xác định mà không gặp bất cứ lổi nào
- Range 2 được xác định là những cell có giá trị TEXT trong cột A ---> Cái này có thể bị lổi nếu cột A toàn là NUMBER
- Vậy nếu muốn code không lổi ta phải thêm On Error Resume Next ở đầu code
- Sau khi dùng Union để gộp lại, nếu gặp lổi thì code sẽ chẳng làm gì cả

Kết luận: Nên xóa 2 lần, nếu gặp lổi không tìm ra được giá trị TEXT trong cột A thì cùng lắm là nó bỏ qua công đoạn này (vẩn thực hiện công đoạn 1)
 
Lần chỉnh sửa cuối:
Upvote 0
cám ơn các anh đã chỉ giáo
Thực ra đây là một phần công việc hàng ngày của em, dữ liệu được lấy từ phần mềm cty trên mạng xuống.
Lúc nào em cũng phải xóa đi 12 hàng trên cùng, hàng thứ 13 là tiêu đề
Và bắt đầu từ hàng thứ 14 trở đi tại cột A lúc thì là số, lúc là rỗng, lúc là chữ và em chỉ giữ lại những hàng có số (đó là số thứ tự)
Ví dụ: mình lấy dữ liệu cả một tháng thì số hàng lên tới chục nghìn dòng. Xóa tay rất mất thời gian


Còn rất nhiều điều em ko biết và em xin được chỉ dạy

Cám ơn các anh
 
Upvote 0
Em xin được hỏi đối số trong ngoặc với (phần bôi đen). Các anh giúp em
xlCellTypeConstants

TKS
Bạn cứ thu macro, Control G, chọn Special, bạn sẽ thấy Constants là cái gì
Cứ lần lượt đánh dấu: Formular, Text, ....
Bạn sẽ hiểu thôi.
 
Upvote 0
cám ơn các anh đã chỉ giáo
Thực ra đây là một phần công việc hàng ngày của em, dữ liệu được lấy từ phần mềm cty trên mạng xuống.
Lúc nào em cũng phải xóa đi 12 hàng trên cùng, hàng thứ 13 là tiêu đề
Và bắt đầu từ hàng thứ 14 trở đi tại cột A lúc thì là số, lúc là rỗng, lúc là chữ và em chỉ giữ lại những hàng có số (đó là số thứ tự)
Ví dụ: mình lấy dữ liệu cả một tháng thì số hàng lên tới chục nghìn dòng. Xóa tay rất mất thời gian


Còn rất nhiều điều em ko biết và em xin được chỉ dạy

Cám ơn các anh
Nếu vậy thì dể hơn 1 chút (không giống với cách tôi đã hiểu ở bài 1)
Có thể là vầy:
PHP:
Sub Xoadong()
  Dim Rng As Range
  Rows("1:12").Delete Shift:=xlUp
  On Error Resume Next
  Set Rng = [A1].CurrentRegion.Offset(1).Resize(, 1)
  Rng.SpecialCells(2, 22).EntireRow.Delete
  Rng.SpecialCells(4).EntireRow.Delete
End Sub
Rng.SpecialCells(2, 22) là vùng dử liệu không phải là NUMBER
SpecialCells(4) là vùng dử liệu chứa các cell rổng
 
Upvote 0
cám ơn các anh đã chỉ giáo
Thực ra đây là một phần công việc hàng ngày của em, dữ liệu được lấy từ phần mềm cty trên mạng xuống.
Lúc nào em cũng phải xóa đi 12 hàng trên cùng, hàng thứ 13 là tiêu đề
Và bắt đầu từ hàng thứ 14 trở đi tại cột A lúc thì là số, lúc là rỗng, lúc là chữ và em chỉ giữ lại những hàng có số (đó là số thứ tự)
Ví dụ: mình lấy dữ liệu cả một tháng thì số hàng lên tới chục nghìn dòng. Xóa tay rất mất thời gian


Còn rất nhiều điều em ko biết và em xin được chỉ dạy

Cám ơn các anh
Với xóa 12 dòng trên thì không nói, còn xóa hàng thứ 14 trở đi tại cột A lúc thì là số, lúc là rỗng, lúc là chữ và em chỉ giữ lại những hàng có số, cái này thì sort theo A và xóa những dòng rỗng và chữ là nhanh nhất, cái này tôi đã test với #60.000 dòng
PHP:
Sub Xoadong()
  Dim Rng As Range
  Rows("1:12").Delete Shift:=xlUp
  On Error Resume Next
  Set Rng = [A1].CurrentRegion.Offset(1).Resize(, 1)
  Rng.SpecialCells(2, 22).EntireRow.Delete
  Rng.SpecialCells(4).EntireRow.Delete
End Sub

Code này có 1 cái sai nếu xung quang A1 mà rỗng thì CurrentRegion (Ctr *) sẽ không chọn cái gì.
 
Upvote 0
Web KT

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

Back
Top Bottom