Dò tìm từng mã có trong danh sách cho sẵn để lấy các dòng dữ liệu

Liên hệ QC

Đình Phán

Thành viên thường trực
Tham gia
23/11/10
Bài viết
232
Được thích
68
Giới tính
Nam
Nghề nghiệp
kt
Chào các Anh/Chị,

Em có bài toán này, loay hoay mãi chưa ra kết quả.
Em muốn tìm trong 1 cột, giá trị nào có trong 1 danh sách cho sẵn thì lấy dữ liệu của dòng đó.
Trường hợp 1 giá trị thì em tìm và lấy được, tuy nhiên cả 1 danh sách thì em lại bị vướng, em cho vào For Each...Next nhưng có vẻ không đúng.

Mong Anh/Chị giúp đỡ. Em cảm ơn!

Sub MaNo()
Dim Sh As Worksheet, Arr()
Dim Rws As Long, I&, J&, W&, X&
Dim Rng As Range
Dim Ma As Variant
Set Sh = ThisWorkbook.Worksheets("NKC")
Set Rng = ThisWorkbook.Worksheets("SoChiTiet").Range("I2:I17")
With Sh.[A1]
Rws = .CurrentRegion.Rows.Count
Arr() = .Resize(Rws, 106).Value
End With
For Each Ma In Rng
'MA NO
ReDim dArr(1 To Rws, 1 To 5)

For I = 1 To UBound(Arr())
If Arr(I, 6) = Ma.Value Then
W = 1 + W
dArr(W, 1) = Arr(I, 6)
dArr(W, 2) = Arr(I, 32)
dArr(W, 3) = Arr(I, 4)
dArr(W, 4) = Arr(I, 5)
dArr(W, 5) = Arr(I, 28)
End If
Next I
If W Then
'Sheets("SoChiTiet").[A3].Resize(65000, 7).ClearContents
Sheets("SoChiTiet").[A3].Resize(W, 5).Value = dArr()
End If
Next Ma
End Sub
 
Chào các Anh/Chị,

Em có bài toán này, loay hoay mãi chưa ra kết quả.
Em muốn tìm trong 1 cột, giá trị nào có trong 1 danh sách cho sẵn thì lấy dữ liệu của dòng đó.
Trường hợp 1 giá trị thì em tìm và lấy được, tuy nhiên cả 1 danh sách thì em lại bị vướng, em cho vào For Each...Next nhưng có vẻ không đúng.

Mong Anh/Chị giúp đỡ. Em cảm ơn!
Bạn thử chuyển đoạn
Mã:
If W Then
        'Sheets("SoChiTiet").[A3].Resize(65000, 7).ClearContents
        Sheets("SoChiTiet").[A3].Resize(W, 5).Value = darr()
 End If
ra sau vòng lặp của Ma nhé!
 
Upvote 0
Bạn thử chuyển đoạn
Mã:
If W Then
        'Sheets("SoChiTiet").[A3].Resize(65000, 7).ClearContents
        Sheets("SoChiTiet").[A3].Resize(W, 5).Value = darr()
 End If
ra sau vòng lặp của Ma nhé!
Em thử rồi, vẫn không được ạ.
Em gửi file đính kèm để nhìn trực quan ạ.
 

File đính kèm

  • So chi tiet.xlsb
    2.3 MB · Đọc: 14
Upvote 0
Em thử rồi, vẫn không được ạ.
Em gửi file đính kèm để nhìn trực quan ạ.
Thử dùng code sau thử nhé:
Mã:
Sub LayDL_HLMT()
    Dim cn As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No"""
    Sheet9.Range("A3").CopyFromRecordset cn.Execute("Select F30,F32,F4,F5,F29 from [NKC$A2:DB] a inner join [SoChiTietCo$I:I] b on a.F30=b.F1&'_abcd'")
    
End Sub
 
Upvote 0
Thử dùng code sau thử nhé:
Mã:
Sub LayDL_HLMT()
    Dim cn As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No"""
    Sheet9.Range("A3").CopyFromRecordset cn.Execute("Select F30,F32,F4,F5,F29 from [NKC$A2:DB] a inner join [SoChiTietCo$I:I] b on a.F30=b.F1&'_abcd'")
   
End Sub
Bác toàn dùng code ngắn quá.
Em đang tìm hiểu món ADO này mà thấy khó nhằn quá.
 
Upvote 0
Cảm ơn anh vanthinh3101 và Smod Hai Lúa Miền Tây
Em muốn nâng cấp chút thì làm thế nào ạ?
Cụ thể:
Em muốn lọc cả trường Tài khoản Nợ và Tài khoản Có tương tự trong danh sách cho sẵn nữa ạ.
Em có dùng code dưới nhưng lại không ra kết quả. Cách của Smod HLMT thì quá cao so với em nên em không tùy biến được.

