Lấy dữ liệu đã filter trong excel qua listbox

Quảng cáo

SaiDon

Thành viên mới
Tham gia ngày
25 Tháng bảy 2011
Bài viết
11
Được thích
0
Điểm
301
Tuổi
41
Thân gửi các bạn,

Mình muốn lấy dữ liệu đã filter từ Excel để hiển thị lên listbox

Mình có gửi hình ảnh và file excel, nhờ các bạn chỉ giúp

Cảm ơn các bạn nhiều !!!
 

File đính kèm

  • GetDatatoListbox.xlsm
    16.4 KB · Đọc: 20
  • Picture.png
    Picture.png
    11.4 KB · Đọc: 31

DarkWanderer

Thành viên chính thức
Tham gia ngày
16 Tháng mười hai 2019
Bài viết
93
Được thích
55
Điểm
118
Tuổi
28
Nơi ở
Q. Tân Bình
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
 

SaiDon

Thành viên mới
Tham gia ngày
25 Tháng bảy 2011
Bài viết
11
Được thích
0
Điểm
301
Tuổi
41
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
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? Thanks
 

SaiDon

Thành viên mới
Tham gia ngày
25 Tháng bảy 2011
Bài viết
11
Được thích
0
Điểm
301
Tuổi
41
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
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.
 
Chỉnh sửa lần cuối bởi điều hành viên:

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
12,168
Được thích
18,363
Điểm
5,168
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?
 

SaiDon

Thành viên mới
Tham gia ngày
25 Tháng bảy 2011
Bài viết
11
Được thích
0
Điểm
301
Tuổi
41
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
Dữ liệu nhiều bạn ah,
Mình đang đưa dữ liệu vào listbox qua thuộc tính RowSource. Nếu vẫn dùng phương pháp này và can thiệp chỉ lấy những dòng được lọc thì hay quá !!
 
Lần chỉnh sửa cuối:

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
4,074
Được thích
6,447
Điểm
2,568
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.
Toà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
 
Lần chỉnh sửa cuối:

HieuCD

Chuyên gia GPE
Tham gia ngày
14 Tháng chín 2010
Bài viết
7,801
Được thích
15,676
Điểm
4,668
Toà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
Nhầm tí xíu
ReDim kq(1 To 2, 1 To UBound(dulieu, 2))
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
4,074
Được thích
6,447
Điểm
2,568
Nhầm tí xíu
ReDim kq(1 To 2, 1 To UBound(dulieu, 2))
Đú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).

Bài #7 phải sửa thành
Mã:
ReDim kq(1 To 2, 1 To UBound(dulieu, 1))

Tôi đã sửa lại cả trong bài #7.
 

SaiDon

Thành viên mới
Tham gia ngày
25 Tháng bảy 2011
Bài viết
11
Được thích
0
Điểm
301
Tuổi
41
Toà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
Cảm ơn bạn, mình sử dụng code này rất ok
 
Quảng cáo
Top Bottom