Thách đố đây! Dùng ComboBox ko cần đến VBA! (1 người xem)

Liên hệ QC

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

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Trong file đính kèm là dùng ComboBox đễ trích dử liệu ra 1 cell bất kỳ từ 1 danh sách cho trước... Việc này quá bình thường nếu sử dụng VBA!
Vậy xin "thách đố": Cũng với danh sách ấy, với ComboBox ấy nhưng nếu ko dùng VBA thì có thể làm cho ComboBox có tính năng tương tự như thế ko? Hi... hi...
Nói "thách đố" cho có vẽ "đao to búa lớn" thôi, thực ra là cùng trao đỗi và học hỏi.. Xin các bạn hưởng ứng!
ANH TUẤN
 

File đính kèm

Có thưởng gì không anh? Anh nói luôn phần thưởng cho hấp dẫn ...
 
Hi... hi... Thưởng gì đây ta.. Chưa biết nữa... mà nè... các cao thủ từ từ thôi nha.. nghĩ ra dc cũng đừng đưa lên vội... có thể gợi ý gì đó cũng dc nhưng đừng cho kết quả sớm quá... Đễ các bạn mới học hỏi nữa...
ANH TUẤN
 
Thách đố thêm 1 chiêu nữa: Đầu tiên cột H đang trống, bạn chọn vào H1 rồi chọn ComboBox, nó sẽ chèn dử liệu vào H1... tiếp tục chọn ComboBox, nó chèn dử liệu vào H2... tiếp tục nữa nó chèn vào H3... vân vân.. gần giống với lệnh OFFSET(1,0).SELECT trong VBA...
Ha.. ha.. ha...
Phần thưởng là 1 cái card dt 100 ngàn, thời hạn giãi bài là từ bây giờ đến hết ngày mai... các bạn thấy sao?
ANH TUẤN
 
anhtuan1066 đã viết:
Phần thưởng là 1 cái card dt 100 ngàn, thời hạn giãi bài là từ bây giờ đến hết ngày mai... các bạn thấy sao?
ANH TUẤN

Anh ơi, phần thưởng này cũng khá hay nhưng vật chất quá!. Em gợi ý chút xíu nha:

- Nếu giải được bài, CN này sẽ được Mr anhtuan1066 mời CF ở BH.
- Nếu giải được bài, CN này Mr anhtuan1066 sẽ offline cùng với các bạn ở SG.

...
Hihi...
 
Uh... sao cũng dc... nhưng nếu Offline ở Sài Gòn vào ban ngày thì tôi ko dám chắc lắm.. vì CN nào cũng đi làm.. còn nếu uống cafe ở Biên Hòa thì.. quá khõe, đồng ý 2 tay 2 chân luôn mà ko cần giải dc bài.. hi... hi... Có thể rũ thêm nhiều người nữa càng vui
 
anhtuan1066 đã viết:
Thách đố thêm 1 chiêu nữa: Đầu tiên cột H đang trống, bạn chọn vào H1 rồi chọn ComboBox, nó sẽ chèn dử liệu vào H1... tiếp tục chọn ComboBox, nó chèn dử liệu vào H2... tiếp tục nữa nó chèn vào H3... vân vân.. gần giống với lệnh OFFSET(1,0).SELECT trong VBA...
Ha.. ha.. ha...
Phần thưởng là 1 cái card dt 100 ngàn, thời hạn giãi bài là từ bây giờ đến hết ngày mai... các bạn thấy sao?
ANH TUẤN
Nó như vầy được không anh?
Private Sub ComboBox1_Change()
ActiveCell.Value = ComboBox1
Selection.Offset(1, 0).Select
End Sub
 
Cái vụ CHANGE này cứ nghĩ là món độc quyền của VBA, thực ra hàm cũng giải quyết dc đấy!
Gợi ý: Hảy đặt Name như thế nào cho hợp lý đễ ActiveCell có thể "dời" vị trí đến cell cuối cùng
ANH TUẤN
 
Bác Tuấn ơi, cái Combobox ở bài 1, có bắt buộcphải dùng cái Combo trong ControlToolbox không ạ?
 
Lần chỉnh sửa cuối:
Bác Tuấn ơi, ở cái bài Combobox, có bắt buộcphải dùng cái Combo trong ControlToolbox không ạ?
Bạn muốn dùng ComboBox gì cũng dc.. nhưng qua thử nghiệm thì trong trường hợp này dùng ComboBox của thanh Control Toolbox là dễ hơn! Tuy nhiên bạn có thể dùng ComboBox trên thanh Form cũng ko sao, miễn đạt dc mục đích...
 
