2013-04-26 30 views
5

Ok, vì vậy, tôi hiện có một menu thả xuống được điền từ một dải ô trên một trang tính riêng biệt.EXCEL VBA - Tạo menu thả xuống động dựa trên phạm vi ô và chuỗi

Tôi muốn có thể giảm giá trị trong menu thả xuống chỉ bằng cách thêm giá trị có giá trị văn bản từ ô khác trong mỗi văn bản giá trị.

ví dụ: Ô A1 nói 'bảng' di động A2 là thả xuống kéo trong các giá trị từ dãy Phạm vi có 'bảng', 'bảng lớn', 'phân'

Hiện nay trình đơn thả xuống sẽ mang lại tất cả các giá trị. Trong trường hợp này, tôi muốn nó mang đến 'bàn' và 'bàn lớn' vì cả hai đều có 'bàn' trong đó.

một ví dụ về tập tin của tôi có thể được tìm thấy ở đây http://www.filedropper.com/example_1

Xin giúp .. Tôi xé tóc của tôi ra!

Cảm ơn Mike

+1

mã của bạn ở đâu? những gì bạn có cho đến nay? – Juliusz

+0

Vui lòng kiểm tra http://stackoverflow.com/questions/how-to-ask và một yêu thích cá nhân của tôi: http://mattgemmell.com/2008/12/08/what-have-you-tried –

+0

@K_B I nghĩ rằng đó là một chút không công bằng khi tôi đã tìm kiếm các câu hỏi khác về điều này và tất cả chúng dường như có liên quan không hoàn toàn là những gì tôi đang tìm kiếm. Tôi không thể thấy bất kỳ tùy chọn để tải lên một tập tin trên đây vì vậy tôi đã viết ra một ví dụ trong câu hỏi của tôi. Nếu bạn có thể cho tôi biết làm thế nào tôi sẽ tải lên một bảng tính excel trên đây thì tôi có thể làm điều đó cho bạn. –

Trả lời

1

Dưới đây là một cách để làm việc đó mà không cần VBA:

(tất cả các hướng dẫn để được thực hiện trên bảng với danh sách các mặt hàng trừ khi có quy định khác): enter image description here

  1. Tìm kiếm văn bản được cung cấp. Trong C2, nhập =NOT(ISERROR(SEARCH('Choose Items'!$A$2,A2))) và sao chép xuống
  2. hits Đếm trong D2: =IF(C2,1,0), trong D3: =IF(C3,D2+1,D2) - sao chép xuống
  3. Tạo danh sách động: ở F2: F9, đặt những con số 1-8. Trong G2, hãy sử dụng công thức này: =IFERROR(INDEX($A$2:$A$9,MATCH(F2,$D$2:$D$9,0)),IF(F2=1,"No match","")) và sao chép xuống.
  4. Tạo một loạt tên năng động - trong Name Manager (thức ->Name Manager), chèn một cái tên mới ItemsDynamic và cung cấp =OFFSET(Items!$G$2:$G$9,0,0,MAX(Items!$D$2:$D$9,1),1) như công thức.
  5. Sử dụng mới ItemsDynamic như nguồn gốc của danh sách thả xuống của bạn trong lĩnh vực xác nhận

Xong! Kiểm tra this file để biết giải pháp.

2

Đây là câu trả lời đơn giản hơn.

Nhóm các mục đầu tiên trong trang 'Mục' trong cột trợ giúp, nói Cột 'C' bằng công thức (cho C2) và điền vào.

=IFERROR(RIGHT($A2,LEN($A2)-FIND(" ",$A2)),$A2) 

Bây giờ trong bảng 'Chọn mục', ở ô B2, sử dụng sau đây như là nguồn danh sách xác nhận của -

=OFFSET(Items!$A$1,MATCH('Choose Items'!$A2,Items!$C$2:$C$10,0),,COUNTIF(Items!$C$2:$C$10,'Choose Items'!$A2),) 

Bạn có thể điền xuống để kéo dài tuổi xác nhận các hàng khác của cột ' B '

Trong trường hợp dữ liệu của bạn trong trang' Mục 'cần được mở rộng thành hàng vượt quá 10, thay đổi một cách thích hợp phạm vi chức năng bù của đối sánh và các hàm đếm để bao gồm toàn bộ dữ liệu (sau khi nhóm trong cột 'C' như đã thảo luận trước đó).

Đảm bảo danh sách trong trang 'Mục' được sắp xếp trên cột trợ giúp (Tăng dần hoặc Giảm dần), là cột 'C' trong trường hợp này.