Trích dữ liệu từ bảng chính theo danh sách

Liên hệ QC
Cám ơn bạn Ba Tê nhiều. Sau khi sử dụng mình thấy file mới (LuXuBu4) giải quyết được yêu cầu của mình nhưng lại phát sinh:
1. Do lấy chữ quá chính xác nên nó phân biệt luôn kiểu chữ hoa và thường, cũng hơi có tí bất tiện :). Trong khi file cũ (RutTrichDuLieu2) lại linh hoạt hơn. Nếu kết hợp cả 2 thì quá tốt :) .
2. Dữ liệu lấy được fix luôn theo cột cần tìm, chứ không linh động như file cũ, là chỉ cần ghi đúng tiêu đề là có thể lấy bất kỳ cột nào miễn là giống tiêu đề.

Chắc mình sẽ quay lại quay lại file cũ (RutTrichDuLieu2), chịu khó don dẹp dữ liệu trước khi filter, và không "làm biếng" nữa.

Ngoài ra cho mình hỏi là có thể copy nút lệnh "GPE" này ra thêm sheet khác không? Ý mình là cùng 1 file excel (RutTrichDuLieu2) nhưng 2 nút lệnh ở 2 sheet khác nhau. Ví dụ "Filter 1" lấy dữ liệu từ "Source 1, và kết hợp với LuXuBu theo file cũ để tạo bảng Pivot, trong khi đó LuXuBu sẽ lấy từ Source 2, v.v... và v.v...... (THAM QUÁ NHỈ) :).

Giải thích thêm yêu cầu cần làm: Mình cần so sánh giữa bảng vật tư chuẩn trong các đơn hàng; trong đó có nhiều Option do khách hàng chọn; với số liệu vật tư xuất thực tế cho các đơn hàng đó. Nên cần "Gom" dữ liệu lại thành 1 bảng và làm PIVOT.

Cám ơn nhé!
1/ Chữ Hoa, thường giải quyết xong.
2/ Cho bạn tự chọn lấy dữ liệu các cột theo số cột ở dòng 2 sheet From..., nhập vào dòng 3 sheet Filter, Không cần biết tiêu đề.
- Ngoài ra hổng hiểu, bạn cứ thử.
 

File đính kèm

  • LuXuBu5.rar
    276.2 KB · Đọc: 8
Lần chỉnh sửa cuối:
Chào bạn Ba Tê, lại có chút phát sinh, là nếu trong cột "JobNumber" trong sheet "From System" có dữ liệu trống, khi nhấn "GPE" thì vẫn lấy luôn dữ liệu trống này.

Nếu mình thêm cột vào sheet "Filter" thì sẽ báo lỗi, có cách nào linh động cho mình thêm cột để lấy thêm dữ liệu không? Kể cả bên sheet "From System" cũng như vậy.

Và cho mình hỏi là sau khi viết code, tạo nút "GPE" thì làm sao add lệnh code này vào nút lệnh thế? :)

Cám ơn bạn trước nhé!

1529060857496.png

1529060880544.png

1529061166416.png
 

File đính kèm

  • LuXuBu5-1.rar
    1.1 MB · Đọc: 2
Chào bạn Ba Tê, lại có chút phát sinh, là nếu trong cột "JobNumber" trong sheet "From System" có dữ liệu trống, khi nhấn "GPE" thì vẫn lấy luôn dữ liệu trống này.

Nếu mình thêm cột vào sheet "Filter" thì sẽ báo lỗi, có cách nào linh động cho mình thêm cột để lấy thêm dữ liệu không? Kể cả bên sheet "From System" cũng như vậy.
1/ Do bạn nhập không liên tục từ A3 xuống (A3 trống) nên code lấy điều kiện là trống. (Đã sửa)
2/ Muốn linh động thì bạn phải nói trước từ đầu, thấy sao làm vậy chứ ai biết bạn muốn "linh động". (Đã sửa)
Có lẽ đến Luxubu6 là cuối cùng của loạt Luxubu ?
 

