Chào các anh chị
E muốn kiểm soát dữ liệu nhập bằng Data Validition của 1 ô là Bội số của 5 (5,10,15...) thì làm thế nào?
Mong sự giúp đỡ!
bạn thử vậy xem được ko, validation cho a1
mod(a1,5)=0
Mình chưa hiểu ý bạn, đưa hàm vào list alow nào vậy?bạn thử vậy xem được ko, validation cho a1
mod(a1,5)=0
Mình chưa hiểu ý bạn, đưa hàm vào list alow nào vậy?
Cảm ơn bạn nhiềuallow chọn customer
formular: copy cthức trên vào
chúc thành công
Thì dùng IF thôi:Cảm ơn bạn nhiều
Cho mình hỏi nâng cao hơn một chút. Có một cột phân loại, nếu loại A thì điều kiện nhập là bội của 2, loại B thì điều kiện nhập là bội của 5..
Như file đính kèm, mong ac giúp đỡ
=IF(A4="A";MOD(B4;2)=0;IF(A4="B";MOD(B4;5)=0;MOD(B4;10)=0))
Cảm ơn bạn nhiều
Cho mình hỏi nâng cao hơn một chút. Có một cột phân loại, nếu loại A thì điều kiện nhập là bội của 2, loại B thì điều kiện nhập là bội của 5..
Như file đính kèm, mong ac giúp đỡ
Dạ, e lười suy nghĩ quá ạh, trong lúc bối rối nên hỏi luôn, hìTrời ơi! Làm 1 điều kiện được rồi, giờ 2 hoặc 3 điều kiện thì IF vài cái là xong chứ gì
Cảm ơn bạn nhiều
Cho mình hỏi nâng cao hơn một chút. Có một cột phân loại, nếu loại A thì điều kiện nhập là bội của 2, loại B thì điều kiện nhập là bội của 5..
Như file đính kèm, mong ac giúp đỡ
Dạ, e lười suy nghĩ quá ạh, trong lúc bối rối nên hỏi luôn, hì
Nếu như mà thêm điều kiện nhỏ hơn 1 số nào nữa thì ntn ạh, ví dụ <50,000,000 chẳng hạn
Bạn gợi ý dùng hàm j được không? còn thao tác thì mình tự nghĩbạn nghĩ xem, kết hợp thêm hàm vào đk trên
Bạn gợi ý dùng hàm j được không? còn thao tác thì mình tự nghĩ![]()
And(logic1,logic2)... ??? mình đang nghĩ tới, nó sẽ ra kết quả là true/false, nếu =true thì OK ?bạn thử hàm and "cái này Và cái kia"
Mình có làm ra cái hàm nàybạn thử hàm and "cái này Và cái kia"
Đã chay ngon. Tuy nhiên muốn chặn dưới, ví dụ 10<=B4<=20 thì dường như là hàm nó ko hiểu, hjk=IF(A4="A",AND(B4<=20,MOD(B4,2)=0),IF(A4="B",AND(B4<=30,MOD(B4,5)=0),AND(B4<=40,MOD(B4,10)=0)))
Mình có làm ra cái hàm này
Đã chay ngon. Tuy nhiên muốn chặn dưới, ví dụ 10<=B4<=20 thì dường như là hàm nó ko hiểu, hjk
Như này được hiểu là nếu loại A hay B thì đều có thể chạy từ 10 đến 20Chắc là nó sai ở chổ nào đó,
bạn thử lại cái này
=AND(MOD(B4,IF(A4="A",2,IF(A4="B",5,10)))=0,B4>=10,B4<=20)
Như này được hiểu là nếu loại A hay B thì đều có thể chạy từ 10 đến 20
Mình tách như hàm trên để là nếu loại A thì số chỉ chạy từ 10 đến 20, nếu B chạy từ 20 đến 30..., C...
=IF(A4="A",AND(10<B4<=20,MOD(B4,2)=0),IF(A4="B",AND(20<B4<=30,MOD(B4,5)=0),AND(B4<=40,MOD(B4,10)=0)))
Như này thì lại ko chạy được
Mình đặt hàm ở ngoài thử thì kết quả FALSE, đang tìm nguyên nhân, hjk
WOW, hóa ra vậy, cứ tưởng là kết hợp luôn, cảm ơn bạn..Bạn sai cú pháp
AND(10<B4<=20,MOD(B4,2)=0----->and(B4>10,B4<=20,mod(B4,2)=0
E có một cột với nhiều số trùng nhau.. làm thể nào để đưa ra một ô dạng list của data validation các số là duy nhất
many tks!
E có một cột với nhiều số trùng nhau.. làm thể nào để đưa ra một ô dạng list của data validation các số là duy nhất
many tks!
Với cột phụ thì e có khả năng làm được, nhưng để file thêm nhỏ gọn nên e muốn add luôn vào soucre của list data validation ạh, hìDùng chức năng có sẵn của excel: Data->consolidate
Tất nhiên là qua cột phụ, có điều nhanh gọn.
Với cột phụ thì e có khả năng làm được, nhưng để file thêm nhỏ gọn nên e muốn add luôn vào soucre của list data validation ạh, hì
Với cột phụ thì e có khả năng làm được, nhưng để file thêm nhỏ gọn nên e muốn add luôn vào soucre của list data validation ạh, hì
consolidate dùng như thế nào bạn? mình chưa dùng chức năng này bao giờ, hì, tksCột phụ thì ai cũng làm được, ý mình là nếu làm cột phụ thì mình nghĩ dùng consolidate là nhanh gọn nhất.
Không thì .. chỉ có VBA như anh NDU nói.
Dạ, cảm ơn thày, thày có thể làm trên giả lập ko ạh, để học trò còn động não suy nghĩ cho dữ liệu thật..Bạn đưa dữ liệu thật lên tôi làm luôn cho
(giả lập không đúng sự thật, mất công làm đi làm lại mệt lắm)
1> Code trong Module:Dạ, cảm ơn thày, thày có thể làm trên giả lập ko ạh, để học trò còn động não suy nghĩ cho dữ liệu thật..
Function UniqueList(ParamArray sArray())
Dim Item, tmpArr, SubArr, tmp
On Error Resume Next
With CreateObject("Scripting.Dictionary")
For Each SubArr In sArray
tmpArr = SubArr
If Not IsArray(tmpArr) Then tmpArr = Array(tmpArr)
For Each Item In tmpArr
tmp = CStr(Item)
If Len(tmp) Then
If Not .Exists(tmp) Then .Add tmp, ""
End If
Next
Next
If .Count Then UniqueList = .Keys
End With
End Function
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "[COLOR=#ff0000]$G$9[/COLOR]" Then
Dim arr, rng As Range
Set rng = [COLOR=#0000cd]Range("D5:D1000")[/COLOR]
arr = UniqueList(rng)
If IsArray(arr) Then
With Target
.Validation.Delete
.Validation.Add 3, , , Join(arr, ",")
End With
End If
End If
End Sub
Thày ơi, e có thử nghiệm code với file đính kèm, nhưng không chạy được... e ko hiểu cơ chế nên chỉ copy code và thay đổi tham chiếu.. hjk1> Code trong Module:
2> Code sự kiện SelectionChangeMã:Function UniqueList(ParamArray sArray()) Dim Item, tmpArr, SubArr, tmp On Error Resume Next With CreateObject("Scripting.Dictionary") For Each SubArr In sArray tmpArr = SubArr If Not IsArray(tmpArr) Then tmpArr = Array(tmpArr) For Each Item In tmpArr tmp = CStr(Item) If Len(tmp) Then If Not .Exists(tmp) Then .Add tmp, "" End If Next Next If .Count Then UniqueList = .Keys End With End Function
Bạn nhập liệu gì cứ thây kệ, hể chọn vào cell G9 là list sẽ tự cập nhấtMã:Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "[COLOR=#ff0000]$G$9[/COLOR]" Then Dim arr, rng As Range Set rng = [COLOR=#0000cd]Range("D5:D1000")[/COLOR] arr = UniqueList(rng) If IsArray(arr) Then With Target .Validation.Delete .Validation.Add 3, , , Join(arr, ",") End With End If End If End Sub
Lưu ý:
- Chổ màu đỏ là cell chứa Validaiton
- Chổ màu xanh là vùng dữ liệu cần lấy list duy nhất
Cứ tùy biến 2 chổ đỏ xanh ấy thoải mái, những chổ khác cứ để nguyên
Thày ơi, e có thử nghiệm code với file đính kèm, nhưng không chạy được... e ko hiểu cơ chế nên chỉ copy code và thay đổi tham chiếu.. hjk
Mong thầy và mng chị dẫn!!!
Vậy mà code lại ghi:List duy nhất ở ô màu đỏ lấy tham chiếu từ name list bên sheet data
Set rng = Range("list")
Set rng = [COLOR=#ff0000]Sheets("data").[/COLOR]Range("list")
Cho e hỏi bổ đề chút là có thể tư động sort cái list (từ nhỏ đến lớn) trong sheet list đc ko ah?Trong file bạn nói rằng:
Vậy mà code lại ghi:
thì sao mà đượcMã:Set rng = Range("list")
Lý ra phải:
Chỉ rõ tên sheet nguồn đàng hoàngMã:Set rng = [COLOR=#ff0000]Sheets("data").[/COLOR]Range("list")
Cho e hỏi bổ đề chút là có thể tư động sort cái list (từ nhỏ đến lớn) trong sheet list đc ko ah?
Function Sort1DArray(ByVal Arr, Optional ByVal isText As Boolean = False, Optional ByVal isDESC As Boolean = False)
Dim sCommand As String
sCommand = "('" & Join(Arr, vbBack) & "').split('" & vbBack & "').sort("
If isText Then
sCommand = sCommand & ")"
Else
sCommand = sCommand & "function(a,b){return (a-b)})"
End If
If isDESC Then sCommand = sCommand & ".reverse()"
sCommand = sCommand & ".join('" & vbBack & "')"
With CreateObject("MSScriptControl.ScriptControl")
.Language = "JavaScript"
Sort1DArray = Split(.Eval(sCommand), vbBack)
End With
End Function
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$F$8" Then
Dim Arr, rng As Range
Set rng = Sheets("data").Range("list")
Arr = UniqueList(rng)
[COLOR=#ff0000][B] Arr = Sort1DArray(Arr, True, False)[/B][/COLOR]
If IsArray(Arr) Then
With Target
.Validation.Delete
.Validation.Add 3, , , Join(Arr, ",")
End With
End If
End If
End Sub
E có tham khảo tài liệu data validation in Excel của Thày PhanTuHuong trên GPE.
Mục "Tạo danh sách tham chiếu phụ thuộc"
E xin gửi theo vi dụ của thày PTH đính kèm.
Giả sử sắp tới Hà Nội thêm quận mới là quận Mỹ Đình, e có nhập tiếp vào danh sách mà mở rộng tham chiếu ở source list Quận/Huyện thì công thức này phá sản, hjk
Chẳng nhẽ mỗi lần thêm quân mới lại phải insert vào đúng phần Tỉnh/thành phố..??
Có giải pháp nào hoàn hảo hơn không ạh? Mong giúp đỡ
Mọi con đường đều dẫn đến VBA... Hì.. thày giúp em với ạh.Công thức này bắt buộc phải tuân thủ quy tắc: Sort dữ liệu
Vậy nên trường hợp muốn nhập liệu thoải mái (nhập tiếp vào danh sách mà không cần phải chèn đúng chổ), bạn phải dùng đến VBA
Có cách nào tạo một mảng ĐỘNG với tham chiếu điều kiện là Tỉnh/thành phố không ạh?Mọi con đường đều dẫn đến VBA... Hì.. thày giúp em với ạh.
Thật ra dạng bài này đã có rồi. Bạn xem topic này:Mọi con đường đều dẫn đến VBA... Hì.. thày giúp em với ạh.
E hỏi thêm chút, liệu list có thể đưa ra gợi ý về việc lựa chọn (như kiểu đánh hàm số trên excel)Thật ra dạng bài này đã có rồi. Bạn xem topic này:
http://www.giaiphapexcel.com/forum/...a-validation-có-điều-kiện&p=535067#post535067
Mọi thứ đã có sẵn, ta vẽ thêm "con mèo" vào là xong! (trong 30 giây)
E hỏi thêm chút, liệu list có thể đưa ra gợi ý về việc lựa chọn (như kiểu đánh hàm số trên excel)
Giả dụ: nhập chữ H ở list thì đưa ra lựa chọn như: Hà Nội, Hà Nam... Hà Tiên ???
Quả thật.. thầy đi GUỐC trong bụng học trò..Hình như bạn muốn nhập liệu nhanh!
Yêu cầu nhiều quá, đã đến lúc bạn nên nghĩ đến việc dùng UserForm thay vì Validation
UserForm kết hợp ComboBox và ListBox sẽ đáp ứng mọi thứ bạn cần (gần giống như tra từ điển)
Xem file mẫu đính kèm nhéQuả thật.. thầy đi GUỐC trong bụng học trò..
Chỉ có điều.. e cũng có nghiên cứu userform nhưng cứ như... khó khó là khó
Thầy ơi... This video is private ạhXem file mẫu đính kèm nhé
Hướng dẫn sơ qua cách dùng như clip dưới đây
[video=youtube;H1MGVQ31KcE]http://www.youtube.com/watch?v=H1MGVQ31KcE&feature=youtu.be[/video]
Bạn gõ vài ký tự vào ComboBox, lập tức Listbox sẽ lọc ra những dữ liệu liên quan
Cho phép nhập ký tự đại diện như *, ?...
(dữ liệu được lấy từ sheet MC nha)
----------------
Cách hàm đã viết sẵn cả rồi, giờ việc của bạn là:
- Thay đổi thiết kế của UserForm cho phù hợp
- Thay đổi vùng dữ liệu gốc cho phù hợp
vậy thôi
Thầy ơi... This video is private ạh
E có sử dụng code này của thày để lọc dữ liệu duy nhất, ở một số sheet khác thì không thấy có lỗi.. nhưng khi kích vào ô D2 của sheet này để chọn thì báo lỗi này, ko biết là lỗi j ạh?1> Code trong Module:
2> Code sự kiện SelectionChangeMã:Function UniqueList(ParamArray sArray()) Dim Item, tmpArr, SubArr, tmp On Error Resume Next With CreateObject("Scripting.Dictionary") For Each SubArr In sArray tmpArr = SubArr If Not IsArray(tmpArr) Then tmpArr = Array(tmpArr) For Each Item In tmpArr tmp = CStr(Item) If Len(tmp) Then If Not .Exists(tmp) Then .Add tmp, "" End If Next Next If .Count Then UniqueList = .Keys End With End Function
Bạn nhập liệu gì cứ thây kệ, hể chọn vào cell G9 là list sẽ tự cập nhấtMã:Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "[COLOR=#ff0000]$G$9[/COLOR]" Then Dim arr, rng As Range Set rng = [COLOR=#0000cd]Range("D5:D1000")[/COLOR] arr = UniqueList(rng) If IsArray(arr) Then With Target .Validation.Delete .Validation.Add 3, , , Join(arr, ",") End With End If End If End Sub
Lưu ý:
- Chổ màu đỏ là cell chứa Validaiton
- Chổ màu xanh là vùng dữ liệu cần lấy list duy nhất
Cứ tùy biến 2 chổ đỏ xanh ấy thoải mái, những chổ khác cứ để nguyên
E có sử dụng code này của thày để lọc dữ liệu duy nhất, ở một số sheet khác thì không thấy có lỗi.. nhưng khi kích vào ô D2 của sheet này để chọn thì báo lỗi này, ko biết là lỗi j ạh?
name "Phong_dm" là 204 bản ghi (liệu có quá dài)Đoán thôi: Có thể cái list mà bạn định cho vào Validation nó quá dài... dài đến mức quá tải
Chỉ đoán thôi chứ không có file cũng không biết được gì
Cho e hỏi bổ sung thêm chỗ này chút ạh.. liệu có thay cái target ( If Target.Address = "$G$9") này thành 1 mảng không, vì e muốn cái data vali này ko chỉ 1 cell mà ở một range..1> Code trong Module:
2> Code sự kiện SelectionChangeMã:Function UniqueList(ParamArray sArray()) Dim Item, tmpArr, SubArr, tmp On Error Resume Next With CreateObject("Scripting.Dictionary") For Each SubArr In sArray tmpArr = SubArr If Not IsArray(tmpArr) Then tmpArr = Array(tmpArr) For Each Item In tmpArr tmp = CStr(Item) If Len(tmp) Then If Not .Exists(tmp) Then .Add tmp, "" End If Next Next If .Count Then UniqueList = .Keys End With End Function
Bạn nhập liệu gì cứ thây kệ, hể chọn vào cell G9 là list sẽ tự cập nhấtMã:Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = [SIZE=3][B]"[COLOR=#ff0000]$G$9[/COLOR]"[/B][/SIZE] Then Dim arr, rng As Range Set rng = [COLOR=#0000cd]Range("D5:D1000")[/COLOR] arr = UniqueList(rng) If IsArray(arr) Then With Target .Validation.Delete .Validation.Add 3, , , Join(arr, ",") End With End If End If End Sub
Lưu ý:
- Chổ màu đỏ là cell chứa Validaiton
- Chổ màu xanh là vùng dữ liệu cần lấy list duy nhất
Cứ tùy biến 2 chổ đỏ xanh ấy thoải mái, những chổ khác cứ để nguyên
Cho e hỏi bổ sung thêm chỗ này chút ạh.. liệu có thay cái target ( If Target.Address = "$G$9") này thành 1 mảng không, vì e muốn cái data vali này ko chỉ 1 cell mà ở một range..
E có mạnh dạn thay bằng cái này If Target.Address = "G9:G2000" Then mà ko có được
tks
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[COLOR=#ff0000]If Not Intersect(Range("G9:G2000"), Target) Is Nothing Then[/COLOR]
Dim arr, rng As Range
Set rng = Sheets("data").Range("list")
arr = UniqueList(rng)
arr = Sort1DArray(arr, True, False)
If IsArray(arr) Then
With [COLOR=#ff0000]Intersect(Range("G9:G2000"), Target)[/COLOR]
.Validation.Delete
.Validation.Add 3, , , Join(arr, ",")
End With
End If
End If
End Sub
E có sửa lại thì báo lỗi nàyTrật lất!
Vầy mới đúng:
Mã:Private Sub Worksheet_SelectionChange(ByVal Target As Range) [COLOR=#ff0000]If Not Intersect(Range("G9:G2000"), Target) Is Nothing Then[/COLOR] Dim arr, rng As Range Set rng = Sheets("data").Range("list") arr = UniqueList(rng) arr = Sort1DArray(arr, True, False) If IsArray(arr) Then With [COLOR=#ff0000]Intersect(Range("G9:G2000"), Target)[/COLOR] .Validation.Delete .Validation.Add 3, , , Join(arr, ",") End With End If End If End Sub
thầy cho e hỏi có cách nào để sử dụng được file này trên office2003 không ạKiểm tra lại nha!
Tất cả video tôi upload lên youtube đều là Public