Bài viết: Tạo danh sách tìm kiếm thông minh ngay trong ô (1 người xem)

  • Thread starter Thread starter kyo
  • Ngày gửi Ngày gửi
Liên hệ QC

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

kyo

Nguyễn Khắc Duy
Thành viên danh dự
Tham gia
4/6/06
Bài viết
901
Được thích
2,717
Tạo danh sách tìm kiếm thông minh ngay trong ô


Nếu một ngày bạn chán Data Validation vì những bất tiện của nó như là:
- Đến từng ô và click chuột vào mũi tên thì danh sách mới hiện ra.
- Danh sách càng dài thì càng khó lựa chọn vì sẽ phải kéo thanh trượt xuống để tìm.


Và bạn ước có một giải pháp nào đó khác hơn, chẳng hạn như:
- Khi đến từng ô, một bảng chọn dữ liệu sẽ tự hiện ra.
- Bảng dữ liệu này có thể như google, nghĩa là đánh vài ký tự và danh sách sẽ tự rút gọn để dễ chọn lựa.


Vậy bài viết này là dành cho bạn (cám ơn dòng code của anh quanghai1969).

Đầu tiên, bạn có thể tải file đính kèm của GPE ở dưới bài viết này. Và khi bạn mở lên, bạn sẽ thấy giao diện như sau:

9K_LicdKVF6DUF4hmNHIsSJKGGEsk-ce24rw1aamFimA742L-IWrXcalswJzAj1XOjiq-EqCyF-9mmnspAG8PPDo2b4rcHpg-bknIqTLDCUAuNiWdLv0uLZFjmWcVHeJtT2Le93_2zM-jCHpJfkzqeJ32WJ96_YuLdpgyQRNfVCmTKE_xu1MKeSm6TcNgzCeCO6lRQ48as4k2iFQ1yX5gANDnqi7h7wqcwPyPIN5didUuiXdck5IlRLPkOwLxEuT9YUxdTVIocWbuxpFGeZEjyxxE9GLCxuHBqj5Vsc6wQXJYAU9q39s38pJxBqkDLklxIVwrkpNhazzukDePz2qM-pp7Euoqs3c9U7g83nD8wemZwOrRJCqQZPTtzXEc_Wgzrr_UUI8TyKEBfqwUP7GTOBVLiCXIwbbtOPQJe1jUsfD2Y04WCOQYwXVEbhBlQomM5lM3pQHhqs258ao69w9viB08jpshHC0puUjksR4jRTekgi_pdunoC7ufz24Cknx6G9StJmGvy317q5tqSLRC0V-1PGZ2uiH_1OqP6YX-WS4NI8wsSngdsGNV3fud7AFrhKrShwuglygw-zZEz52ME9LYqejJ-r9emyS188xmWer-v8BCEE=w736-h568-no


Nếu bạn chọn vào cột C, một danh sách thông minh cùng vùng nhập dữ liệu sẽ tự hiện ra, và bạn có thể gõ vài ký tự để tìm kiếm thông minh. Đặc biệt hơn, những code trong file này đã được chỉnh sửa để có khả năng tương tác bằng bàn phím cho tiện dụng hơn với người dùng:
- Bạn có thể dùng các phím mũi tên sang phải, lên xuống để chọn kết quả.
- Sau khi chọn, nhấn Enter để nhập liệu.
- Khi không muốn chọn, nhấn Esc để thoát ra hoặc dùng chuột nhấn qua một ô khác hay bấm tiếp các phím mũi tên, danh sách dữ liệu sẽ tự động tắt để bạn có thể tương tác trực tiếp với ô.