Sub MaNo()
Dim Sh As Worksheet, Arr()
Dim Rws As Long, I&, J&, W&, X&
Dim RngDoiTac As Range
Dim RngTaiKhoanNo As Range
Dim RngTaiKhoanCo As Range
Dim MaDoiTac As Variant
Dim TaiKhoanNo As Variant
Dim TaiKhoanCo As Variant
Set Sh = ThisWorkbook.Worksheets("NKC")
Set RngDoiTac = ThisWorkbook.Worksheets("SoChiTiet").Range("I2:I17")
Set RngTaiKhoanNo = ThisWorkbook.Worksheets("SoChiTiet").Range("L2:L9")
Set RngTaiKhoanCo = ThisWorkbook.Worksheets("SoChiTiet").Range("M2:M3")
With Sh.[A1]
Rws = .CurrentRegion.Rows.Count
Arr() = .Resize(Rws, 106).Value
End With
ReDim dArr(1 To Rws, 1 To 5)
'MA NO
For Each MaDoiTac In RngDoiTac
For Each TaiKhoanNo In RngTaiKhoanNo
For Each TaiKhoanCo In RngTaiKhoanCo
For I = 1 To UBound(Arr())
If Arr(I, 6) = MaDoiTac.Value And Arr(I, 4) = TaiKhoanNo And Arr(I, 5) = TaiKhoanCo Then
W = 1 + W
dArr(W, 1) = Arr(I, 6)
dArr(W, 2) = Arr(I, 32)
dArr(W, 3) = Arr(I, 4)
dArr(W, 4) = Arr(I, 5)
dArr(W, 5) = Arr(I, 28)
ElseIf Arr(I, 6) = MaDoiTac.Value And Arr(I, 4) = TaiKhoanCo And Arr(I, 5) = TaiKhoanNo Then
W = 1 + W
dArr(W, 1) = Arr(I, 6)
dArr(W, 2) = Arr(I, 32)
dArr(W, 3) = Arr(I, 4)
dArr(W, 4) = Arr(I, 5)
dArr(W, 5) = Arr(I, 28)
End If
Next I
Next TaiKhoanCo
Next TaiKhoanNo
Next MaDoiTac
If W Then
Sheets("SoChiTiet").[A3].Resize(65000, 7).ClearContents
Sheets("SoChiTiet").[A3].Resize(W, 5).Value = dArr()
End If
End Sub
 
Upvote 0
Cảm ơn anh vanthinh3101 và Smod Hai Lúa Miền Tây
Em muốn nâng cấp chút thì làm thế nào ạ?
Cụ thể:
Em muốn lọc cả trường Tài khoản Nợ và Tài khoản Có tương tự trong danh sách cho sẵn nữa ạ.
Em có dùng code dưới nhưng lại không ra kết quả. Cách của Smod HLMT thì quá cao so với em nên em không tùy biến được.
Tùy biến cụ thể như thế nào vậy bạn?
 
Upvote 0
Tùy biến cụ thể như thế nào vậy bạn?
Tức là em muốn kê ra chi tiết các dòng của phần Mã thỏa mãn điều kiện Tài khoản Nợ trong Danh sách và Tài khoản có trong danh sách.
(Trước đây thì liệt kê hết các dòng có Mã trong Danh sách, sau đó em phải lọc tay để xóa các dòng không cần thiết đi, nay em muốn nó tự động luôn)
Em có tải lại file đính kèm ở bài #3 rồi ạ.
 
Upvote 0
Tôi đang đọc bài, đến đoạn này thì khựng lại.
Tại sao lại có chuyện gọi ngừoi này bằng anh và ngừoi kia bằng ếch mót vậy?
Gửi VetMini,
Cảm ơn đã khựng lại. Tôi có đọc các bài viết của bạn gần đây,
Nếu có topic Ghét ai nhất GPE tôi sẽ vote cho bạn đó.
Thân!
 
Upvote 0
Gửi VetMini,
Cảm ơn đã khựng lại. Tôi có đọc các bài viết của bạn gần đây,
Nếu có topic Ghét ai nhất GPE tôi sẽ vote cho bạn đó.
Thân!

Bạn có đọc nhưng thiếu mất hết 1 bài quan trọng.
Trong bà ấy, tôi có nói rằng ở diễn đàn này có tới 1000 ngừoi ghét tôi. Người được tôi nói câu này nhập vào số 1001.
Và bây giờ thì bạn được hân hạnh làm con số thứ 1002.
 
Upvote 0
Bạn có đọc nhưng thiếu mất hết 1 bài quan trọng.
Trong bà ấy, tôi có nói rằng ở diễn đàn này có tới 1000 ngừoi ghét tôi. Người được tôi nói câu này nhập vào số 1001.
Và bây giờ thì bạn được hân hạnh làm con số thứ 1002.
Nếu vẫn chưa hiểu thì có thể đọc lại bài #11 nhé. Không ai giới hạn việc đọc lại đâu.
 
Upvote 0
Với bạn thì tôi là một kẻ đứng đầu. Với tôi thì bạn đứng một ngàn lẻ mấy, tuốt tận đuôi. Có gì đâu mà gọi là chưa hiểu.
 
Upvote 0
Web KT
Back
Top Bottom