Cách làm Không có ô trống trong: Data Validation...> settings...> list...> Source

Liên hệ QC

thichthibup

Thành viên chính thức
Tham gia
17/7/13
Bài viết
62
Được thích
6
Nhờ anh chị giúp làm sao khi tạo nút bấm trong Data Validation...> settings...> list...> Source thì không hiện ô trống
Ví dụ cột A=
A
B

D
E

F
khi bấm sẽ hiện
A
B
D
E
F
cảm ơn
 
Xóa ô trống trong source thì sẽ không có ô trống trong list
 
Danh sách ở cột A1:A7 là cố định không thể xóa được 2 ô trống đó
Không xóa được trong source thì phải dùng source khác, và source đó không trống.
Tôi nói thế bởi vì không có cách nào loại ô trống trong Validation list, nếu source có ô trống. Source có ô trống phải xử lý source, hoặc dùng source khác đã xử lý.
 
Không xóa được trong source thì phải dùng source khác, và source đó không trống.
Tôi nói thế bởi vì không có cách nào loại ô trống trong Validation list, nếu source có ô trống. Source có ô trống phải xử lý source, hoặc dùng source khác đã xử lý.
Ý bạn là dùng source phụ, nhưng làm sao source phụ tự động thay đổi theo khi sỏuce chính thay đổi
----Trường hợp này khi dùng có:dữ liệu trùng nhau, trống rất khó chịu bạn nào bit xin giúp đỡ
 

File đính kèm

  • Book3.xls
    28 KB · Đọc: 262
Thì bạn phải chuyển Source của Validation sang 1 chỗ khác và bỏ dòng trống đi thì mới được.

Bạn xem file đính kèm nhé.
Cảm ơn bạn, đã giúp tôi xử lí được 50%về trường hợp ô trống. Còn trường hợp trung ô trùng nhau bạn có cách nào ko, xin giúp đỡ
 
Cảm ơn bạn, đã giúp tôi xử lí được 50%về trường hợp ô trống. Còn trường hợp trung ô trùng nhau bạn có cách nào ko, xin giúp đỡ


Nếu dùng công thức thì phải qua công đoạn lọc duy nhất (không tính cell rổng) rồi chuyển sang vùng mới để làm list tạm
Nói chung: Công thức sẽ khiến cho file trở nên nặng nề nếu dữ liệu của bạn nhiều
Vậy: Bạn dùng giải pháp VBA đi cho nó khỏe
 
Nếu dùng công thức thì phải qua công đoạn lọc duy nhất (không tính cell rổng) rồi chuyển sang vùng mới để làm list tạm
Nói chung: Công thức sẽ khiến cho file trở nên nặng nề nếu dữ liệu của bạn nhiều
Vậy: Bạn dùng giải pháp VBA đi cho nó khỏe
Vâng ah, vậy ndu906081631 giúp tôi VBA như vậy nhé
Cảm ơn các bạn
 
Lần chỉnh sửa cuối:
Thích công thức thì có công thức cho bạn đây. Bạn xem file đính kèm nhé.
Cho em mượn tạm cái Valilist của anh mhung12005 nhé, bạn dùng công thức này cho H2 rùi làm List để chọn cũng được, hơi dài chút nhưng cũng là 1 cách.
PHP:
=IF(ISERROR(INDEX(Valilist,MATCH(1,INDEX((Valilist<>"")*(COUNTIF($H$1:H1,Valilist)=0),0),0))),"",INDEX(Valilist,MATCH(1,INDEX((Valilist<>"")*(COUNTIF($H$1:H1,Valilist)=0),0),0)))
 
Tặng bạn thêm 1 cách làm bằng VBA nữa. Bạn thêm cái gì gì đó vào cột A và xem Validation ở ô B1 nhé.
Cái này bạn giỡn chơi với thichthibup hay sao ah, thêm vào cột A nó lặng thinh mà
Hình như bạn gõ các Kí tự ở cột A vào validation...>list để đùa thichthibup ngớ ngẩn thì phải
 
Cái này bạn giỡn chơi với thichthibup hay sao ah, thêm vào cột A nó lặng thinh mà
Hình như bạn gõ các Kí tự ở cột A vào validation...>list để đùa thichthibup ngớ ngẩn thì phải

Người ta làm bằng code đàng hoàng chứ ngớ ngẩn gì
Có điều đồng chí mhung12005 làm sự kiện Worksheet_SelectionChange hơi buồn cười
Mã:
If Not Intersect(Range("A1:A100"), Target) Is Nothing Then
Tại sao phải chọn vào A1:A100 thì code mới chạy? Lý ra code sẽ chạy khi chọn vào B1 mới đúng chứ
 
