Tạo danh sách động dùng cho Validation (1 người xem)

Liên hệ QC

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

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,902
Được thích
5,306
Nghề nghiệp
Kinh doanh các mặt hàng văn phòng phẩm
Khi nhập dữ liệu, bạn muốn rằng nếu nhập một ký tự nào đó thì sẽ sổ xuống cho ta một list danh sách bắt đầu hay chứa đựng ký tự này và danh sách này phải được sắp xếp theo thứ tự tăng dần để dễ tìm.
Mình xin gửi 2 file VD để minh họa, các bạn tham khảo nha.
Do không phải là VBA nên PP này phải dùng đến 1 cột phụ
 

File đính kèm

cảm ơn bạn nhé

nếu được bạn có thể giúp mình file sau được không
 

File đính kèm

Khi nhập dữ liệu, bạn muốn rằng nếu nhập một ký tự nào đó thì sẽ sổ xuống cho ta một list danh sách bắt đầu hay chứa đựng ký tự này và danh sách này phải được sắp xếp theo thứ tự tăng dần để dễ tìm.
Mình xin gửi 2 file VD để minh họa, các bạn tham khảo nha.
Do không phải là VBA nên PP này phải dùng đến 1 cột phụ
Cảm ơn anh rất nhiều, em áp dụng ví dụ của anh làm rất tốt, nhưng em ít khi dùng chuột lắm có cách nào khi ta gõ ký tự đầu của mã SP sau đó dùng liền phím mũi tên trên bàn phím di chuyển để chọn không. thứ hai là dùng Validation có cách nào thể hiện cả phần tên tương ứng với mã SP không.
 
Cảm ơn anh rất nhiều, em áp dụng ví dụ của anh làm rất tốt, nhưng em ít khi dùng chuột lắm có cách nào khi ta gõ ký tự đầu của mã SP sau đó dùng liền phím mũi tên trên bàn phím di chuyển để chọn không. thứ hai là dùng Validation có cách nào thể hiện cả phần tên tương ứng với mã SP không.

BẠn vào ô nào đó, gõ vào ô ký tự nào đó hay bấm F2. Xong bấm Alt+Mũi tên xuống để xem list.
Nếu muốn xem >=2 cột thì chì có cách dùng Combobox kết hợp với VBA

Gửi các bạn thêm 1 cách về sử dụng Validation kết hợp với VBA. Vừa trích lọc danh sách du nhất, vừa Sort theo thứ tự.

Code này sử dụng cho cột A, Dữ liệu trong Validation sẽ được cập nhật khi cột A thêm dữ liệu mới.

