Hỏi về cách để tạo bộ lọc tỉnh ==> Quận ==> xã

Liên hệ QC

LuuGiaPhúc

Thành viên hoạt động
Tham gia
28/7/21
Bài viết
126
Được thích
51
Chào các anh chị trên diễn đàn GPE,
E có 1 file danh sách Tỉnh , Quận , Phường xã như hình bên dưới lưu trong sheet Danh muc tinh thanh,
Em muốn ở sheet Danh sach thi , khi em nhập tên tỉnh thì nó sẽ liệt kê tên quận/huyện ở cột kế bên, tiêp theo, chọn xong quận / huyện thì nó liệt kê Xã / phường.

Tính năng phụ thêm :
Do danh sách quận / huyện / xã phường rất nhiều, nên nếu có thể, dùng VBA để đề xuất sẵn thì càng hay, ví dụ khi nhập chữ Tuyên thì nó sẽ list sẵn Tuyên Quang , khi nhập chữ Huyện Lâm thì nó list sẵn Huyện Lâm Bình. Phần này chỉ là đề xuất thêm nếu có thể làm được thì file sẽ hay hơn, không thì thôi, cho họ click chuột rồi kéo xuống tìm hoặc nhập thủ công cũng được.
Em cảm ơn ạ

1631274021344.png 1631274238019.png
 

File đính kèm

Chào các anh chị trên diễn đàn GPE,
E có 1 file danh sách Tỉnh , Quận , Phường xã như hình bên dưới lưu trong sheet Danh muc tinh thanh,
Em muốn ở sheet Danh sach thi , khi em nhập tên tỉnh thì nó sẽ liệt kê tên quận/huyện ở cột kế bên, tiêp theo, chọn xong quận / huyện thì nó liệt kê Xã / phường.

Tính năng phụ thêm :
Do danh sách quận / huyện / xã phường rất nhiều, nên nếu có thể, dùng VBA để đề xuất sẵn thì càng hay, ví dụ khi nhập chữ Tuyên thì nó sẽ list sẵn Tuyên Quang , khi nhập chữ Huyện Lâm thì nó list sẵn Huyện Lâm Bình. Phần này chỉ là đề xuất thêm nếu có thể làm được thì file sẽ hay hơn, không thì thôi, cho họ click chuột rồi kéo xuống tìm hoặc nhập thủ công cũng được.
Em cảm ơn ạ

View attachment 265796 View attachment 265797
Dùng tạm file Validation + VBA này đã. Vụ tìm theo danh sách rút ngắn phải làm trên combobox mới được.
Copy Validation từ E6:F6 xuống
 

File đính kèm

Dùng tạm file Validation + VBA này đã. Vụ tìm theo danh sách rút ngắn phải làm trên combobox mới được.
File
Tính năng phụ thêm :
Do danh sách quận / huyện / xã phường rất nhiều, nên nếu có thể, dùng VBA để đề xuất sẵn thì càng hay, ví dụ khi nhập chữ Tuyên thì nó sẽ list sẵn Tuyên Quang , khi nhập chữ Huyện Lâm thì nó list sẵn Huyện Lâm Bình. Phần này chỉ là đề xuất thêm nếu có thể làm được thì file sẽ hay hơn, không thì thôi, cho họ click chuột rồi kéo xuống tìm hoặc nhập thủ công cũng được.
Em cảm ơn ạ
File dùng Combobox. Test tại sheet Danh sach thi 2.
 

File đính kèm

Nó chạy chưa đúng lắm bạn ơi, chọn tỉnh nào thì nó cũng ra 1 kiểu
Quên chưa xóa dữ liệu cũ. Bạn thay hết code trong sheet1 Danh sach thi đó bằng:
(và tôi nghĩ nên dùng sheet Danh sach thi 2)
Rich (BB code):
Option Explicit
Option Base 1

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.count = 1 Then
    If Target.Row > 5 And Target.Column = 4 Then
        TimHuyen Target.Text
    ElseIf Target.Row > 5 And Target.Column = 5 Then
        TimXa Target.Text
    End If
End If
End Sub

Sub TimHuyen(Tinh As String)
Dim arr, arrR(), i&, k&, Dic As Object

Set Dic = CreateObject("Scripting.Dictionary")
arr = Sheet2.Range("L2:P" & Sheet2.Range("L" & Rows.count).End(xlUp).Row)

For i = 1 To UBound(arr)
    If Not Dic.Exists(arr(i, 3)) And arr(i, 1) = Tinh Then
        k = k + 1
        Dic.Add arr(i, 3), k
        ReDim Preserve arrR(k)
        arrR(k) = arr(i, 3)
    End If