Các bạn down cái file này rồi right click vô cái combobox vô format control và chọn thè Control. Cái Combobox này không có VBA đấy.

Mến
 

File đính kèm

Ủa... Digita làm gì kỳ vậy ta ??? Hi.. hi... đâu có đúng với yêu cầu chứ.. Chẳng "động đậy" gì cả...
Hình như chưa đọc rõ nội dung tôi nêu lên thì phải!
Hic...
Nhắc lại lần nữa yêu cầu nhé!
Với VBA thì ta sẽ dùng code sau:
ActiveCell.Value = ComboBox1
ActiveCell.Offset(1,0).Select
Yêu cầu là: Ko dùng VBA, hảy làm cho ComboBox của bạn có chức năng tương tự như code trên (gần giống cũng dc)... Đại khái nó phải "động đậy"
ANH TUẤN
 
Lần chỉnh sửa cuối:
digita đã viết:
Các bạn down cái file này rồi right click vô cái combobox vô format control và chọn thè Control. Cái Combobox này không có VBA đấy.

Mến

Cái CB của bạn làm chưa đúng yêu cầu mà vì nó chỉ hiện Index của item. Cái của em mới đúng yêu cầu nè.

LM
 

File đính kèm

LearnMore đã viết:
Cái CB của bạn làm chưa đúng yêu cầu mà vì nó chỉ hiện Index của item. Cái của em mới đúng yêu cầu nè.

LM
Cái này cũng ko đúng luôn... hi.. hi.. Nói chung nếu ko dùng Name thì e rằng ko thể làm dc... Các bạn cố gắng lên.. Đọc kỹ yêu cầu nhé!
ANH TUẤN
 
Anh Tuấn Ơi, Chưa hết hạn nộp bài và phần quà cũng chưa mất đúng không anh??? Vậy thì em cũng sắn tay áo lên thử làm .Hhi vọng gặp anh ở Biên Hòa(nghe cái tên này ê răng wá hix)
 
Vâng! Đến hết ngày mai mới là hạn chót... còn chuyện họp mặt uống cafe tại Biên Hòa thì ko cần phải giãi bài... Các bạn đến mình đều hoan nghênh mà...
Ah... mà sao lại ê răng? Chưa hiểu ???
Mến
ANH TUẤN
 
Đọc kĩ lại thì cái bài này thật rắc rối. Nếu không dùng VBA thì chắc tôi cũng chào thua. Coi ai có thề mò ra câu trả lời trước khi cái thẻ phone hết hạn.
 
Bác ơi có phải như File này không
 

File đính kèm

Bác minhlev ơi, cái này chắc là đúng đáp án của anh Tuấn rồi!
Nhưng em thử chọn hai cái liên tục của Assets thì không được. Ví dụ như lặp lại hai lần liên tục AA145.
 
Cảm ơn bác. Quả thực là nhờ có bác thì tôi mới biết có lỗi này. Chưa biết khắc phục bằng cách nào nữa.
 
Theo tôi thì cái vụ này chắc hẳn phải đặt name mới xong. Sau đó vào properties trong VBA và đặt Listfillrange bằng name, còn Linkedcell bằng cell "A1" chẳng hạn thì Ok. Chịu không bác Tuấn! Cafe nhé!
 
Đúng là chọn 1 item 2 lần liên tiếp thì không có tác dụng. Chắc khả năng CB không dùng VBA tới đây là hết quá!

File em gửi làm theo ý 1 câu hỏi của anh.

LM
 

File đính kèm

Lần chỉnh sửa cuối:
Cái này khó nhỉ, hình như phải dùng đến Cell("address") và indirect nhưng chưa nghĩ ra.
Mà có phải nhấn f9 không vậy anhtuan1066.
 
