Tạo hộp chọn validation hoặc combo box

Liên hệ QC

salam

Thành viên gắn bó
Tham gia
4/11/06
Bài viết
1,945
Được thích
1,896
Giới tính
Nam
Nghề nghiệp
Accountant
Em loay hoay mãi mà không làm được việ tạo list chọn validation hay combo box theo một danh sách. Trong danh sách có nhiều mã trùng, ô trống ... em muốn tạo một list chọn cho danh sách đó mà mỗi mã chỉ có một lần hiển thị trong list của validation hoặc combo box. Bác nào biết giúp em với. (không dùng cột phụ).
VD:
cột A
A
b
c
a

c
b


d
f
f
m
Trong DS chọn chỉ có:
A
b
c
d
f
m

Cám ơn các Bác.
 
Dùng cột phụ có sao đâu Salam?
Thực ra 1 bảng mã là nội dug chính của cấu trúc dữ liệu mà. Người ta còn tạo nhiều bảng mã nữa chứ: mã mặt hàng, mã nhân viên, mã khách hàng, mã tài khoản, mã tiền tệ....
Mỗi bảng mã gồm ít nhất 2 trường: Mã (không trùng), tên, ngoài ra thêm trường phụ tùy theo, như đv tính, địa chỉ, MST ....
Mục đích là tổ chức dữ liệu cho có khoa học, và dễ dàng cho việc nhập liệu:
- dùng validation giới hạn dữ liệu nhập theo list
- chỉ nhập mã, các thông tin khác tự hiện lên
- ....

Các phần mềm đều tổ chức thế cả
Thân
 
Cám ơn Bác Mỹ. Ở đây em chỉ muốn khi chọn DS nó đã lọc những Mã trùng rồi => DS nhìn nó ngắn, không rối. Nếu lọc mã không trùng ra một cột sau đó gán cho validation hoặc combo box thì em thử được rồi. (dùng cách lọc của Bác Tuấn, Okbab ...). Giờ em muốn xem có cách nào mà bỏ được cột phụ đó mà.
Cám ơn Bác.
 
Ừ thì đừng nghĩ nó là cột phụ, cho nó là cột chính đi.
Thực ra các bảng mã phải được tạo ra trước tiên, sau đó mới nhập liệu mới bảo đảm dữ liệu chính xác, không bị tình trạng sau:
Giả sử chỉ có 5 mặt hàng có mã là: VLA001, VLA002, VLA003, VLB001, VLB002
Nếu không ràng buộc từ đầu, người nhập liệu khi thì đúng VLA002, khi sai VLA0002 (3 số 0 thay vì 2), thì sau này khi dùng biện pháp lọc sẽ thành ra 6 hoặc nhiều hơn, không chính xác: 1 mặt hàng hiện lên báo cáo 2 dòng. Nếu không biết hoặc kiểm tra không xuể do dữ liệu nhiều vài ngàn dòng, khi sếp hỏi hàng tồn, mình sẽ báo cáo sai.

Nguy hiểm hơn là công nợ 1 khách hàng nằm ở 2 nơi, không biết đường mà đòi, sếp bắt mình đền.
 
Lần chỉnh sửa cuối:
Bạn cũng có thể dùng advance filter lọc ra sau đó đưa dữ liệu vào vali
 
Em muốn tạo một list lựa chọn có thể thay đổi được theo một tùy chọn khác, các bác xem file đính kèm rồi tư vấn giúp em với nhé!
 

File đính kèm

  • Data.xls
    40.5 KB · Đọc: 148
Bạn đặt 2 name cho 2 list ở 2 cột A và B, thí dụ tên là DSA và DSB
Trong validation của D7 ghi:
=IF($D$3=1;DSA;DSB)
 
Có thể dùng Offset cho đơn giản hơn.. với dử liệu của bạn chỉ cần đặt công thức cho Validation là:
Mã:
=OFFSET($A$5:$A$8,,$D$3-1)
ANH TUẤN
 
anhtuan1066 đã viết:
Tôi đã nghiên cứu vụ này lâu rồi nhưng cho đến nay có thể nói là KO CÓ CÁCH... tương lai thì.. chưa biêt...
ANH TUẤN