Người ta làm bằng code đàng hoàng chứ ngớ ngẩn gì
Có điều đồng chí mhung12005 làm sự kiện Worksheet_SelectionChange hơi buồn cười
Mã:
If Not Intersect(Range("A1:A100"), Target) Is Nothing Then
Tại sao phải chọn vào A1:A100 thì code mới chạy? Lý ra code sẽ chạy khi chọn vào B1 mới đúng chứ
Không hiểu sao file này khi mở lên ko hề có đoạn code nào, nhờ các bác kiểm tra giúp; hơn nữa các file trước đây có code nhưng nay mở ra thì không thấy dòng code nào, mặc dù phai đó vẫn hoạt động bình thường
 

File đính kèm

  • Validation.xls
    42.5 KB · Đọc: 66
Người ta làm bằng code đàng hoàng chứ ngớ ngẩn gì
Có điều đồng chí mhung12005 làm sự kiện Worksheet_SelectionChange hơi buồn cười
Mã:
If Not Intersect(Range("A1:A100"), Target) Is Nothing Then
Tại sao phải chọn vào A1:A100 thì code mới chạy? Lý ra code sẽ chạy khi chọn vào B1 mới đúng chứ
Em đang hiểu ý của anh mhung12005 là khi chọn và thêm dữ liệu vào vùng [A1:A100] code chạy luôn và cập nhật vào validation sư phụ ạ, hành động thêm dữ liệu trước, cũng hơi ngược ngược chút vì có phải lúc nào cũng thêm dữ liệu đâu mà tác động vào vùng A1:A100. hix! Có lẽ là anh ấy đang triển khai code theo hướng đó nên mới viết như vậy.

@COLACLAC : Không có code sao mà file hoạt động được theo yêu cầu của bạn, Code này không đặt trong module mà đặt trong sheet1, bạn mở file, bấm Alt+F11, click đúp vào sheet1(sheet1) ở cửa sổ bên trái để xem code nhé!
 
Lần chỉnh sửa cuối:
Em đang hiểu ý của anh mhung12005 là khi chọn và thêm dữ liệu vào vùng [A1:A100] code chạy luôn và cập nhật vào validation sư phụ ạ,
Nếu chọn hành động THÊM DỮ LIỆU thì cập nhật code. Vậy ta phải dùng sự kiện Change chứ sao lại SelectionChange.
SelectionChange là hành động dùng chuột click chổ này chổ nọ trên bảng tính... vậy tôi chỉ click chơi chơi trên cột A chứ hổng thay đổi dữ liệu gì mà code cũng chạy à? Vô lý
Suy nghĩ xem!
----------
Nếu là tôi thì tôi sẽ viết thế này:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim arr, Item, dic As Object, tmp As String
  On Error Resume Next
  If Target.Address = "$B$1" Then
    arr = Range("A1:A10000").Value
    Set dic = CreateObject("Scripting.Dictionary")
    For Each Item In arr
      tmp = CStr(Item)
      If Len(tmp) Then
        If Not dic.Exists(tmp) Then dic.Add tmp, ""
      End If
    Next
    With Target.Validation
      .Delete
      If dic.Count Then .Add 3, , , Join(dic.Keys, ",")
    End With
  End If
End Sub
 
Lần chỉnh sửa cuối:
Nếu chọn hành động THÊM DỮ LIỆU thì cập nhật code. Vậy ta phải dùng sự kiện Change chứ sao lại SelectionChange.
SelectionChange là hành động dùng chuột click chổ này chổ nọ trên bảng tính... vậy tôi chỉ click chơi chơi trên cột A chứ hổng thay đổi dữ liệu gì mà code cũng chạy à? Vô lý
Suy nghĩ xem!
----------
Nếu là tôi thì tôi sẽ viết thế này:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim arr, Item, dic As Object, tmp As String
  On Error Resume Next
  If Target.Address = "$B$1" Then
    arr = Range("A1:A10000").Value
    Set dic = CreateObject("Scripting.Dictionary")
    For Each Item In arr
      tmp = CStr(Item)
      If Len(tmp) Then
        If Not dic.Exists(tmp) Then dic.Add tmp, ""
      End If
    Next
    With Target.Validation
      .Delete
      If dic.Count Then .Add 3, , , Join(dic.Keys, ",")
    End With
  End If
End Sub

Đúng là ý em làm giống như Hoa còi nói sư phụ ạ. Và em nhớ nhầm, phải dùng sự kiện Change mới đúng Hihi. Em mới chỉ tập tành VBA mà.
Cảm ơn sư phụ và Hoa còi đã góp ý để rút kinh nghiệm.
 
Web KT
Back
Top Bottom