Next
Sheet2.Range("E2").Resize(200, 1).ClearContents
Sheet2.Range("E2").Resize(k, 1) = WorksheetFunction.Transpose(arrR)
End Sub

Sub TimXa(Huyen As String)
Dim arr, arrR(), i&, k&, Dic As Object

Set Dic = CreateObject("Scripting.Dictionary")
arr = Sheet2.Range("N2:P" & Sheet2.Range("L" & Rows.count).End(xlUp).Row)

For i = 1 To UBound(arr)
    If Not Dic.Exists(arr(i, 3)) And arr(i, 1) = Huyen Then
        k = k + 1
        Dic.Add arr(i, 3), k
        ReDim Preserve arrR(k)
        arrR(k) = arr(i, 3)
    End If
Next
Sheet2.Range("F2").Resize(200, 1).ClearContents
Sheet2.Range("F2").Resize(k, 1) = WorksheetFunction.Transpose(arrR)
End Sub
 
Quên chưa xóa dữ liệu cũ. Bạn thay hết code trong sheet1 Danh sach thi đó bằng:
(và tôi nghĩ nên dùng sheet Danh sach thi 2)
Rich (BB code):
Option Explicit
Option Base 1

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.count = 1 Then
    If Target.Row > 5 And Target.Column = 4 Then
        TimHuyen Target.Text
    ElseIf Target.Row > 5 And Target.Column = 5 Then
        TimXa Target.Text
    End If
End If
End Sub

Sub TimHuyen(Tinh As String)
Dim arr, arrR(), i&, k&, Dic As Object

Set Dic = CreateObject("Scripting.Dictionary")
arr = Sheet2.Range("L2:P" & Sheet2.Range("L" & Rows.count).End(xlUp).Row)

For i = 1 To UBound(arr)
    If Not Dic.Exists(arr(i, 3)) And arr(i, 1) = Tinh Then
        k = k + 1
        Dic.Add arr(i, 3), k
        ReDim Preserve arrR(k)
        arrR(k) = arr(i, 3)
    End If
Next
Sheet2.Range("E2").Resize(200, 1).ClearContents
Sheet2.Range("E2").Resize(k, 1) = WorksheetFunction.Transpose(arrR)
End Sub

Sub TimXa(Huyen As String)
Dim arr, arrR(), i&, k&, Dic As Object

Set Dic = CreateObject("Scripting.Dictionary")
arr = Sheet2.Range("N2:P" & Sheet2.Range("L" & Rows.count).End(xlUp).Row)

For i = 1 To UBound(arr)
    If Not Dic.Exists(arr(i, 3)) And arr(i, 1) = Huyen Then
        k = k + 1
        Dic.Add arr(i, 3), k
        ReDim Preserve arrR(k)
        arrR(k) = arr(i, 3)
    End If
Next
Sheet2.Range("F2").Resize(200, 1).ClearContents
Sheet2.Range("F2").Resize(k, 1) = WorksheetFunction.Transpose(arrR)
End Sub
Sheet danh sách thi 2 có lỗi này, click vào bất kỳ ô nào nó cũng báo

1631284217530.png
hoặc bảng này
1631284263152.png
 
Sheet danh sách thi 2 có lỗi này, click vào bất kỳ ô nào nó cũng báo

View attachment 265828
hoặc bảng này
View attachment 265829
Cũng kỳ he. Để tôi xem lại. Nếu không có cái Combobox1 đó thì máy tôi làm sao nó chạy được. Bạn thử:
1/ Ở sheet Danh sach thi 2, vào menu DEVELOPER, nhóm Controls, bấm Design Mode coi cho có hiện cái combobox nào không? Nếu có bấm chọn nó nhìn vào hộp Name Box xem có phải nó tên là Combobox1 không? Có thì sang bước 2. Không có thì tạo mới 1 cái từ nhóm ActiveX
2/ Tại cửa sổ VBA, vào Tools/References xem trong đó có bị Missing XYZ không. Nếu có thì kéo xuống dưới tìm cái tên XYZ bấm chọn nó => OK
Nếu trong cửa sổ đó có đủ thế này mà không chạy thì chắc phải Ultraviewer thôi.
1631284986424.png
 
Lần chỉnh sửa cuối:
Bạn chỉ định userform vào.
Ví dụ:
With Userform1.combobox1
 
Chào các anh chị trên diễn đàn GPE,
E có 1 file danh sách Tỉnh , Quận , Phường xã như hình bên dưới lưu trong sheet Danh muc tinh thanh,
Em muốn ở sheet Danh sach thi , khi em nhập tên tỉnh thì nó sẽ liệt kê tên quận/huyện ở cột kế bên, tiêp theo, chọn xong quận / huyện thì nó liệt kê Xã / phường.