Lần chỉnh sửa cuối:
Hoan hô minhlev... đó là cái chính xác nhất... tuy nhiên có thể sữa ngay chổ COUNTA thành 1 cái khác.. với mục đích là khi ta chọn vào 1 danh sách có sẳn và ko liên tục thì nó lại.. đi tiếp chứ ko nối tiếp vào danh sách phía trên...
=COUNTA(INDIRECT("Sheet1!$H$"&CELL("row")&":$H65500"))
Nói thì khó hiểu như hình dung như thế này đây: Giả sử tôi nhập dc đến H10... giờ tôi lại chọn ActiveCell ngay H19, vậy thì khi này nếu bấm ComboBox thì nó phải chèn vào H19 và đi tiếp chứ ko chèn vào H11...
Nhìn chung cách làm của minhlev về cơ bản là đúng nhất: Tạo 1 name động và gán LINKED CELL với Name này...
Cám ơn các bạn ủng hộ... Giờ các bạn có thể cải tiến thêm nhé!
Về vấn đề chọn cùng 1 Item vào 2 lần liên tiếp thì e rằng khó... tôi cũng ko nghĩ ra...
Với bạn minhlev: Xin bạn cho tôi số dt với! hi.. hi...
Với LearnMore: Bạn cũng đạt dc yêu cầu ở câu 1, cám ơn bạn
ANH TUẤN
 
Lần chỉnh sửa cuối:
Vậy là Bác yêu cầu bài chưa đúng, tôi cứ nghĩ rằng, cell nào active sẽ nhận KQ của combobox.
Bác phải nói là lấy tại dòng cuối của 1 cột nào đó +1 và nhận kq.
Cái này áp dụng thêm công thức của SoiBien rất hay
EndRow=MAX((INDIRECT("$A$1:$A65535")<>"")*(ROW(INDIRECT("$A$1:$A$65535"))))
A, B,...tùy.
 
Thì đúng rồi... cell nào Active sẽ nhận dc kết quả... về cơ bản thì minhlev đã làm đúng, tuy nhiên chưa chính xác lắm (vì bạn ấy cho KQ vào cuối bảng tính)... Và muốn biết ActiveCell thì dựa vào hàm CELL... dịch chuyển thì nhờ vào OFFSET... hi.. hi...
 
To bác anhtuan1066: Bác ơi, em ở tận Hà Nội cơ ạ. Tiếc rằng anh em mình khó có cơ hội gặp nhau, đi uống cà phê và nói chuyện. Giải được thách đố của bác là em vui lắm rồi. Tuy nhiên em nhận thấy sẽ còn nhiều cách đặt name khác mà bây giờ em chưa nghĩ ra (cách của bác ThuNghi là 1 ví dụ rất hay). Hộp tin nhắn của bác đầy quá, em không gửi được.
Số ĐT của em là 0903236865
 
Lần chỉnh sửa cuối:
Với minhlev: Thì bạn cứ đễ lại số dt đi, tôi gọi cho bạn... hi.. hi...
Về việc ko nhập dc 1 Item trong 2 lần liên tiếp tôi đã nghĩ ra 1 cách, đễ tối nay về test lại cái đã...
ANH TUẤN
 
- Em thì chỉ dùng VBA thôi, nên từ đầu đã biết là không hy vọng giải đáp được, nhưng cũng học hỏi các bác được chút ít !!!
 
Ai dà... cái vụ nhập 1 Item vào 2 lần liên tiếp tưởng là bở, ai dè làm hoài ko ra!
Lúc đầu tôi có ý định như thế này: Danh sách của ta từ A1 đến A10, vậy tôi sẽ đặt vào A11 công thức sao cho nó lấy dc nội dung của ActiveCell, tiếp theo thì sửa lại Name DS từ A1:A10 thành A1:A11... Mục đích việc làm này là muốn cho trong danh sách sẽ xuất hiện thêm 1 Item nữa, chính là cái Item mà ta vừa chọn trong ComboBox.. thế là ta có 2 Item trùng, ko chọn dc cái này thì sẽ chọn cái khác.. quá ngon rồi...
Hic... Cell A11 thì OK, ko có vấn đề, thế nhưng trong Name DS lại ko xuất hiện Item thứ 11... chẳng hiểu là lý do gì ???
Bạn minh thử theo hướng này xem có phát hiện gì khả quan ko?
Mến
ANH TUẤN
 
Em nhận thấy combo trong form thì có thể gọi trùng dữ liệu nhưng nó chỉ cho ra index thôi. Quả thật là không biết làm như thế nào nữa.
 
Chà, anh Tuấn chắn kỳ này đại thắng đưa ra 1 câu đố không ai tìm ra đáp án thỏa mản 100%. Tôi cũng nghỉ không ra cái này. Minhlev cho ra cái đáp án khá hay nhưng lại không gọi cùng cái nào trong combobox 2 lần liên tiếp.

Giờ thì có cách này hơi méo mó nghề nghiệp 1 chút nhưng trông cũng giống combobox lắm đấy. Để làm file nhẹ tôi có viết 1 code nhỏ. Các bạn cần quit-save nó sau khi down xuống rồi mở lên lại.