- Đúng là vấn đề nay thật khó, mình đã nghĩ mãi mà vẫn chưa ra,mình cũng đã từng gặp trường hợp là trong cột mã hàng đã nhập liệu có nhiều mã trùng nhau, mình muốn lọc ra danh sách duy nhất và đặt tên để dùng Valida cho tiện, nếu dùng cột phụ thì dễ rồi, dùng name thì hơi chua và đến giờ vẫn chưa có cách, mình thử kết hợp những hàm mãng và điều kiện thử xem, phải tìm ra chứ BácTuấn nhỉ
- Ở đây không phải là không có cái hay khi làm việc này.
VD nếu list danh sách mã hàng khoảng 10,000mã, nhưng nhưng vùng dữ liệu(khoảng 50,000 dòng)chỉ có khoảng 100 mã xuất hiện thôi thì việc này là rất hữu ích khi trích lọc ra list mã này và dùng cho Vali bên sheet báo cáo.(nếu ko có thì bảng chọn dài dài..kiếm mệt luôn)
 
hoangdanh282vn đã viết:
- Đúng là vấn đề nay thật khó, mình đã nghĩ mãi mà vẫn chưa ra,mình cũng đã từng gặp trường hợp là trong cột mã hàng đã nhập liệu có nhiều mã trùng nhau, mình muốn lọc ra danh sách duy nhất và đặt tên để dùng Valida cho tiện, nếu dùng cột phụ thì dễ rồi, dùng name thì hơi chua và đến giờ vẫn chưa có cách, mình thử kết hợp những hàm mãng và điều kiện thử xem, phải tìm ra chứ BácTuấn nhỉ
- Ở đây không phải là không có cái hay khi làm việc này.
VD nếu list danh sách mã hàng khoảng 10,000mã, nhưng nhưng vùng dữ liệu(khoảng 50,000 dòng)chỉ có khoảng 100 mã xuất hiện thôi thì việc này là rất hữu ích khi trích lọc ra list mã này và dùng cho Vali bên sheet báo cáo.(nếu ko có thì bảng chọn dài dài..kiếm mệt luôn)
Tôi nghĩ là ko có cách thật đấy! Sau quá trình nghiên cứu tôi phát hiện Validation list hoặc ComboBox list chỉ chấp nhận list là 1 RANGE chứ ko chấp nhận nó là 1 ARRAY...
Bạn có thể làm 1 cuộc thí nghiệm đơn giản:
1> Đặt name TEST = ROW($1:$10)... đây là 1 array với các phần tử từ 1 đến 10, rất đơn giản, đúng ko?
2> Dùng name TEST này gán cho Validation list xem thử nó nói cái gì
Để giãi quyết nhanh chóng tôi nghĩ chỉ có thể dùng Advanced Filter lọc ra 1 list duy nhất rồi dùng nó làm list cho Validation hoặc ComboBox thôi..
Tóm lại, đàng nào cũng phải có 1 RANGE HIỆN HỬU
Bạn tham khảo bài viết này nhé:
http://www.giaiphapexcel.com/forum/showthread.php?t=6118
ANH TUẤN
 
anhtuan1066 đã viết:
Tôi đã nghiên cứu vụ này lâu rồi nhưng cho đến nay có thể nói là KO CÓ CÁCH... tương lai thì.. chưa biêt...
ANH TUẤN
Bác thử xem nhé!

Vì không có thời gian nên em chưa sắp xếp nó theo tăng giảm được, chắc cái này các bác tự phát triển thêm được.

PHP:
Sub DanhSach()
    Dim HC As Long, i As Long, i2 As Long
    Dim Ma As String
    Dim Tim As Boolean
    With S01
        .H_CB01.Clear
        HC = .Range("A65000").End(xlUp).Row
        If HC < 2 Then Exit Sub
        For i = 1 To HC
            Ma = .Range("A" & i).Value
            If Ma <> "" Then
                If i = 1 Then
                    .H_CB01.AddItem Ma
                Else
                    Tim = False
                    For i2 = 1 To .H_CB01.ListCount
                        If .H_CB01.List(i2 - 1) = Ma Then Tim = True
                    Next
                    If Tim = False Then .H_CB01.AddItem Ma
                End If
            End If
        Next
    End With
End Sub


Thân!
 

File đính kèm

  • Tao Danh Sach CB.xls
    32 KB · Đọc: 75