Tính năng phụ thêm :
Do danh sách quận / huyện / xã phường rất nhiều, nên nếu có thể, dùng VBA để đề xuất sẵn thì càng hay, ví dụ khi nhập chữ Tuyên thì nó sẽ list sẵn Tuyên Quang , khi nhập chữ Huyện Lâm thì nó list sẵn Huyện Lâm Bình. Phần này chỉ là đề xuất thêm nếu có thể làm được thì file sẽ hay hơn, không thì thôi, cho họ click chuột rồi kéo xuống tìm hoặc nhập thủ công cũng được.
Em cảm ơn ạ

View attachment 265796 View attachment 265797
Làm cái form nhập liệu có phải vừa nhanh vừa nhẹ file không.
 
Cũng kỳ he. Để tôi xem lại. Nếu không có cái Combobox1 đó thì máy tôi làm sao nó chạy được. Bạn thử:
1/ Ở sheet Danh sach thi 2, vào menu DEVELOPER, nhóm Controls, bấm Design Mode coi cho có hiện cái combobox nào không? Nếu có bấm chọn nó nhìn vào hộp Name Box xem có phải nó tên là Combobox1 không? Có thì sang bước 2. Không có thì tạo mới 1 cái từ nhóm ActiveX
2/ Tại cửa sổ VBA, vào Tools/References xem trong đó có bị Missing XYZ không. Nếu có thì kéo xuống dưới tìm cái tên XYZ bấm chọn nó => OK
Nếu trong cửa sổ đó có đủ thế này mà không chạy thì chắc phải Ultraviewer thôi.
View attachment 265832
Lúc đầu thì Em thử trên Laptop với máy bàn đều bị, sau làm như bài này thì ok, nó hoạt động được. Nhưng nếu vậy thì hơi khó khăn chút. vì file này không phải em xài.
Nó như thế này, mỗi 3 ngày là công ty mở 1 kỳ thi, mỗi kỳ thi có khoảng vài chục thí sinh. Trước ngày thi em sẽ gởi file này cho các giáo viên để các giáo viên chuyển cho thí sinh tự điền, điền xong các giáo viên tổng hợp và gởi về cho em để tổng hợp toàn quốc.
Do nhiều thí sinh cứ ghi sai ví dụ có người ghi TPHCM , HCM , Hồ Chí Minh .... nên em phải tạo form này để không sảy ra sai sót.
mà không lẽ phải hướng dẫn cho từng học viên làm như bài #7 thì hơi khó, có cách nào khác không ạ
 
Lúc đầu thì Em thử trên Laptop với máy bàn đều bị, sau làm như bài này thì ok, nó hoạt động được. Nhưng nếu vậy thì hơi khó khăn chút. vì file này không phải em xài.
Nó như thế này, mỗi 3 ngày là công ty mở 1 kỳ thi, mỗi kỳ thi có khoảng vài chục thí sinh. Trước ngày thi em sẽ gởi file này cho các giáo viên để các giáo viên chuyển cho thí sinh tự điền, điền xong các giáo viên tổng hợp và gởi về cho em để tổng hợp toàn quốc.
Do nhiều thí sinh cứ ghi sai ví dụ có người ghi TPHCM , HCM , Hồ Chí Minh .... nên em phải tạo form này để không sảy ra sai sót.
mà không lẽ phải hướng dẫn cho từng học viên làm như bài #7 thì hơi khó, có cách nào khác không ạ
Có lẽ bạn làm 1 cái hướng dẫn bằng hình. Chữ ít, hình đầy đủ từng bước. Gửi file hd đó kèm theo file công việc.

Cũng chỉ có mấy bước chứ mấy, chừng 5-7 cái hình gì đó. Ai cũng làm theo được mà.
 
Có lẽ bạn làm 1 cái hướng dẫn bằng hình. Chữ ít, hình đầy đủ từng bước. Gửi file hd đó kèm theo file công việc.

Cũng chỉ có mấy bước chứ mấy, chừng 5-7 cái hình gì đó. Ai cũng làm theo được mà.
Cảm ơn bạn , tạm thời mình đã làm theo cách của bạn, viết 1 file pdf hương dẫn nhúng vào file excel này (insert / object) trong lúc chờ tìm thêm xem có cách nào nữa để tham khảo hay không.
Cảm ơn bạn đã rất nhiệt tình hỗ trợ mình đến tận khuya như vậy.
 
