Xóa các nội dung tại ô khác của cột nếu có ô khác được lựa chọn trong cột

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

pham ha 94

Thành viên chính thức
Tham gia
13/12/22
Bài viết
86
Được thích
6
Nhờ các bác hỗ trợ giúp
Như bảng bên dưới, hiện tại ô A9 đang được tích "x".
+ Nếu tích vào ô A3 (hoặc bất kỳ ô nào trong cột A) thì ô A9 (và các ô khác trong cột) sẽ bị xóa
+ Có thể insert thêm các ô vào giữa thì công thức không thay đổi
Em xin cảm ơn cả nhà
1675846264374.png
 
Dùng sự kiện worksheet_Change nhé
Click chuột phải và tên sheet, View Code, rồi dán code phía dưới vào:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lr&
lr = Cells(Rows.Count, "B").End(xlUp).Row
If Intersect(Target, Range("A2:A" & lr)) Is Nothing Or Target.Count > 1 Or UCase(Target) <> "X" Then Exit Sub
With Application
    .EnableEvents = False
    Range("A2:A" & lr).ClearContents
    Target.Value = "X"
    .EnableEvents = True
End With
End Sub
 
Upvote 0
Cảm ơn bạn nhiều, hiện tại mình áp dụng theo thì gặp lỗi Nếu xóa dòng bất kỳ (dòng i) thì dòng (i+1) sẽ xóa hết dữ liệu về dấu "x". Không biết khắc phục như nào
code minh giu nhu ben duoi:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lr&
lr = Cells(Rows.Count, "B").End(xlUp).Row
If Intersect(Target, Range("A2:A" & lr)) Is Nothing Then Exit Sub
With Application
.EnableEvents = False
Range("A2:A" & lr).ClearContents
Target.Value = "x"
.EnableEvents = True
End With
End Sub
 

File đính kèm

  • Capture.JPG
    Capture.JPG
    28.5 KB · Đọc: 6
Upvote 0
Bạn mô tả lại kỹ nhé:
1 hình trước khi tích
1 hình sau khi tích
 
Upvote 0
Lỗi phát sinh khi thực hiện xóa hoặc insert dòng mới, còn việc xóa dòng thì chạy ổn rồi bạn ạ
 

File đính kèm

  • Book1.xlsm
    56 KB · Đọc: 4
Upvote 0
Bạn xem thử mã dưới đây, với ràng buộc duy nhất 1 ô thay đổi trong cột tick x.

Để chèn dòng, cột không bị lỗi bạn phải đặt Name tên TickCells với vùng A2:A... nhé
JavaScript:
Private Sub Worksheet_Change(ByVal t As Range)
  Static tm!: If tm > (Timer - 0.1) Then Exit Sub
  Dim rg As Range, v
  Set rg = Range("TickCells")
  If Not CellSingle(t, rg) Then Exit Sub
  v = t.Value: If v = Empty Then Exit Sub
  tm = Timer
  On Error Resume Next
  Set rg = rg.SpecialCells(2): If Not rg Is Nothing And Err = 0 Then rg.ClearContents
  t.Value = v:
End Sub
Function CellSingle(ByVal t As Range, Optional ByVal Target As Range) As Boolean
  On Error Resume Next
  CellSingle = t(1, 1).MergeArea.Address = t.Address
  If CellSingle Then If Not Target Is Nothing Then CellSingle = (t.Column = Target.Column) And (t.Row >= Target.Row) And (t.Row < (Target.Row + Target.Rows.Count))
  On Error GoTo 0
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Private Sub Worksheet_Change(ByVal t As Range) Static tm!: If tm > (Timer - 0.05) Then Exit Sub Dim rg As Range, v Set rg = t.Parent.Range("TickCells") If Not CellSingle(t, rg) Then Exit Sub v = t.value: If v = Empty Then Exit Sub Set rg = rg.SpecialCells(2): If Not rg Is Nothing Then rg.ClearContents t.value = v: tm = Timer End Sub Function CellSingle(ByVal t As Range, Optional ByVal Target As Range) As Boolean On Error Resume Next CellSingle = t(1, 1).MergeArea.Address = t.Address If CellSingle Then If Not Target Is Nothing Then CellSingle = (t.Column = Target.Column) And (t.Row >= Target.Row) And (t.Row < (Target.Row + Target.Rows.Count)) On Error GoTo 0 End Function
Minh copy toan bo code vao sheet1 thi thay bao loi tai dong 4: Set rg = t.Parent.Range("TickCells")
 
Upvote 0
Ban xem giup minh duoc khong, bao loi suot y
 

File đính kèm

  • File xoa dong.xlsm
    14.3 KB · Đọc: 3
Upvote 0
Tôi thấy lỗi logic gì đó ở code. Chạy lặp lại 1 chút thì đơ và thoát Excel luôn.
 
Upvote 0
Chạy một xíu là sẽ đơ và mất code đóng file excel luôn ý
 
Upvote 0
Dùng sự kiện worksheet_Change nhé
Click chuột phải và tên sheet, View Code, rồi dán code phía dưới vào:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lr&
lr = Cells(Rows.Count, "B").End(xlUp).Row
If Intersect(Target, Range("A2:A" & lr)) Is Nothing Or Target.Count > 1 Or UCase(Target) <> "X" Then Exit Sub
With Application
    .EnableEvents = False
    Range("A2:A" & lr).ClearContents
    Target.Value = "X"
    .EnableEvents = True
End With
End Sub
Mình Sửa lại code này một chút ở dòng Target.Value = "X" thành Cells(Target.Row, "A").Value = "X"
Khi insert cũng không bị tích x cả hàng mà chỉ đánh X vào cột A thôi
 
Upvote 0
Web KT

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

Back
Top Bottom