Xoá vùng có điều kiện

Liên hệ QC

trantuonganh2008

Thành viên thường trực
Tham gia
8/11/08
Bài viết
305
Được thích
53
Chào buổi sáng, Mình có vấn đề này mong mọi người giúp. Xin xem file đính kèm. Cám ơn nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Macro của bạn đây, xin mời

PHP:
Option Explicit
Sub XoaDongKhiODauTienLaNumber()
    Columns("A:A").SpecialCells(xlCellTypeConstants, 17).EntireRow.Delete
End Sub
 
Chào buổi sáng,
Mình có vấn đề này mong mọi người giúp. Xin xem file đính kèm.
Cám ơn nhiều!
Bạn yêu cầu: XÓA VÙNG CÓ ĐIỀU KIỆN mà chẳng nói đó là điều kiện gì thì sao mà làm đây?
Tóm lại:
- Xóa cái gì ở vùng B2:G40
- Cột K có dử liệu = 25 mang ý nghĩa gì vậy?
???
 
Cám ơn bạn, ý mình là Clear dữ liệu chứ không phải xoá, mình đã sửa lại Clearcontents nhưng là xoá vùng mình đã chọn trước và đặt name cho nó (với đk là dòng tại cột A có dữ liệu text thì không xoá)chứ không phải xoá dòng. Nhờ bạn chỉnh lại dùm mình.
Cám ơn nhiều!
Xài thử code này xem thế nào:
PHP:
Sub Test()
  With Range("A1:K10000")
    .AutoFilter 1, ">0"
    .Offset(1, 1).SpecialCells(12).ClearContents
    .AutoFilter
  End With
End Sub
 
Bác có thể sửa lại phương thức union được không vì vùng trong [H], , [J] mình không muốn xoá. Cám ơn bác!
 
Lần chỉnh sửa cuối:
Sao nó vẫn xóa vùng trong 3 cột mình nói trên bác ndu ơi?
Ah... vâng! Tôi nhầm ý của bạn rồi... Sorry!
Sửa lại lần nữa:
PHP:
Sub Test()
  With Range([A1], [A65536].End(xlUp))
    .AutoFilter 1, ">0"
    Union(.Offset(1, 1).Resize(, 6), .Offset(1, 10).Resize(, 1)).SpecialCells(12).ClearContents
    .AutoFilter
  End With
End Sub
Đúng là phải dùng Union ---> Bạn giỏi ghê! Hi... Hi...
 
Chào bác ndu, Làm phiền bác chút nhé. Mình có khá nhiều sheet, và vùng xóa cũng giống như vậy. Nhờ bác thêm vào code để khi xóa thì nó xoá tất cả các sheet luôn nhé. Giả sử workbook có 3 sheet. Cám ơn bác nhiều nhiều!
 
Lần chỉnh sửa cuối:
Chào bác ndu,
Làm phiền bác chút nhé. Mình có khá nhiều sheet, và vùng xóa cũng giống như vậy. Nhờ bác thêm vào code để khi xóa thì nó xoá tất cả các sheet luôn nhé. Giả sử workbook có 3 sheet.
Cám ơn bác nhiều nhiều!
Thì dùng vòng lập For đi qua các sheet nữa là được
Chẳng hạn:
PHP:
Sub Test()
  Dim Sh As Worksheet
  For Each Sh In ThisWorkbook.Worksheets
    With Sh.Range(Sh.[A1], Sh.[A65536].End(xlUp))
      .AutoFilter 1, ">0"
      Union(.Offset(1, 1).Resize(, 6), .Offset(1, 10).Resize(, 1)).SpecialCells(12).ClearContents
     .AutoFilter
    End With
  Next Sh
End Sub
Lưu ý:
- Code này sẽ làm việc trên tất cả các sheet, vì thế nếu có 1 sheet nào đó bạn muốn chừa ra thì phải thêm IF... gì gì đó... vào
- Code chỉ có thể hoạt động nếu dử liệu ở tất cả các sheet là cùng 1 cấu trúc (nằm cùng vị trí như nhau)
 