Các bạn cố gắng lên nha.
 

File đính kèm

Cám ơn bạn Digita... file của bạn có thể áp dụng dc nhiều lắm đấy, dù nó ko đáp ứng dc chủ đề bài tập nhưng cũng rất có ích...
Với minhlev: phát hiện của bạn cũng khá quan trọng đấy.. Đễ xem... hi.. hi.. Tính ra chúng ta đã tiến 1 bước khá dài rồi nhỉ! Từ đó rút ra dc rằng: "CÁI TA NGHĨ KO THỄ CHỈ CÓ Ý NGHĨA LÀ TA CHƯA BIẾT THÔI.. CHƯA CHẮC LÀ KO THỂ"
 
Ah... tôi vừa phát hiện ra 1 chuyện mà sao từ trước giờ ko thấy ai nói tới nhỉ? Đó là ngay cả khi ta dùng code thì cũng đâu có chọn dc 1 Item trong 2 lần liên tiếp chứ.. Bạn minhlev kiểm tra lại xem có đúng ko? Tôi dùng đoạn code này đây:
Private Sub ComboBox1_Change()
ActiveCell.Value = ComboBox1
ActiveCell.Offset(1, 0).Select
End Sub
Có gì ko ổn ko?
ANH TUẤN
 
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
ActiveCell.Value = ComboBox1
ActiveCell.Offset(1, 0).Select
End Sub
Tôi dùng cái này, khi chọn CB xong bấm phím bất kỳ khi đó ô sẽ nhận 1 item liên tiếp.
 
Lần chỉnh sửa cuối:
Sao tôi thử cái ByVal KeyAscii As MSForms.ReturnInteger này nó lại báo lỗi nhỉ?
 
Không biết máy của các bác ntn, ở trên máy tôi, tôi dùng đoạn code sự kiện:
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean).
Ta chọn giá trị cần điền sau đó kích 2 lần vào giá trị đó thì OK.
 
Đoạn code của bạn minhlev tôi thử trên Listbox thì OK, còn ComboBox thì tôi ko tài nào Double click dc... vừa bấm cái nó lặn ngay, lấy đâu mà Double click chứ... Hic..
----------------------------
Nếu vậy các bạn cho hỏi trong Properties các Object này có phần nào chỉnh Click đơn thành Click đôi ko?
ANH TUẤN
 
Lần chỉnh sửa cuối:
Bác chỉ cần Double Click thẳng vào ô ComboBox thôi. Khi nào muốn đổi giá trị khác thì thì mới Click vào nút sổ xuống (Dropdown Button), chọn giá trị cần sau đó lại Double Click vào giá trị đó trong ô ComboBox.
 
Sao kỳ vậy anh Tuấn, máy em vẫn chạy được OK mà anh!
 
Uh... ko biết nữa, nhưng cái của minhlev thì chạy dc... Đúng rồi.. hồi nảy tôi chọn list xổ xuống rồi double click hèn chi ko dc..
Các bạn nghiên cứu giùm xem trong Properties có phần nào chuyển Click đơn thành Click đôi ko nha! Nếu có thì bài toán của mình khả quan lắm đấy... Tôi tìm hoài mà ko thấy nó ở đâu cả
ANH TUẤN
 
Bác Tuấn ơi, em chỉ có mỗi 1 cách là làm trên cả 2 sự kiện ComboBox1_Change và ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) thôi.
Mã:
Trong Sheet:
Private Sub ComboBox1_Change()
    ActiveCell.Value = ComboBox1
    ActiveCell.Offset(1, 0).Select
End Sub

Private Sub ComboBox1_Change và ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    ActiveCell.Value = ComboBox1
    ActiveCell.Offset(1, 0).Select
End Sub
 
Lần chỉnh sửa cuối:
Đây là đáp án của tôi... Có thể chèn dử liệu bất cứ nơi đâu trên bảng tính và mỗi lần chèn thì lần sau nó sẽ dịch xuống 1 dòng... Chính vì lẽ đó mà ko thể dùng công thức của Soibien trong trường hợp này.. Vì nó ko tính đến cell cuối cùng... nó chỉ chèn dử liệu vào ActiveCell mà thôi...
Tuy nhiên vẫn còn 1 trục trặc ko giãi quyết dc, đó là ko thể chọn 1 Item trong 2 lần liên tiếp... Các bạn tham khảo xem có ý tưởng gì mới ko nha!
ANH TUẤN
 

File đính kèm

Anh Tuan1066 làm hay quá. Việc kết hợp giửa các công thức đúng theo những yêu cầu sử dụng rất sáng tạo. Cám ơn anh rất nhiều, mong anh tiếp tục phát triển thêm nhiều ý tưởng hay.
 
Anh Tuấn ơi, anh xem lại coi. Em test file đáp án của anh thấy hình như chưa ổn. Nếu chọn ô trên cột chưa có dữ liệu hoặc chọn ô bên dưới các ô đã có dữ liệu thì OK. Nhưng chọn 1 trong các ô trên ô có dữ liệu thì kết quả không như ý đâu. Ví dụ ô C12 có dữ liệu, anh chọn ô C5 và thay đổi Combobox xem.

Thân!
 
Uh... tất nhiên là nó chưa thật hoàn hảo, nên tôi mới post lên nhờ các bạn góp ý... Làm bằng VBA thì quá dễ, ở đây muốn thử thách trí tuệ 1 chút... hi.. hi...
Phước xem lại thử xem có phát hiện gì mới ko? Chủ yếu là cách đặt name ấy! Hoặc gợi ý 1 thuật toán nào khác
ANH TUẤN
 
anhtuan1066 đã viết:
Uh... tất nhiên là nó chưa thật hoàn hảo, nên tôi mới post lên nhờ các bạn góp ý... Làm bằng VBA thì quá dễ, ở đây muốn thử thách trí tuệ 1 chút... hi.. hi...
Phước xem lại thử xem có phát hiện gì mới ko? Chủ yếu là cách đặt name ấy! Hoặc gợi ý 1 thuật toán nào khác
ANH TUẤN

Vấn đề không phải là ở việc giải thuật. Cái quan trọng là ta đã dựa chủ yếu vào hàm Cell để làm . Trong khi đó LinkCell của Combobox chỉ thay đổi (tính toán lại ) khi STT của phần tử được chọn trong List thay đổi.
Đây là một điều rất khó khăn.

Combobox trên thanh công cụ Form thì làm được điều này(tính toán lại ngay lập tức Linkcell), tuy nhiên nó lại không trả về Phần tử trong DS đó mà nó chỉ trả về STT của phần tử đó trong danh sách.

Thân!
 
Cái trục trặc lớn nhất trong ComboBox này là ko thể chọn 1 Item 2 lần liên tiếp, Bắp có sáng kiến gì ko?
ANH TUẤN
 
anhtuan1066 đã viết:
Cái trục trặc lớn nhất trong ComboBox này là ko thể chọn 1 Item 2 lần liên tiếp, Bắp có sáng kiến gì ko?
ANH TUẤN

Thì như em nói ở trên rồi, em đã làm việc nhiều với Combobox của Toolbox, nó có cái khuyết điểm lớn là như vậy (LinkCell không tự thay đổi nếu thứ tự của phần tử được chọn không thay đổi), trong VBA thì phải dùng 1 chiêu là Refesh nó lại. Như vậy theo em khả năng khó có thể thực hiện được (nếu không dùng lập trình)

Bác xem có thể được với combobox ở Form không ???
Nhưng :
Combobox trên thanh công cụ Form thì làm được điều này(tính toán lại ngay lập tức Linkcell), tuy nhiên nó lại không trả về Phần tử trong DS đó mà nó chỉ trả về STT của phần tử đó trong danh sách.

Thân!
 
UH... ComboBox dạng Form thì thử OK rồi... nhưng làm sao ra giá trị đây? Nó chỉ ra STT của giá trị thôi... Thế mới cay!
Trong ComboBox, phần Properties ko có chổ nào chuyển đổi Click đơn thành Click đôi sao nhỉ?
ANH TUẤN
 
1. Đặt tên cho danh sách. Ví dụ A2:A5 là ComboBox
2. Chọn 1 cell nào đó.
3. Data->Validation->Setting->Allow:List
4.Source: gán =Combobox
Xem file đính kèm. Cafe nha bạn
 
Giải pháp như trên, gửi file đính kèm

Giải pháp như trên, gửi file đính kèm
 

File đính kèm

dlsg đã viết:
Giải pháp như trên, gửi file đính kèm
Bạn đã đọc kỹ yêu cầu của tôi chưa? Tải file của tôi về xem thử đễ thấy sự khác nhau! hi... hi... Bài viết #44 ấy
 

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

Back
Top Bottom