Cảm ơn bạn , tạm thời mình đã làm theo cách của bạn, viết 1 file pdf hương dẫn nhúng vào file excel này (insert / object) trong lúc chờ tìm thêm xem có cách nào nữa để tham khảo hay không.
Cảm ơn bạn đã rất nhiệt tình hỗ trợ mình đến tận khuya như vậy.
Bạn xem lại phần thiết lập Security của Excel xem, có thể bị disable ActiveX nên nó không cho chạy Combobox.
 
Bạn xem lại phần thiết lập Security của Excel xem, có thể bị disable ActiveX nên nó không cho chạy Combobox.
Tôi đoán bị trường hợp 2/ ở bài #7 rồi và chủ thớt đã khắc phục rồi. Do đó mới có việc làm hướng dẫn pdf cho người dùng tại bài #17.
 
Tôi đoán bị trường hợp 2/ ở bài #7 rồi và chủ thớt đã khắc phục rồi. Do đó mới có việc làm hướng dẫn pdf cho người dùng tại bài #17.
À vì khi tôi disable ActiveX thì nó báo lỗi như trên. Khi bạn thiết kế kéo thả ComboBox ActiveX vô Form thì mặc định nó Embed control vào và cả cái thư viện FM20.dll luôn.
Test trên máy tôi thì có đủ thư viện FM20.dll trong Reference mà vẫn báo lỗi nhé.

Screen Shot 2021-09-11 at 09.21.34.png

Screen Shot 2021-09-11 at 09.27.36.png
 
À vì khi tôi disable ActiveX thì nó báo lỗi như trên. Khi bạn thiết kế kéo thả ComboBox ActiveX vô Form thì mặc định nó Embed control vào và cả cái thư viện FM20.dll luôn.
Test trên máy tôi thì có đủ thư viện FM20.dll trong Reference mà vẫn báo lỗi nhé.

View attachment 265852

View attachment 265854
Hôm qua mình có làm như hướng dẫn ở bài #7 và cũng có vào Enable Active X như bạn luôn nên giờ đã được rồi.
Có điều phương án viết file hướng dẫn thì tạm xài được chứ chưa hài lòng 100%, có nhiều học viên lớn tuổi không rành nhiều về ecxel nên mình nghĩ kêu họ chỉnh như hình thì cũng hơi bất tiện, chưa tối ưu lắm.
Sáng giờ ngồi mò mẫm mình mới thay đổi thử cấu trúc bên sheet Tinh_ThanhPho theo 1 hướng khác thì thấy nó ra kết quả cũng gần như giống với mong muốn của mình rồi nè.

1631328184980.png
Kết quả :
1631328323118.png 1631328605302.png

Mình đặt name , rồi ở cột F thì dùng data validation =OFFSET(TinhThanhStart,MATCH(E3,TinhThanhPhoColumn,0)-1,1,COUNTIF(TinhThanhPhoColumn,E3),1)

Cột G dùng Data Validation :
=OFFSET(QuanHuyenStart,MATCH(F3,QuanHuyenColumn,0)-1,1,COUNTIF(QuanHuyenColumn,F3),1)

Phần name thì đặt vậy
1631328917379.png

Làm xong rồi thì thấy phương án Data Validation có 1 thứ chưa hài lòng lắm, đó là do danh sách khá dài nên kéo lên xuống tìm Quận huyện phường xã cũng hơi rối mắt và chưa tiện lắm. Suy nghĩ mãi vẫn chưa có 1 ý tưởng nào tối ưu hơn

Nhớ có 1 lần đọc trên GPE có 1 cách làm mình nghĩ có thể áp dụng được cho trường hợp này, nhưng không nhớ từ khóa nên không tìm ra bài viết đó.
Kiểu làm như vậy nè :
ví dụ cột A chứa 1 danh sách tên phường xã . Ở cột G, khi mình nhập 1 chữ cái bất kỳ, nó sẽ list sẵn 1 danh sách (lấy trong cột A, những ô nào có chữ cái từ bên trái đếm qua giống với chữ cái mình vừa nhập).
Ví dụ : cột F, chọn H. Châu Đức. Cột G, khi mình gõ X. B (tới chữ B thì nó sẽ list ra 1 danh sách :
X. Bàu Chinh
X . Bình Ba
X. Bình Giã
X. Bình Trung

Tới đây, nếu tiếp tục gõ X. Bì (tới chữ ì) thì nó sẽ list ra danh sách
X. Bình Ba
X. Bình Giã
X. Bình Trung
như vậy sẽ ổn và hay hơn
 

File đính kèm

Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom