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 (6 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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

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
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

File đính kèm

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