Sao nó báo lỗi bác ơi??
Bạn chẳng chịu để ý CẢNH BÁO tôi nói ở trên gì cả!
Như tôi đã nói, toàn bộ dử liệu của các sheet phải giống nhau ---> Sheet3 trong file có cái gì? Có giống Sheet1 và Sheet2 hay không?
- Một là bạn xóa sheet 3 đi
- Hai là thêm dòng On Error Resume Next vào đầu code:
PHP:
Sub Test()
  Dim Sh As Worksheet
  On Error Resume Next
  For Each Sh In ThisWorkbook.Worksheets
    With Sh.Range(Sh.[A1], Sh.[A65536].End(xlUp))
      .AutoFilter 1, ">0"
      Union(.Offset(1, 1).Resize(, 6), .Offset(1, 10).Resize(, 1)).SpecialCells(12).ClearContents
     .AutoFilter
    End With
  Next Sh
End Sub
 
Bạn chẳng chịu để ý CẢNH BÁO tôi nói ở trên gì cả! Như tôi đã nói, toàn bộ dử liệu của các sheet phải giống nhau ---> Sheet3 trong file có cái gì? Có giống Sheet1 và Sheet2 hay không? - Một là bạn xóa sheet 3 đi - Hai là thêm dòng On Error Resume Next vào đầu code:
PHP:
 Sub Test()   Dim Sh As Worksheet   On Error Resume Next   For Each Sh In ThisWorkbook.Worksheets     With Sh.Range(Sh.[A1], Sh.[A65536].End(xlUp))       .AutoFilter 1, ">0"       Union(.Offset(1, 1).Resize(, 6), .Offset(1, 10).Resize(, 1)).SpecialCells(12).ClearContents      .AutoFilter     End With   Next Sh End Sub
Chào bác ndu, Mình vẫn muốn xoá vùng này nhưng những ô nào trong vùng này chứa công thức thì mình không muốn xoá thì làm thế nào. Làm như vậy mình nghĩ sẽ rút gọn lại code hơn vì nó sẽ xoá một vùng liên tục, khỏi phải cần dùng phương thức Union. Làm phiền bác giúp mình nhé! Cám ơn bác nhiều!!!
 
Lần chỉnh sửa cuối:
Chào bác ndu,
Mình vẫn muốn xoá vùng này nhưng những ô nào trong vùng này chứa công thức thì mình không muốn xoá thì làm thế nào. Làm như vậy mình nghĩ sẽ rút gọn lại code hơn vì nó sẽ xoá một vùng liên tục, khỏi phải cần dùng phương thức Union. Làm phiền bác giúp mình nhé!
Cám ơn bác nhiều!!!
Bạn thử đưa 1 file đầy đủ (chừng 2 sheet) lên xem thế nào
Mặc khác: Đưa yêu cầu 1 lần duy nhất, đừng lắt nhắt như vậy, mất công quá
 
Sorry, mình xin nói lại. Yêu cầu của mình là xoá từ [B6:AF44] với 2 điều kiện sau: 1. Những dòng có [A] là text thì không xoá. 2. Những ô nào trong vùng này chứa công thức thì cũng không xoá luôn.
 

File đính kèm

Lần chỉnh sửa cuối:
Sorry, mình xin nói lại. Yêu cầu của mình là xoá từ [B6:AF44] với 2 điều kiện sau:
1. Những dòng có [A] là text thì không xoá.
2. Những ô nào trong vùng này chứa công thức thì cũng không xoá luôn.
Thử code này xem:
PHP:
Sub Test()
  Dim Sh As Worksheet
  On Error Resume Next
  For Each Sh In ThisWorkbook.Worksheets
    With Sh.Range(Sh.[A1], Sh.[A65536].End(xlUp))
      .AutoFilter 1, ">0"
      .Offset(1, 1).Resize(, 31).SpecialCells(12).SpecialCells(2).ClearContents
     .AutoFilter
    End With
  Next Sh
End Sub
Vùng dử liệu từ A6 liên tục đến AF44 ---> Vậy thì làm gì cần đến Union chứ? Đúng không
 
Web KT

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

Back
Top Bottom