PHP:
Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Target.Column > 1 Or (Target.Rows.Count + Target.Columns.Count) > 2 Then Exit Sub
[IV:IV].ClearContents
Range("A1:A" & [A65536].End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, _
                                        CopyToRange:=[IV1], Unique:=True
If [IV1] = [IV2] Then [IV1].ClearContents
[IV:IV].Sort Key1:=[IV1], Order1:=xlAscending
With Target.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
            Operator:=xlBetween, Formula1:="=" & Range([IV1], [IV1].End(xlDown)).Address
    .IgnoreBlank = True
    .InCellDropdown = True
    .ShowInput = True
    .ShowInput = False
    .ShowError = False
End With
Application.EnableEvents = True
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Giúp tạo nút sort khi cập nhật mã SP mới

Diễn đàn giúp mình tạo một nút sort trên bảng tính EX, khi ta cập nhật mã SP mới xong chỉ cần click chọn nút này thì bảng tính tự động sort theo thứ tự.
 
Diễn đàn giúp mình tạo một nút sort trên bảng tính EX, khi ta cập nhật mã SP mới xong chỉ cần click chọn nút này thì bảng tính tự động sort theo thứ tự.
Em xem code va tạo 1 command button để chạy code.
PHP:
Option Explicit
Sub SortDM()
'Vi du nay danh muc hang hoa nam o sheet1, tieu de nam o dong 1 va sort theo cot 1
Dim Data As Range
Application.ScreenUpdating = False
With Sheet1
    Set Data = .[A1].CurrentRegion
    If Data.Rows.Count = 1 Then Exit Sub
    With Data 'Co the thay A1 la B1
        .Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlGuess, Key2:=Range("B1") _
        , Order2:=xlAscending
    End With
End With
Set Data = Nothing
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Hôm nay làm cho, lần sau phải nghiên cứu, mới hiểu và nhớ nhé!

anh ThuNghi ơi, cam ơn anh đã giúp em nhưng file anh đính kèm trường hợp nếu em thêm danh mục mới bắt đầu bằng AB chẳng hạn thì khi click vào command thì danh mục mới này lại nhảy lên trên hàng tiêu đề.
anh xem lại giúp em nha.
với lại trường hợp bảng tình EX có 12 cột nhưng em chỉ sort từ cột B đền cột H thôi, các cột sau nó không thay đổi thì sửa như thế nào.
 
anh ThuNghi ơi, cam ơn anh đã giúp em nhưng file anh đính kèm trường hợp nếu em thêm danh mục mới bắt đầu bằng AB chẳng hạn thì khi click vào command thì danh mục mới này lại nhảy lên trên hàng tiêu đề.
anh xem lại giúp em nha.
với lại trường hợp bảng tình EX có 12 cột nhưng em chỉ sort từ cột B đền cột H thôi, các cột sau nó không thay đổi thì sửa như thế nào.
Sorry, em nhấn Alt F11 vào module thay câu sau
Header:=xlGuess
bằng
Header:=xlYes
Còn Sheet DMHH em muốn như thế nào, em muốn cố định từ cột mấy đến cột mấy.
Set Data = .Range(Cells(1, 1), Cells(ERow, 12))
Em có thể thay cột thứ mấy ->cột mấy (Bold) trong code.
Còn câu sau:
.Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlYes, Key2:=.Range("B1"), Order2:=xlAscending
Em co thể thay A1, B1 bằng tiêu thức cột cần sort thay C1, D1.
Key1, 2...: là ưu tiên 1, 2...
Xem file.
 

File đính kèm

chuyển đổi qua lại giữa worksheet và Form

mình muốn chuyển đổi qua lại giữa worksheet và Form thông qua commandbuton. xem file đính kèm và giúp mình nhé
 

File đính kèm

Mình có tình huống như thế này, mong các bạn giúp:
Giả sử mình có ô A1 và vùng B1:B10
Làm thế nào dùng Validation để khi gõ vào A1 số 0 thì ở vùng B1:B10 chỉ cho nhập các số từ 0 đến 100.
Còn khi gõ vào A1 số 1 thì ở vùng B1:B10 chỉ cho nhập các chuỗi kí tự định sẵn.
Tức là trường hợp này ta dùng Allow là Number, trường hợp khác ta dùng Allow là List.
 
Mình có tình huống như thế này, mong các bạn giúp:
Giả sử mình có ô A1 và vùng B1:B10
Làm thế nào dùng Validation để khi gõ vào A1 số 0 thì ở vùng B1:B10 chỉ cho nhập các số từ 0 đến 100.
Còn khi gõ vào A1 số 1 thì ở vùng B1:B10 chỉ cho nhập các chuỗi kí tự định sẵn.
Tức là trường hợp này ta dùng Allow là Number, trường hợp khác ta dùng Allow là List.
bạn tạo 1 list từ 0->100 đặt tên list này là so. tạo 1 list gồm chuỗi kí tự định sẵn, đặt tên list này là kitu
bạn chọn B1:B10, vào Validation trong Allow chọn List, trong Source bạn nhập công thức
=IF($A$1=0,so,kitu)
 
Mình có tình huống như thế này, mong các bạn giúp:
Giả sử mình có ô A1 và vùng B1:B10
Làm thế nào dùng Validation để khi gõ vào A1 số 0 thì ở vùng B1:B10 chỉ cho nhập các số từ 0 đến 100.
Còn khi gõ vào A1 số 1 thì ở vùng B1:B10 chỉ cho nhập các chuỗi kí tự định sẵn.
Tức là trường hợp này ta dùng Allow là Number, trường hợp khác ta dùng Allow là List.

Bạn xem file đính kèm nhé!
- Đầu tiên bạn đặt hai Name cho hai danh mục của bạn.
List1: danh sách số từ {1-->100}
List2: danh sách các chuỗi ký tự định sẵn

- Sau đó bạn chọn (chiếu sáng) vùng B1:B10 rồi vào Data/Validation, chọn Allow là List, trong hộp Source bạn gõ công thức sau:
PHP:
=IF($A$1=0,List1,List2)
 

File đính kèm

Cảm ơn các bạn rất nhiều mình làm được rồi.
Mình lại còn một thắc mắc nữa không biết làm như thế nào, đó là giã sử ta cần tính ở ô C1 =A1+B1, khi đó tổng của A1 và B1 sẽ hiện ở C1, đó là trường hợp A1 và B2 là kiểu số, nếu A1 và B1 không phải là số mà là text thì có cách nào ở C1 hiện lên một danh sách để ta chọn lấy các nội dung trong danh sách định sẵn, giống như trường hợp ta làm với Validation khi đó nó xổ xuống cho ta một danh sách để chọn không?
Nghĩa là nếu A1 và B1 là số thì ở C1 nó sẽ tính tổng của A1 và B1, còn không nó sẽ xổ xuống một danh sách để cho ta tự chọn.
Mong các bạn giúp đỡ.
 
Mình lại còn một thắc mắc nữa không biết làm như thế nào, đó là giã sử ta cần tính ở ô C1 =A1+B1, khi đó tổng của A1 và B1 sẽ hiện ở C1, đó là trường hợp A1 và B2 là kiểu số, nếu A1 và B1 không phải là số mà là text thì có cách nào ở C1 hiện lên một danh sách để ta chọn lấy các nội dung trong danh sách định sẵn, giống như trường hợp ta làm với Validation khi đó nó xổ xuống cho ta một danh sách để chọn không?
Nghĩa là nếu A1 và B1 là số thì ở C1 nó sẽ tính tổng của A1 và B1, còn không nó sẽ xổ xuống một danh sách để cho ta tự chọn.
Tóm lại, yêu cầu của bạn là như thế này:
- Nếu Cột A cột B đều là số thì cột C sẽ lập công thức Sum cột A và cột B
- Nếu cột A hoặc cột B không phải là số thỉ Cột C sẽ có một validation với danh sổ xuống để chọn.

Yêu cầu này không thể làm bằng công thức bình thường được! Phải dùng VBA thôi! Nếu bạn đồng ý thì xem file đính kèm! Gõ cái gì đó vào cột A và cột B xem thử!
 

File đính kèm

Cảm ơn bạn nhiều, đúng ý của mình rồi.
Một lần nữa cảm ơn ca_dafi
 
Quả thật mình mới tành về VBA nên cũng không rõ ý nghĩa của các câu lệnh.
Nếu bây giờ mình muốn ở C1 không phải là =A1+B1 mà là =round((A1+B1)/3,1)
thì ở dòng trong file ca_dafi.xlx:
Cells(Target.Row, 3).Value = "=" & Target.Address & "+" & _
Target.Offset(, myRef).Address

phải viết lại như thế nào?
Cảm ơn các bạn trước.
 
Quả thật mình mới tành về VBA nên cũng không rõ ý nghĩa của các câu lệnh.
Nếu bây giờ mình muốn ở C1 không phải là =A1+B1 mà là =round((A1+B1)/3,1)
thì ở dòng trong file ca_dafi.xlx:
Cells(Target.Row, 3).Value = "=" & Target.Address & "+" & _
Target.Offset(, myRef).Address

phải viết lại như thế nào?
Cảm ơn các bạn trước.
Thử sửa lại thế này xem:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim MyRef As Long
  If Not Intersect(Target, [A1:B24]) Is Nothing Then
    MyRef = Sgn(1.5 - Target.Column)
    If Target.Value = "" Or Target.Offset(, MyRef).Value = "" Then Exit Sub
    If IsNumeric(Target) And IsNumeric(Target.Offset(, MyRef)) Then
        With Target.Offset(, (MyRef - 1) / 2 + 2)
          .Validation.Delete
          .Value = "=ROUND((" & .Offset(, -2).Address & "+" & .Offset(, -1).Address & ")/3,1)"
        End With
    Else
        With Target.Offset(, (MyRef - 1) / 2 + 2)
          .ClearContents
          .Validation.Delete
          .Validation.Add Type:=xlValidateList, Formula1:="=Data"
        End With
    End If
  End If
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Lại làm phiền các bạn tiếp. Mình đã làm theo các hướng dẫn và nói chung đã thoả mãn các yêu cầu của mình. Thế nhưng khi mình đặt mật khẩu cho sheet thì chương trình lại báo lỗi ở dòng: .Validation.Add Type:=xlValidateList, Formula1:="=Data"
Nếu bỏ mật khẩu bảo vệ cho sheet thì không có việc gì xảy ra, vậy liệu có cách nào vừa bảo vệ cho sheet mà chương trình vẫn chạy tốt không?
Cảm ơn các bạn trước.
 
Lại làm phiền các bạn tiếp. Mình đã làm theo các hướng dẫn và nói chung đã thoả mãn các yêu cầu của mình. Thế nhưng khi mình đặt mật khẩu cho sheet thì chương trình lại báo lỗi ở dòng: .Validation.Add Type:=xlValidateList, Formula1:="=Data"
Nếu bỏ mật khẩu bảo vệ cho sheet thì không có việc gì xảy ra, vậy liệu có cách nào vừa bảo vệ cho sheet mà chương trình vẫn chạy tốt không?
Cảm ơn các bạn trước.
Tôi đã thử và thấy hình như không có cách bạn à.... Khi protect sheet sẽ không làm việc được với Validation ---> Đành vậy!
Giãi pháp tôi hình dung sẽ là: Mỗi khi chọn vào vùng nhập liệu sẽ Unprotect sheet, nhập xong, chọn ngoài vùng này thì Protect lại ---> Nhưng.. rườm rà quá đi
 
Như vậy có mang tính thiếu chuyên nghiệp quá không, mình nghĩ không việc gì là không thể, mình không tìm ra cách mới xin ý kiến nhưng mình tin vẫn có cách khắc phục
Cảm ơn bạn đã góp ý
 
cảm ơn mấy bạn nhìu.. mình đang gặp rắc rối với mấy cái này..
 
Xin bạn chủ topic xem và hướng dẫn thêm. Xin cám ơn nhiều!
 

File đính kèm

Cho mình hỏi muốn tra cứu chéo giữ 2 cột list trong Validation thì phải làm thế nào? Thanks
 
BẠn vào ô nào đó, gõ vào ô ký tự nào đó hay bấm F2. Xong bấm Alt+Mũi tên xuống để xem list.
Nếu muốn xem >=2 cột thì chì có cách dùng Combobox kết hợp với VBA

Anh ơi, em ấn F2, rồi Alt + Mũi tên xuống, thì xổ ra cột trắng chứ không có dữ liệu. Như thế là thế nào ạ? Anh giúp em với nhá :-=
 
Khi nhập dữ liệu, bạn muốn rằng nếu nhập một ký tự nào đó thì sẽ sổ xuống cho ta một list danh sách bắt đầu hay chứa đựng ký tự này và danh sách này phải được sắp xếp theo thứ tự tăng dần để dễ tìm.
Mình xin gửi 2 file VD để minh họa, các bạn tham khảo nha.
Do không phải là VBA nên PP này phải dùng đến 1 cột phụ
-----------
Bạn có thể viết bằng code VBA được không ? Việc này rất cần trong việc tìm danh sách khách hàng và đặc biệt tìm tên vật tư ( vật tư rất nhiều chủng loại, ....) .
Cám ơn
 
Bác hướng dẫn từng bước được không nhỉ? Đưa mỗi file ví dụ em chịu chẳng biết làm thế nào.
 
Sorry các pác, e là thành viên mới , e thấy cách data/validation của pác hoangdanh282vn hay quá nhưng không hiểu công thức này, nhờ pác hoangdanh282vn chỉ dùm e.

=IF(OR(ISNA(VLOOKUP(G2,OFFSET(MaSp,,,,2),2,0)),G2=""),"",VLOOKUP(G2,OFFSET(MaSp,,,,2),2,0))

E xia xìa pác nhìu
 

Bài viết mới nhất

Back
Top Bottom