Chiêu 38: Thêm d liu vào danh sách Validation mt cách tự động
Nếu bạn đã tng s dng validation, bn s thấy đó là một tính năng rất hay. Có lẽ điểm ấn tượng nht ca nó chính là
khnăng thêm một danh sách la chn vào bt k ô nào trên bng tính và cho phép người s dng chn la. Nó s tuyt
hơn hay không nếu khi bn nhp vào mt tên mi trong mt ô đang áp dụng tính năng validation thì Excel s tự động
thêm tên này vào trong danh sách validation? Điều này có th thc hin được khi bn làm theo các hướng dn trong bài
này.
Gi s bạn có danh sách tên trong vùng A1:A10 như hình sau:
Danh sách này chính là tên ca các nhân viên trong mt công ty. Ti mt ô đang áp dụng validation, bn s không th
nào nhập vào đưc tên mt nhân viên mi ngoài danh sách la chn, mà bn phi thêm tên nhân viên mi này vào dòng
cui trong danh sách và điều chnh li vùng d liu của validation tớc. Điều này s rt bt tin trong s dng.
Để hn chế nhược điểm này, ti ô A11 bn nhp vào công thc bên dưới và sao chép đến A20 (d trù trưc s thêm 10
tên mi).
=IF(OR($D$1="",COUNTIF($A$1:A10,$D$1)),"x",$D$1)
Chn Formulas Defined Names Define Name (E2003: Insert Name Define), và nhp vào tên MyName ti hp
Names. Ti Refers To, bn nhp vào công thc bên dưới ri nhp OK (E2003: nhn Add OK).
=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),1)
Theo tôi, ta thay bng công thc
=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A)-COUNTIF(Sheet1!$A:$A,"=x"),1)
Cho ô D1, vào Data Data Tools Data Validation (E2003: Data Validation). Chn List t hp Allow, và ti
Source nhp vào =MyNames, bạn đảm bo rằng đã chn thêm hp In-Cell dropdown. Chn ngăn Error Alert và bỏ chn
Show error alert after invalid data is entered. Nhn nút OK khi hoàn tt.
Nhp phi chut lên tên Sheet1 và chn View Code. Sau đó bn nhập vào đoạn mã sau:
[highlight=VB] Private Sub Worksheet_Change(ByVal Target As Range)
Dim lReply As Long
If Target.Cells.Count > 1 Then Exit Sub
If Target.Address = "$D$1" Then
If IsEmpty(Target) Then Exit Sub
If WorksheetFunction.CountIf(Range("MyNames"), Target) = 0 Then
lReply = MsgBox("Add " & Target & " to list", vbYesNo + vbQuestion)
If lReply = vbYes Then
Range("MyNames").Cells(Range("MyNames").Rows.Count + 1, 1) = Target
End If
End If
End If
End Sub
[/highlight]
Đóng cửa s VBE và lưa bảng tính li, sau đó chọn ô D1 và nhp vào mt tên mi chưa có trong danh sách validation
nhn Enter. Bn s thy tên mi xut xut hin trong danh sách d liu trên bng tính ti ô A11 và nếu chn ô D1 và
m danh ch validation bn cũng s thy tên mới đã được b sung vào.
Các bn xem thêm mt s ci tiến trong tập tin đính kèm.