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,303
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.
 
Web KT

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

Back
Top Bottom