TY5phusfpn03pfxfE2hRUkz4zky8PaxVeSzwLXQkHUdOfomfZ4ANB2IZp__lhjjeQHefnNauec82OA47FrLuuBedZbpPOt4oIpu8RLgjxbVnshy4zQI3FkTzPe1igyfkH3gfdMt8g80au9NvIPjCOd42miL7SQPAh7FrJQyXdTiSanObNuPVRPXbgMPKXEsbGs7oB2qbr5sxrhNtkx5R7e-aTgcS1NoXoDyGdHK7r7wUVKrKgPFezcJXcMp7ECJDuaCcXTFFsTi0AD4_UlMRMRN7xmlQWhgbE9vM8WBKRJ97pUWhJaHP6mSQuz0Co62aVYm3UT1U86nLD7LMoc3uDe2gPfH0OPIdoQD8Y1fiGvaO6O_M_N-9FHHv7YrFr3ngQDUHw_p-AcjqMIyfBRqzZlLip8MBkUSFQy89f2hwmvz_z-dfukQh9Y3uIwmkFjLwKPAvQI_VSopoxSwkqdgkMryDMaUjNkZbm103UDt0GAV8RF1nCRrElPGSGVec9fzI4p6pr331eVrH0X3DfqjdIDQX4HWiRoAMjwxBE-x_BE3Ezrt2OMjgKrEa0xycUpDS0V3d20aVcuajIbVmfQCkqUKTW30TSIBvnUsJAB01kyJIk2-sX9k=w757-h609-no


Ngoài ra, để thêm bớt các hạng mục trong danh sách, bạn có thể qua sheet DM.khach.hang để chỉnh sửa tương ứng. Danh sách dữ liệu của bạn chính là cột A trong sheet này.

Vậy làm cách nào để tùy biến, chỉnh sửa cho danh sách xuất hiện ở một chỗ khác? Để làm được điều này, bạn cần một chút căn bản về VBA, cụ thể bạn nhìn đoạn code sau

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > 8 And Target.Row < [B]18[/B] Then
   If Target.Column = 3 Then
      thaydoi
   Else
      Hide
   End If
Else
   Hide
End If
End Sub

Đoạn code này cho thấy từ hàng thứ 9 cho đến hàng thứ 17 và trong cột số 3 tương ứng cột C thì sẽ kích hoạt thủ tục thaydoi, hay là bảng chọn sẽ hiện ra. Do đó, bạn có thể thay đổi những giá trị này cho phù hợp với bảng chọn của bạn.

Ngoài ra, nếu muốn bạn có thể tiếp tục thảo luận đề tài này thông qua topic này.

Chúc bạn thành công.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em muốn list danh sách chọn có độ rộng hơn thì sửa code thế nào ạ?
 
Ý bạn là cái khung to ra? Bạn vào thẻ Developer của Excel -> chọn Design -> nắm cái ô đó kéo dài ra -> bấm Design một lần nữa để code chạy bình thường.
 
Mình muốn listbox hiển thị 2 cột hoặc nhiều hơn nữa để xem thông tin dễ hơn? Nếu mình muốn chọn 1 mã hàng nào đó đúng tên hàng của mã đó thì làm thế nào ạ?
 