File đính kèm

  • LuXuBu6.rar
    275.6 KB · Đọc: 19
1/ Do bạn nhập không liên tục từ A3 xuống (A3 trống) nên code lấy điều kiện là trống. (Đã sửa)
2/ Muốn linh động thì bạn phải nói trước từ đầu, thấy sao làm vậy chứ ai biết bạn muốn "linh động". (Đã sửa)
Có lẽ đến Luxubu6 là cuối cùng của loạt Luxubu ?

Anh Ba Tê cho em hỏi nếu trường hợp lọc 2 điều kiện trở lên thì mình cứ thêm dòng lệnh như bên dưới dưới đúng không anh?
Em thử thêm và chạy thì đúng là nó lọc thêm điều kiện 2 nhưng khi ta bỏ điều kiện 1 thì code không hiểu điều kiện thứ 2.

Mã:
If .Exists(UCase(sArr(I, 6))) Then ' dieu kien 1
If .Exists(UCase(sArr(I, 7))) Then ' dieu kien 2
.......
........
 End If
End If

Code của anh Ba Tê

Mã:
Sub Loc_DuLieu()
Dim sArr(), Arr, I As Long, J As Long, K As Long, R As Long, Col As Long, DK As Range, Cll As Range
With Sheets("From System")
    sArr = .Range("A1", .Range("A3").End(xlDown)).Resize(, .Range("A1").End(xlToRight).Column).Value
    R = UBound(sArr)
    Arr = Sheets("Filter").Range("D3", Sheets("Filter").Range("D3").End(xlToRight)).Value
    Col = UBound(Arr, 2)
End With
ReDim dArr(1 To R, 1 To Col)
Set DK = Sheets("Filter").Range("A3", Sheets("Filter").Range("A100").End(xlUp))
With CreateObject("Scripting.Dictionary")
    For Each Cll In DK
        If Cll <> Empty Then .Item(UCase(Cll.Value)) = ""
    Next Cll
    For I = 1 To R
        If .Exists(UCase(sArr(I, 8))) Then
            K = K + 1
            For J = 1 To Col
                dArr(K, J) = sArr(I, Arr(1, J))
            Next J
        End If
    Next I
End With
Sheets("Filter").Range("D4").Resize(1000, Col).ClearContents
If K Then Sheets("Filter").Range("D4").Resize(K, Col) = dArr
Set DK = Nothing
End Sub
Mã:
 
Cho mình hỏi nếu mở rộng ra là lấy dữ liệu từ file đang đóng ở thư mục khác (không cần copy cả sheet vào rồi mới lọc theo điều kiện) thì làm sao vậy?
 
Cho mình hỏi nếu mở rộng ra là lấy dữ liệu từ file đang đóng ở thư mục khác (không cần copy cả sheet vào rồi mới lọc theo điều kiện) thì làm sao vậy?
Yêu cầu này khác chủ đề. Vì vậy, nên mở Topic mới với tiêu đề là "Lọc dữ liệu từ 1 sheet của File đang đóng".
Nên đính đính kèm File, vì nó cần biết chính xác tên sheet và tên File.
 
Yêu cầu này khác chủ đề. Vì vậy, nên mở Topic mới với tiêu đề là "Lọc dữ liệu từ 1 sheet của File đang đóng".
Nên đính đính kèm File, vì nó cần biết chính xác tên sheet và tên File.
:) , vì mình mở chủ đề này, và đã được giúp đỡ trích lọc dữ liệu theo yêu cầu nhưng dữ liệu lấy trong cùng 1 file. Mình chỉ nghĩ là lập trình đường dẫn file thế nào đó thì có thể lấy được dữ liệu từ file đang đóng theo form mẫu và code đã có sẵn trong topic này :)
 
Web KT
Back
Top Bottom