Ôi.. thế thì cũng thua... Chưa chắc gì cái danh sách ấy có thể dùng cho Validation dc đâu... Bắp thử xem!
Còn nữa... Theo như cách nói của Salam thì tôi đoán bạn ấy đang nói về ComboBox của Form đấy chứ... Món ComboBox này và Validation có cách dùng khá giống nhau... Ko biết tôi đoán thế đúng ko nữa?
ANH TUẤN
 
anhtuan1066 đã viết:
Còn nữa... Theo như cách nói của Salam thì tôi đoán bạn ấy đang nói về ComboBox của Form đấy chứ... Món ComboBox này và Validation có cách dùng khá giống nhau... Ko biết tôi đoán thế đúng ko nữa?
ANH TUẤN
Bác nói đúng rồi combo box của form không phải của control.
 
anhtuan1066 đã viết:
Ôi.. thế thì cũng thua... Chưa chắc gì cái danh sách ấy có thể dùng cho Validation dc đâu... Bắp thử xem!
Còn nữa... Theo như cách nói của Salam thì tôi đoán bạn ấy đang nói về ComboBox của Form đấy chứ... Món ComboBox này và Validation có cách dùng khá giống nhau... Ko biết tôi đoán thế đúng ko nữa?
ANH TUẤN
Các thuộc tính của Combobox trong Control và Form cũng có các thuộc tính giống nhau, vì vậy thay vì
S01.H_CB01
Thì thay bởi :
Me.H_CB01 hoặc FrTongHop.H_CB01
Cứ theo nuyên lý đó mà làm là OK bác ạ.

Còn việc Validation thì Validation nhận danh sách theo kiểu 1 chuỗi mà dấu phân cách là dấu List separator.

Tuy nhiên khi thử đưa vào thì nó lại chỉ cho là 1 chuỗi chứ không phải 1 danh sách, ta lại phải mở Data/Validation một lần nữa (chỉ mở thôi, chẳng làm gì cả), thì nó mới chấp nhận là danh sách! Kỳ lạ thật!
PHP:
With Sheet1.Range("E6:E20").Validation
         .Delete
        .Add Type:=xlValidateList, Formula1:="A;B;C"
End With
Nhưng do độ dài chuỗi là có giới hạn (hình như là 255) nên việc đưa danh sách vào cũng không được tốt lắm.

Thân!
 
Bắp thử sửa lại code để dùng cho ComboBox Forms xem! Tôi làm ko dc!... Còn Validation thì gần như là bó bột luôn rồi... Rồi cũng có nghĩ qua vụ tự đưa vào Validation theo kiểu chuổi... nhưng như thế ko khả thi
ANH TUẤN
 
Dung indirect trong validation

Ban dat Name nhu sau:
Mot = A5:A8
Hai = B5:B8
Tai ô D3 Bạn đaựt Validation là chọn giá trị Mot và Hai
Tại ô D7 bạn đặt Validation là =INDIRECT(D3)
Chúc bạn thành công
 
anhtuan1066 đã viết:
Bắp thử sửa lại code để dùng cho ComboBox Forms xem! Tôi làm ko dc!... Còn Validation thì gần như là bó bột luôn rồi... Rồi cũng có nghĩ qua vụ tự đưa vào Validation theo kiểu chuổi... nhưng như thế ko khả thi
ANH TUẤN

Bác thật là . . !! Híc híc!
Bác tham khảo nhé:


Còn vụ Validation xem chuyển qua name nhưng cũng hạn chế thôi ạ
Thân!
 

File đính kèm

  • Tao Danh Sach CB02.xls
    41.5 KB · Đọc: 130
Ai da... ko phải vậy Bắp ơi... Ý tôi và Salam là muốn cho danh sách này vào ComboBox thuộc thanh Forms (là thanh Forms chứ ko phải Forms!!!)
ANH TUẤN
 
anhtuan1066 đã viết:
Ai da... ko phải vậy Bắp ơi... Ý tôi và Salam là muốn cho danh sách này vào ComboBox thuộc thanh Forms (là thanh Forms chứ ko phải Forms!!!)
ANH TUẤN
Khôngđược bác ạ, Cobo này chỉ làm việc với Range (vùng) thôi.

Thân!
 
Web KT
Back
Top Bottom