Cám ơn anh. Em đang rất cần file như thế này. Khi thay đổi theo yêu cầu, em gặp 2 vấn đề sau:
- Trong sheet DM Khách hàng, em copy danh sách của em để thay vào. Cột C xổ ra danh sách chọn nhưng em chọn 1 tên trong đó thì không được.
- Khi chọn từ danh sách, em phải nhập chính xác, cả chữ thường hay chữ hoa. Ví dụ: em chọn Lâm Chí Dĩnh (phải gõ chữ thường "lâm" mới ra, còn nếu gõ "Lâm" thì không ra.
Anh hướng dẫn giúp em cách giải quyết 2 vấn đề trên với.
Cám ơn anh!
 
Lần chỉnh sửa cuối:
Chào bạn bebeen,

kyo đã upload thêm file trên bài viết, bạn có thể vào down lại nhé. Trong file đó kyo đã thêm 1 cột B bên sheet dữ liệu để bạn có thể điền thêm thông tin nếu bạn muốn. Một số chỗ bạn để ý để chỉnh sửa theo ý bạn đó là:
- Bạn vào properties của Listbox, phần ColumnCount, bạn chỉnh lại con số tùy theo bạn cần bao nhiêu cột hiện ra. Ví dụ ở đây kyo chỉ chỉnh 2, nhưng bạn hoàn toàn có thể lên 3, 4.
- Về code, bạn nhìn vào đây nhé:

Mã:
Sub loc()Dim dl(), i As Long, c As Byte, j As Long
With Sheet2
   dl = .[A2:B1000].Value 'Chỉnh lại dữ liệu nguồn trong trường hợp muốn có thêm, ví dụ như để hiện thêm thông tin trong listbox ở cột 3, 4 thì cần quét thành C1000 hay D1000.
End With
Sheet1.ListBox1.Clear
c = 1
j = 1
For i = 1 To UBound(dl)
   If dl(i, c) <> "" Then
      If UCase(TV(dl(i, c))) Like UCase(TV("*" & Sheet1.TextBox1.Value & "*")) Then
         Sheet1.ListBox1.AddItem dl(i, c)
         Sheet1.ListBox1.List(Sheet1.ListBox1.ListCount - 1, [SIZE=3][B]1[/B][/SIZE]) = dl(i, c + 1) 'Đây là dòng code để thêm cột cho Listbox hiện ra, nếu bạn muốn thêm cột nữa thì copy paste thêm, đồng thời chỉnh số 1 kyo tô đậm thành số 2, 3 tương ứng.
         j = j + 1
      End If
   End If
Next
End Sub

Chào bạn Khanh Dung,

Về câu 1 của bạn: bạn chọn bằng mũi tên và phím Enter nhé.
Về câu 2: Bạn cũng down lại file kyo vừa upload nhé, trong đó kyo đã sửa cho bạn tìm được cả chữ hoa và thường.

kyo.
 
Cám ơn kyo nhiều!
Mình làm theo hướng dẫn của kyo để thêm 1 cột đơn vị tính nữa mà không được:
Mã:
Sub loc()
Dim dl(), i As Long, c As Byte, j As Long
With Sheet2
   dl = .[A2:C1000].Value 'Chỉnh lại dữ liệu nguồn trong trường hợp muốn có thêm, ví dụ như để hiện thêm thông tin trong listbox ở cột 3, 4 thì cần quét thành C1000 hay D1000.
End With
Sheet1.ListBox1.Clear
c = 1
j = 1
For i = 1 To UBound(dl)
   If dl(i, c) <> "" Then
      If UCase(TV(dl(i, c))) Like UCase(TV("*" & Sheet1.TextBox1.Value & "*")) Then
         Sheet1.ListBox1.AddItem dl(i, c)
         Sheet1.ListBox1.List(Sheet1.ListBox1.ListCount - 1, [SIZE=3]1[/SIZE]) = dl(i, c + 1)
         Sheet1.Listbox1.List(Sheet1.ListBox1.ListCount - 1, 2) = dl(i,c + 1)
         j = j + 1
      End If
   End If
Next
End Sub
 
Lần chỉnh sửa cuối:
Chào bạn,

kyo nghĩ vấn đề nằm ở chỗ bạn quên không chỉnh lại properties của Listbox. Giả sử nếu bạn thêm 1 cột nữa thì bạn cần phải vào properties của Listbox và chỉnh ColumnCount từ 2 thành 3 nhé.

kyo.
 
Chào bạn,

kyo nghĩ vấn đề nằm ở chỗ bạn quên không chỉnh lại properties của Listbox. Giả sử nếu bạn thêm 1 cột nữa thì bạn cần phải vào properties của Listbox và chỉnh ColumnCount từ 2 thành 3 nhé.

kyo.

Mình đã sửa chỗ này:
Mã:
Sub thaydoi()
With S2.TextBox1
        .Visible = False
        .Visible = True
        .Left = ActiveCell.Left
        .Top = ActiveCell.Top
        .Width = ActiveCell.Width
        .Height = ActiveCell.Height
        .Value = ""
        .Activate
End With
With S2.ListBox1
        .Visible = False
        .Visible = True
[COLOR=#0000cd][B]        .ColumnCount = 3[/B][/COLOR]
[COLOR=#0000cd][B]        .ColumnWidths = "50;200;20"[/B][/COLOR]
        .Width = "300"
        .Left = ActiveCell.Offset(, 1).Left
        .Top = ActiveCell.Offset(, 1).Top
        .Clear
End With
End Sub
 
Bạn sửa như thế cũng được bạn. Vậy bạn còn gặp lỗi không?
 
Vẫn không được kyo ạ! Không biết còn nguyên nhận nào khác nữa không?
Load_DL.jpg
Vậy kyo sửa lại file mẫu với hiển thị 3 cột?
 
Lần chỉnh sửa cuối:
Mình đưa file lên nhờ kyo xem dùm ha. Mình đã lập ở sheet PN.
Click to download
 

File đính kèm

Lần chỉnh sửa cuối:
Mình đưa file lên nhờ kyo xem dùm ha. Mình đã lập ở sheet PN.
Click to download

trong cái sub loc () có 2 dòng giống nhau

Mã:
S2.ListBox1.List(S2.ListBox1.ListCount - 1, 1) = dl(i, c + 1)
S2.ListBox1.List(S2.ListBox1.ListCount - 1, 2) = dl(i, c + [COLOR=#ff0000][SIZE=4][B]1[/B][/SIZE][/COLOR])

có lẽ nó nên viết là

Mã:
S2.ListBox1.List(S2.ListBox1.ListCount - 1, 1) = dl(i, c + 1)
S2.ListBox1.List(S2.ListBox1.ListCount - 1, 2) = dl(i, c + [COLOR=#ff0000][SIZE=4][B]2[/B][/SIZE][/COLOR])

nói chung thì cách viết code trên mang tính chất khai mở để làm quen khái niệm sử dụng ô tìm kiếm bằng VBA
còn để áp dụng được trên các file số lượng mã hàng lớn thì còn phải sửa nhiều .
 
e đã tải về và dùng thử khi sửa lại chạy trên file của mình thì nó bị lỗi như này, thì phải xử lý như thế nào ạ
Untitled_zps8g2pdvbi.png
[/URL][/IMG]
 
Nhờ chỉnh sửa file Tìm kiếm và nhập dữ liệu

Chào Kyo,
Tớ thấy file tìm dữ liệu thông minh của bạn rất hay và tiện. Tớ đang mày mò để chỉnh nó sao cho phù hợp công việc của mình.
Tuy nhiên, đang loay hoay và muốn thêm 1 số chức năng như:

  1. Click vào Kết quả tìm bên phải thì nó sẽ nhập luôn vào ô đó. (Đang có dữ liệu rồi thì hiện xác nhận. Có sửa không? OK à Replace; Nếu đang là ô trắng thì nhập luôn vào ô)
  2. Bảng dữ liệu của mình khá rộng, từ B2 đến H1000 (Bên Sheet 2) à Có thể chỉnh cách nào để chỉ chọn 1 ô lỗi thôi. VD: Ô B2:B2 Hoặc H3:H3 thôi. Và nhập vào ô đã chọn bên Sheet 1.
Bạn chỉ tớ với nhé
Kiem soat Loi Ver 3.rar
 

File đính kèm

Lần chỉnh sửa cuối:
Chào anh/ chị: Kyo
Em thấy bài viết này rất hay và hữu ích, em chỉ muốn sửa một chút như này thì làm thế nào ạ:
Giả sử tại DM.Khach.hang em có 3 cột
Cột A: mã khách ( VD: KH001,KH002...)
Cột B: Tên khách (như cột A của anh chị)
Cột C: Địa chỉ ( như cột B của anh chị)
Tại sheet Lẹnh.giao.hang em muốn tìm tên khách hàng nhưng khi điền thì điền mã khách thì sửa lại code trên như nào ạ
 
Anh chị cho em hỏi làm thế nào để khắc phục lỗi: Run-time error '1004' khi em chia sẻ file đó thì macro bị lỗi
 
Xin chào bạn Kyo !
Mình muốn xin bạn Video hướng dẫn làm Tạo danh sách tìm kiếm thông minh ngay trong ô

Mình chưa hiểu bạn giúp mình nhé.
Thanks bạn nhiều.
 
cho em hỏi. tại phần này "*" & Sheet1.TextBox1.Value & "*"
mình viết thế nào để khi tìm kiếm
ví dụ
TextBox1.Value = "Nguyễn Anh"
thì danh sách trả về
Khanh Nguyễn
Nguyễn Khải Anh
Nguyễn Văn Nhường
tức là tìm kiếm giống trên google vậy ấy.
hễ có từ nào trong đoạn text tìm kiếm thì cho vô hết
 
Cả nhà sửa dùm mình công thức với tại sao mình đã tạo xong list ma khi sử dụng enter thì tên hàn lại mất đi
 

File đính kèm

Lần chỉnh sửa cuối:
Can su giup do cac cao thu excel

Minh da lam thu file theo list file mau khi enter no khong chon ten hang. Giup mình sữa với cả nhà ơi
 

File đính kèm

Dear Kyo san !
Cậu có thể ghi video các bước làm này cho mình xin được không.
Cậu ghi bằng phần mềm ghi thao tác trên màn hình nhé.
Thanks cậu nhiều.
Nếu cậu ghi được cậu gửi qua email: anhhaitruong@gmail.com
 
Tạo danh sách tìm kiếm thông minh ngay trong ô

Ý bạn là cái khung to ra? Bạn vào thẻ Developer của Excel -> chọn Design -> nắm cái ô đó kéo dài ra -> bấm Design một lần nữa để code chạy bình thường.

bác Kyo ơi, bác có thể quay màn hình quá trình từ bắt đầu cho đến khi xong một file tìm kiếm mã thông minh trong excel này được không ạ, e thích món này lắm nhưng em không biết bắt đầu từ đâu. trong công việc em chỉ toàn dùng vadition thôi ạ. mà các mã hàng của em nhiều quá ạ. bác có thể cho em xin và gửi vào email anhthoaikt6@gmail.com cho e với bác nhé.
em cảm ơn bác ạ }}}}}
 
Tạo danh sách tìm kiếm thông minh ngay trong ô

Dear Kyo san !
Cậu có thể ghi video các bước làm này cho mình xin được không.
Cậu ghi bằng phần mềm ghi thao tác trên màn hình nhé.
Thanks cậu nhiều.
Nếu cậu ghi được cậu gửi qua email: anhhaitruong@gmail.com

Hu hu không Bác nào giúp mình nhỉ????muốn học bài nay quá đọc mãi lý thuyết nhưng dài quá chưa biết phải làm thế nào????
Bác nào làm ơn giúp e với.
 
Hu hu không Bác nào giúp mình nhỉ????muốn học bài nay quá đọc mãi lý thuyết nhưng dài quá chưa biết phải làm thế nào????
Bác nào làm ơn giúp e với.

Bạn đang bí chỗ nào? kyo thấy khá dễ hiểu mà, chủ yếu nếu bạn muốn ứng dụng được ngay thì chỉ cần sửa như hướng dẫn là có ngay danh sách để xài.
 
Chào Bác Kyo !
Ý e là e muốn ứng dụng code của bác lên file của e đang theo dõi, Tuy nhiên phần liên kết code lên Text box và List box e hiểu không rõ nên code không chạy được và không show và unshow List box mỗi khi di chuyển chuột đến text box.
A làm ơn hướng dẫn chi tiết giúp e với ah.
Cám ơn anh nhiều !
 
bạn ơi làm sao để chọn dự liệu cột đầu tiên dù vẫn tra 2 hay 3 cột à bạn
 
Em làm theo mà không được....giúp em với ạ
 

File đính kèm

Bạn đang bí chỗ nào? kyo thấy khá dễ hiểu mà, chủ yếu nếu bạn muốn ứng dụng được ngay thì chỉ cần sửa như hướng dẫn là có ngay danh sách để xài.
anh làm video hướng dẫn từ đầu với ạ...em đang tìm hiểu mà hok biết bắt đầu từ đâu ạ
 
CHO EM HOI CÔNG THỨC DÒ TRÙNG MÃ HÀNG LÀ MÌNH DÙNG CÔNG THỨC NÀO VẬY
 
Không cần lập trình, chỉ vài thiết lập bạn có công cụ hỗ trợ tìm và lọc danh sách thông minh và linh hoạt. Xem kỹ video gồm 2 phần để lựa chọn sản phẩm phù hợp nhất với yêu cầu của bạn nhé!
 
ở bài #1, file cũng không còn, hình ảnh thì bị lỗi rồi. Mong @kyo bổ sung lại ở bài #1 để mọi người học hỏi. Cám ơn!
 

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

Back
Top Bottom