Mình không muốn chọn giải pháp load kết quả ra chổ khác, có cách nào lấy trực tiếp dữ liệu gốc đó lên luôn ko? ThanksBạn dùng Advanced Filter lọc kết quả ra 1 vùng nào đó, sau đó load vùng đó lên Listbox là xong, hoặc lọc theo mảng 2 chiều, sau đó load mảng kết quả vào Listbox
Bạn giúp mình cái code lọc theo mảng 2 chiều được ko bạn, mình có gửi file excel lên nhờ bạn code trực tiếp giúp, mình không rành VB lắm, cảm ơn bạn nhiều.Bạn dùng Advanced Filter lọc kết quả ra 1 vùng nào đó, sau đó load vùng đó lên Listbox là xong, hoặc lọc theo mảng 2 chiều, sau đó load mảng kết quả vào Listbox
Dữ liệu nhiều bạn ah,Danh sách nguồn dùng để lọc chỉ gồm 3 dòng & 1 cột, Vậy sau khi lọc thì chỉ còn 1 dòng hay cùng lắm là 2 dòng, Thì nên đưa kết quả lọc lên TextBox hay ComboBox được chăng?dữ liêu
Toàn bộ code trong module frmTestBạn giúp mình cái code lọc theo mảng 2 chiều được ko bạn, mình có gửi file excel lên nhờ bạn code trực tiếp giúp, mình không rành VB lắm, cảm ơn bạn nhiều.
Option Explicit
Private Sub btnTim_Click()
Dim lastRow As Long, r As Long, count As Long, sDK As String, dulieu(), kq()
With ThisWorkbook.Worksheets("NganhHang")
lastRow = .Cells(Rows.count, "B").End(xlUp).Row ' dong cuoi cung o cot B
If lastRow < 5 Then Exit Sub ' neu khong co du lieu thi don do choi
dulieu = .Range("A5:B" & lastRow).Value ' lay du lieu vao mang dulieu
End With
If txtDieuKien.Value = "" Then
lstDuLieu.List = dulieu ' dieu kien khong co nen hien thi toan bo du lieu trong ListBox
Else
lstDuLieu.Clear ' xoa ket qua cu
sDK = txtDieuKien.Value ' doan can tim
ReDim kq(1 To 2, 1 To UBound(dulieu, 1)) ' ta nhap ket qua loc vao ListBox qua thuoc tinh Column. Dong (cot) cua mang kq la cot (dong) trong ListBox
For r = 1 To UBound(dulieu, 1) ' duyet tung dong cua mang dulieu
If InStr(1, dulieu(r, 2), sDK, vbTextCompare) > 0 Then ' tim thay doan can tim
count = count + 1 ' tang so ket qua them 1
kq(1, count) = dulieu(r, 1) ' STT nhap vao dong 1 cua cot count
kq(2, count) = dulieu(r, 2) ' Ten Nganh Hang nhap vao dong 2 cua cot count
End If
Next r
If count Then ' neu co ket qua loc
ReDim Preserve kq(1 To 2, 1 To count) ' cat bot cot trong mang kq de vua voi so ket qua
lstDuLieu.Column = kq ' nhap mang ket qua kq vao ListBox thong qua thuoc tinh Column (khong dung thuoc tinh List)
End If
End If
End Sub
Private Sub UserForm_Initialize()
lstDuLieu.ColumnCount = 2
lstDuLieu.ColumnWidths = "50;"
txtDieuKien.SetFocus
End Sub
Nhầm tí xíuToàn bộ code trong module frmTest
Mã:Option Explicit Private Sub btnTim_Click() Dim lastRow As Long, r As Long, count As Long, sDK As String, dulieu(), kq() With ThisWorkbook.Worksheets("NganhHang") lastRow = .Cells(Rows.count, "B").End(xlUp).Row ' dong cuoi cung o cot B If lastRow < 5 Then Exit Sub ' neu khong co du lieu thi don do choi dulieu = .Range("A5:B" & lastRow).Value ' lay du lieu vao mang dulieu End With If txtDieuKien.Value = "" Then lstDuLieu.List = dulieu ' dieu kien khong co nen hien thi toan bo du lieu trong ListBox Else lstDuLieu.Clear ' xoa ket qua cu sDK = txtDieuKien.Value ' doan can tim ReDim kq(1 To 2, 1 To UBound(dulieu, 2)) ' ta nhap ket qua loc vao ListBox qua thuoc tinh Column. Dong (cot) cua mang kq la cot (dong) trong ListBox For r = 1 To UBound(dulieu, 1) ' duyet tung dong cua mang dulieu If InStr(1, dulieu(r, 2), sDK, vbTextCompare) > 0 Then ' tim thay doan can tim count = count + 1 ' tang so ket qua them 1 kq(1, count) = dulieu(r, 1) ' STT nhap vao dong 1 cua cot count kq(2, count) = dulieu(r, 2) ' Ten Nganh Hang nhap vao dong 2 cua cot count End If Next r If count Then ' neu co ket qua loc ReDim Preserve kq(1 To 2, 1 To count) ' cat bot cot trong mang kq de vua voi so ket qua lstDuLieu.Column = kq ' nhap mang ket qua kq vao ListBox thong qua thuoc tinh Column (khong dung thuoc tinh List) End If End If End Sub Private Sub UserForm_Initialize() lstDuLieu.ColumnCount = 2 lstDuLieu.ColumnWidths = "50;" txtDieuKien.SetFocus End Sub
Đúng rồi. Số dòng của mảng kq bằng số cột của dulieu, tức bằng 2, còn số cột của kq bằng số dòng của dulieu, tức Ubound(dulieu, 1).Nhầm tí xíu
ReDim kq(1 To 2, 1 To UBound(dulieu, 2))
ReDim kq(1 To 2, 1 To UBound(dulieu, 1))
Cảm ơn bạn, mình sử dụng code này rất okToàn bộ code trong module frmTest
Mã:Option Explicit Private Sub btnTim_Click() Dim lastRow As Long, r As Long, count As Long, sDK As String, dulieu(), kq() With ThisWorkbook.Worksheets("NganhHang") lastRow = .Cells(Rows.count, "B").End(xlUp).Row ' dong cuoi cung o cot B If lastRow < 5 Then Exit Sub ' neu khong co du lieu thi don do choi dulieu = .Range("A5:B" & lastRow).Value ' lay du lieu vao mang dulieu End With If txtDieuKien.Value = "" Then lstDuLieu.List = dulieu ' dieu kien khong co nen hien thi toan bo du lieu trong ListBox Else lstDuLieu.Clear ' xoa ket qua cu sDK = txtDieuKien.Value ' doan can tim ReDim kq(1 To 2, 1 To UBound(dulieu, 1)) ' ta nhap ket qua loc vao ListBox qua thuoc tinh Column. Dong (cot) cua mang kq la cot (dong) trong ListBox For r = 1 To UBound(dulieu, 1) ' duyet tung dong cua mang dulieu If InStr(1, dulieu(r, 2), sDK, vbTextCompare) > 0 Then ' tim thay doan can tim count = count + 1 ' tang so ket qua them 1 kq(1, count) = dulieu(r, 1) ' STT nhap vao dong 1 cua cot count kq(2, count) = dulieu(r, 2) ' Ten Nganh Hang nhap vao dong 2 cua cot count End If Next r If count Then ' neu co ket qua loc ReDim Preserve kq(1 To 2, 1 To count) ' cat bot cot trong mang kq de vua voi so ket qua lstDuLieu.Column = kq ' nhap mang ket qua kq vao ListBox thong qua thuoc tinh Column (khong dung thuoc tinh List) End If End If End Sub Private Sub UserForm_Initialize() lstDuLieu.ColumnCount = 2 lstDuLieu.ColumnWidths = "50;" txtDieuKien.SetFocus End Sub