giúp mình giữ các giá trị cho sẵn.

Liên hệ QC

thanhthao22112008

Thành viên mới
Tham gia
9/3/12
Bài viết
19
Được thích
3
Mình có 1 file excel gồm 2 sheet, sheet "dam" và sheet "cot".
Trong mỗi sheet này đều có cấu trúc giống nhau. (ở cột B có COMB1, COMB2, COMB3.....COMBn) ở đây mình chỉ đến COMB5 (về sau có thể thay đổi tùy vào công trình) Nhưng COMBBAO MAX và COMBBAO MIN luôn có tên cố định.
Bây giờ mình muốn ở sheet "dam" thì giữ lại những dòng có COMBBAO MAX và COMBBAO MIN
Và sheet cột thì lại xóa những dòng có COMBBAO MAX và COMBBAO MIN.
Mong các ACE trên diễn đàn giúp em.
Mong sớm hồi âm.
Thân!
 

File đính kèm

Lần chỉnh sửa cuối:
Mình có 1 file excel gồm 2 sheet, sheet "dam" và sheet "cot".
Trong mỗi sheet này đều có cấu trúc giống nhau. (ở cột B có COMB1, COMB2, COMB3.....COMBn) ở đây mình chỉ đến COMB5 (về sau có thể thay đổi tùy vào công trình) Nhưng COMBBAO MAX và COMBBAO MIN luôn có tên cố định.
Bây giờ mình muốn ở sheet "dam" thì giữ lại những dòng có COMBBAO MAX và COMBBAO MIN
Và sheet cột thì lại xóa những dòng có COMBBAO MAX và COMBBAO MIN.
Mong các ACE trên diễn đàn giúp em.
Mong sớm hồi âm.
Thân!
Nghĩa là Sheet "Dam" chỉ để lại những dòng có COMBBA0 MIN hoặc COMBBA0 MAX, còn sheet "Cot" thì xóa những dòng có COMBBA0 MIN hoặc COMBBA0 MAX phải không?
 
Upvote 0
Nghĩa là Sheet "Dam" chỉ để lại những dòng có COMBBA0 MIN và COMBBA0 MAX (chứ không phải là hoặc), còn sheet "Cot" thì xóa những dòng có COMBBA0 MIN Và COMBBA0 MAX (chứ không phải hoặc).
Nghĩa là sheet "dam" thì xóa hết tất cả các dòng khác (chỉ giữ lại các dòng có COMBBA0 MIN và COMBBA0 MAX)
Sheet "cot" xóa hết các dòng có COMBBA0 MIN và COMBBA0 MAX (chỉ giứ lại COMB1, COMB2, .......COMBn
Mong sớm hồi âm
 
Lần chỉnh sửa cuối:
Upvote 0
Nghĩa là Sheet "Dam" chỉ để lại những dòng có COMBBA0 MIN và COMBBA0 MAX (chứ không phải là hoặc), còn sheet "Cot" thì xóa những dòng có COMBBA0 MIN Và COMBBA0 MAX (chứ không phải hoặc).
Nghĩa là sheet "dam" thì xóa hết tất cả các dòng khác (chỉ giữ lại các dòng có COMBBA0 MIN và COMBBA0 MAX)
Sheet "cot" xóa hết các dòng có COMBBA0 MIN và COMBBA0 MAX (chỉ giứ lại COMB1, COMB2, .......COMBn
Mong sớm hồi âm
Bạn chạy thử code củ chuối như sau:

Mã:
Sub XoaDL()
Dim r1 As Range, r2 As Range
If ActiveSheet.Name = "Dam" Then
        Range("a1").AutoFilter Field:=3, Criteria1:="<>*COMBBA0 M*"
    Else
        Range("a1").AutoFilter Field:=3, Criteria1:="=*COMBBA0 M*"
End If

Set r1 = ActiveSheet.AutoFilter.Range
Set r1 = r1.Offset(1, 0).Resize(r1.Rows.Count - 1, 1)
On Error Resume Next
 Set r2 = r1.SpecialCells(xlVisible)
On Error GoTo 0
If r2 Is Nothing Then
    ActiveSheet.ShowAllData
    MsgBox "Khong con gi de xoa"
    Exit Sub
End If
r2.EntireRow.Delete
ActiveSheet.ShowAllData

End Sub
 
Upvote 0
Bạn chạy thử code củ chuối như sau:

Mã:
Sub XoaDL()
Dim r1 As Range, r2 As Range
If ActiveSheet.Name = "Dam" Then
        Range("a1").AutoFilter Field:=3, Criteria1:="<>*COMBBA0 M*"
    Else
        Range("a1").AutoFilter Field:=3, Criteria1:="=*COMBBA0 M*"
End If

Set r1 = ActiveSheet.AutoFilter.Range
Set r1 = r1.Offset(1, 0).Resize(r1.Rows.Count - 1, 1)
On Error Resume Next
 Set r2 = r1.SpecialCells(xlVisible)
On Error GoTo 0
If r2 Is Nothing Then
    ActiveSheet.ShowAllData
    MsgBox "Khong con gi de xoa"
    Exit Sub
End If
r2.EntireRow.Delete
ActiveSheet.ShowAllData

End Sub

Cám ơn domfootwearhttp://www.giaiphapexcel.com/forum/member.php?42738-domfootwear!
Mình down về dùng thì thấy ở sheet cột là đúng ý của mình.
Còn sheet dầm thì không domfootwear ạh.
(đề bài của mình là Sheet "cot" xóa hết các dòng có COMBBA0 MIN và COMBBA0 MAX (chỉ giứ lại COMB1, COMB2, .......COMBn (đã là được))
Còn sheet "dam" vẫn thế (tức là không chaỵ.) Nghĩa là sheet "dam" thì xóa hết tất cả các dòng khác (chỉ giữ lại các dòng có COMBBA0 MIN và COMBBA0 MAX)
 
Upvote 0
Mình có 1 file excel gồm 2 sheet, sheet "dam" và sheet "cot".
Trong mỗi sheet này đều có cấu trúc giống nhau. (ở cột B có COMB1, COMB2, COMB3.....COMBn) ở đây mình chỉ đến COMB5 (về sau có thể thay đổi tùy vào công trình) Nhưng COMBBAO MAX và COMBBAO MIN luôn có tên cố định.
Bây giờ mình muốn ở sheet "dam" thì giữ lại những dòng có COMBBAO MAX và COMBBAO MIN
Và sheet cột thì lại xóa những dòng có COMBBAO MAX và COMBBAO MIN.
Mong các ACE trên diễn đàn giúp em.
Mong sớm hồi âm.
Thân!

Bạn xem thử file này - Cách làm giống như của domfootwear.
Mã:
Sub XoaDong()
    On Error Resume Next
    With Sheets("dam").Range("c1:c" & [a65000].End(3).Row)
        .AutoFilter 1, "<>COMBBA0 MAX", 1, "<>COMBBA0 MIN"
        .Offset(1).SpecialCells(12).EntireRow.Delete
        .AutoFilter
    End With
    
    With Sheets("cot").Range("c1:c" & [a65000].End(3).Row)
        .AutoFilter 1, "=COMBBA0 MAX", 2, "=COMBBA0 MIN"
        .Offset(1).SpecialCells(12).EntireRow.Delete
        .AutoFilter
    End With
End Sub
 

File đính kèm

Upvote 0
Bạn xem thử file này - Cách làm giống như của domfootwear.
Mã:
Sub XoaDong()
    On Error Resume Next
    With Sheets("dam").Range("c1:c" & [a65000].End(3).Row)
        .AutoFilter 1, "<>COMBBA0 MAX", 1, "<>COMBBA0 MIN"
        .Offset(1).SpecialCells(12).EntireRow.Delete
        .AutoFilter
    End With
    
    With Sheets("cot").Range("c1:c" & [a65000].End(3).Row)
        .AutoFilter 1, "=COMBBA0 MAX", 2, "=COMBBA0 MIN"
        .Offset(1).SpecialCells(12).EntireRow.Delete
        .AutoFilter
    End With
End Sub
Cám ơn Trung Chinhs rất nhiều.
Đúng ý của mình rồi.
Chúc bạn luôn có nhiều lời giải hay cho mọi nguời trên diễn đàn.
cho mình hỏi cấu trúc "Range("c1:c" & [a65000].End(3).Row)" và ".AutoFilter 1, "<>COMBBA0 MAX", 1, "<>COMBBA0 MIN"",.Offset(1).SpecialCells(12).EntireRow.Delete có nghĩa là gì vậy.
Bạn giải thich dùm mình.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn Trung Chinhs rất nhiều.
Đúng ý của mình rồi.
Chúc bạn luôn có nhiều lời giải hay cho mọi nguời trên diễn đàn.
cho mình hỏi cấu trúc "Range("c1:c" & [a65000].End(3).Row)" và ".AutoFilter 1, "<>COMBBA0 MAX", 1, "<>COMBBA0 MIN"",.Offset(1).SpecialCells(12).EntireRow.Delete có nghĩa là gì vậy.
Bạn giải thich dùm mình.

Nghĩa của câu lệnh nôm na như sau:
"Range("c1:c" & [a65000].End(3).Row)" là vùng từ C1 đến C và dòng cuối cột A (vd: dữ liệu cuối cùng của cột A là dòng 500 thì vùng chọn là C1:C500).

.AutoFilter 1
Tức là .Autofilter cột C (vì chỉ chọn 1 cột C để Filter nên chỉ số cột là 1, nếu quét chọn từ cột A -> cột C thì chỉ số cột C là 3).

"<>COMBBA0 MAX", 1, "<>COMBBA0 MIN""
Câu này là lọc với 2 điều kiện. Số 1 có nghĩa là And (số 2 có nghĩa là OR)

.Offset(1)
là dịch vùng chọn xuống 1 dòng - mục đích là chừa lại dòng đầu bảng.

.SpecialCells(12).EntireRow.Delete
là chọn những dòng nhìn thấy để xóa (rút dòng).

Việc dùng chỉ số trong code chỉ là thói quen cá nhân (vì lười gõ chữ mà thôi).
 
Lần chỉnh sửa cuối:
Upvote 0
Nghĩa của câu lệnh nôm na như sau:
"Range("c1:c" & [a65000].End(3).Row)" là vùng từ C1 đến C và dòng cuối cột A (vd: dữ liệu cuối cùng của cột A là dòng 500 thì vùng chọn là C1:C500).

.AutoFilter 1
Tức là .Autofilter cột C (vì chỉ chọn 1 cột C để Filter nên chỉ số cột là 1, nếu quét chọn từ cột A -> cột C thì chỉ số cột C là 3).

"<>COMBBA0 MAX", 1, "<>COMBBA0 MIN""
Câu này là lọc với 2 điều kiện. Số 1 có nghĩa là And (số 2 có nghĩa là OR)

.Offset(1)
là dịch vùng chọn xuống 1 dòng - mục đích là chừa lại dòng đầu bảng.

.SpecialCells(12).EntireRow.Delete
là chọn những dòng nhìn thấy để xóa (rút dòng).

Việc dùng chỉ số trong code chỉ là thói quen cá nhân (vì lười gõ chữ mà thôi).

Bây giờ dữ liệu của tớ lớn hơn 80000 dòng thì làm thế nào.
Thực ra trong bảng tớ gởi lên là đã rút bớt đi rất nhiều.
Còn để thực chất thì lớn hơn 80000 dòng.
có phần còn lên đến 130000 dòng lận.
Nế cứ chỉnh sửa code đấy thì ko hay lắm.
làm thế nào để nó tự động được hả bạn?
Và bạn giải thích hộ mình End(3) có nghĩa là gì?
Thanks
Nếu bạn không dùng số thì đánh chữ như thế nào?
Bạn vó thể ví dụ cho mình được không?
 
Lần chỉnh sửa cuối:
Upvote 0
Bây giờ dữ liệu của tớ lớn hơn 80000 dòng thì làm thế nào.
Thực ra trong bảng tớ gởi lên là đã rút bớt đi rất nhiều.
Còn để thực chất thì lớn hơn 80000 dòng.
có phần còn lên đến 130000 dòng lận.
Nế cứ chỉnh sửa code đấy thì ko hay lắm.
làm thế nào để nó tự động được hả bạn?
Và bạn giải thích hộ mình End(3) có nghĩa là gì?
Thanks
Nếu bạn không dùng số thì đánh chữ như thế nào?
Bạn vó thể ví dụ cho mình được không?

End(3) là viết tắt của End(xlUp)

Tôi dùng Office 2003 nên bảng tính chỉ có 65536 dòng nếu bạn dùng Office khác bảng tinh có nhiều dòng hơn (vd 130000 dòng thì bạn sửa [a65000] thành [a130000]). Tuy nhiên số dòng lớn như vậy thì không biết có sử dụng Autofilter được không. Bây giờ tôi phải đi làm, tối về nghiên cứu tiếp (chắc chắn là được).
 
Upvote 0
Bây giờ dữ liệu của tớ lớn hơn 80000 dòng thì làm thế nào.
Thực ra trong bảng tớ gởi lên là đã rút bớt đi rất nhiều.
Còn để thực chất thì lớn hơn 80000 dòng.
có phần còn lên đến 130000 dòng lận.
Nế cứ chỉnh sửa code đấy thì ko hay lắm.
làm thế nào để nó tự động được hả bạn?
Và bạn giải thích hộ mình End(3) có nghĩa là gì?
Thanks
Nếu bạn không dùng số thì đánh chữ như thế nào?
Bạn vó thể ví dụ cho mình được không?
Nếu dữ liệu hơn 80000 dòng thì tốt nhất dùng mãng mới cải thiện tốc độ, AutoFilter e rằng sẽ rất nặng. Bạn thử code này xem sao nhé
Mã:
Sub DelCOMBBAOrows()
Dim ArrDam, ArrCot, ArrkqD, ArrkqC
Dim i&, j&, s&, k&
ArrDam = Sheet1.Range("A2:J100000").Value
ArrCot = Sheet2.Range("A2:J100000").Value
ReDim ArrkqD(1 To UBound(ArrDam), 1 To UBound(ArrDam, 2))
ReDim ArrkqC(1 To UBound(ArrCot), 1 To UBound(ArrCot, 2))
For i = 1 To UBound(ArrDam)
  If Right(ArrDam(i, 3), 3) = "MIN" Or Right(ArrDam(i, 3), 3) = "MAX" Then
    s = s + 1
    For j = 1 To UBound(ArrDam, 2)
      ArrkqD(s, j) = ArrDam(i, j)
    Next
  End If
  If Right(ArrCot(i, 3), 3) <> "MIN" And Right(ArrCot(i, 3), 3) <> "MAX" Then
    k = k + 1
    For j = 1 To UBound(ArrCot, 2)
      ArrkqC(k, j) = ArrCot(i, j)
    Next
  End If
Next
  Sheet1.Range("A2:J2").Resize(UBound(ArrkqD)).Value = ArrkqD
  Sheet2.Range("A2:J2").Resize(UBound(ArrkqC)).Value = ArrkqC
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mặc dù Advanced Filter không nhanh bằng mảng nhưng với 10000 dòng dữ liệu thì công cụ này thừa sức
Xem video hướng dẫn

[video=youtube_share;LuEz-fwU01c]http://youtu.be/LuEz-fwU01c[/video]

Riêng Sheet Cot cũng làm tương tự, chỉ khác điều kiện tại M2 ta gõ công thức =COUNTIF(C2,"*MAX")+COUNTIF(C2,"*MIN")=0 và cell M1 bỏ trống
 
Upvote 0
Mặc dù Advanced Filter không nhanh bằng mảng nhưng với 10000 dòng dữ liệu thì công cụ này thừa sức
Xem video hướng dẫn

[video=youtube_share;LuEz-fwU01c]http://youtu.be/LuEz-fwU01c[/video]

Riêng Sheet Cot cũng làm tương tự, chỉ khác điều kiện tại M2 ta gõ công thức =COUNTIF(C2,"*MAX")+COUNTIF(C2,"*MIN")=0 và cell M1 bỏ trống
Em nhầm ấy chứ dữ liệu của họ đã là 80000 dòng rồi, không biết 100.000 dòng thì sao ?
 
Upvote 0
cám ơn Viehoai nhiều.
đúng ý em cần.
Chúc anh luôn thành đạt và giúp được nhiều người trên diễn đàn.
 
Upvote 0
Mặc dù Advanced Filter không nhanh bằng mảng nhưng với 10000 dòng dữ liệu thì công cụ này thừa sức
Xem video hướng dẫn

[video=youtube_share;LuEz-fwU01c]http://youtu.be/LuEz-fwU01c[/video]

Riêng Sheet Cot cũng làm tương tự, chỉ khác điều kiện tại M2 ta gõ công thức =COUNTIF(C2,"*MAX")+COUNTIF(C2,"*MIN")=0 và cell M1 bỏ trống
Em cám ơn Ndu.
đây là dạng toán mà em nghĩ mãi mà không biết làm thế nào.
Nhờ có diễn đàn được gặp các anh và được các anh giúp đỡ.
chúc anh luôn thành đạt, hạnh phúc và luôn giúp được nhiều người trên diễ đàn.
 
Upvote 0
Nếu bạn dùng Office 2007 trở lên thì thử lại Code này xem sao (máy của tôi dùng Office 2003 nên không thử được)
Mã:
Sub XoaDong_2()
    Application.ScreenUpdating = False
    On Error Resume Next
    With Sheets("dam").Range("c1:c" & [a1000000].End(3).Row)
        .Replace "COMBBA0", "xx", 2
        .Replace "COMB*", "", 2
        .Replace "xx", "COMBBA0", 2
        .SpecialCells(4).EntireRow.Delete
    End With
    With Sheets("cot").Range("c1:c" & [a1000000].End(3).Row)
        .Replace "COMBBA0*", "", 2
        .SpecialCells(4).EntireRow.Delete
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu bạn dùng Office 2007 trở lên thì thử lại Code này xem sao (máy của tôi dùng Office 2003 nên không thử được)
Mã:
Sub XoaDong_2()
    Application.ScreenUpdating = False
    On Error Resume Next
    With Sheets("dam").Range("c1:c" & [a1000000].End(3).Row)
        .Replace "COMBBA0", "xx", 2
        .Replace "COMB*", "", 2
        .Replace "xx", "COMBBA0", 2
        .SpecialCells(4).EntireRow.Delete
    End With
    With Sheets("cot").Range("c1:c" & [a1000000].End(3).Row)
        .Replace "COMBBA0*", "", 2
        .SpecialCells(4).EntireRow.Delete
    End With
End Sub
Chưa cần chạy em cũng biết chắc chắn 100% rằng với dữ liệu 80000 dòng thì SpecialCells sẽ "vở" hoàn toàn
SpecialCells có nhược điểm đấy anh à ---> Số lượng Areas càng nhiều, càng dẫn đến lỗi
 
Upvote 0
Chưa cần chạy em cũng biết chắc chắn 100% rằng với dữ liệu 80000 dòng thì SpecialCells sẽ "vở" hoàn toàn
SpecialCells có nhược điểm đấy anh à ---> Số lượng Areas càng nhiều, càng dẫn đến lỗi

Thực ra đoạn code của trungchinhs em đã load về chạy nhưng kết quả vẫn thế.
Sheet của cột thì chạy đúng ý của em.
Còn sheet dầm thì không chạy tý nào (không xóa các dòng khác với COMBBAO MAX và COMBBAO MIN).
 
Upvote 0
Thực ra đoạn code của trungchinhs em đã load về chạy nhưng kết quả vẫn thế.
Sheet của cột thì chạy đúng ý của em.
Còn sheet dầm thì không chạy tý nào (không xóa các dòng khác với COMBBAO MAX và COMBBAO MIN).

Bạn muốn biết có lỗi gì xuất hiện hay không, hãy xóa dòng On Error Resume Next rồi test lại sẽ biết liền
 
Upvote 0
Web KT

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

Back
Top Bottom