Phép tìm kiếm trả về nhiều dòng

Liên hệ QC

doanthuha203

Thành viên chính thức
Tham gia
6/10/08
Bài viết
53
Được thích
4
Cho em hỏi làm cách nào bên sheet tổng hợp trả về nhiều dòng do mình dò tìm cùng một giá trị là số chứng từ. Khi mình nhập số chứng từ thì sẽ trả về nhiều dòng. Nếu dùng hàm vlookup thì chỉ trả về một giá trị.
 

File đính kèm

Bạn xem trong file

Nếu cần, ta có thể chuyển thành hàm người dùng luôn.
 

File đính kèm

Cho em hỏi làm cách nào bên sheet tổng hợp trả về nhiều dòng do mình dò tìm cùng một giá trị là số chứng từ. Khi mình nhập số chứng từ thì sẽ trả về nhiều dòng. Nếu dùng hàm vlookup thì chỉ trả về một giá trị.

Cái này dùng Pivot thôi:
 

File đính kèm

Em dùng hàm của anh ChanhTQ@ hướng dẫn nhưng không biết cách áp dụng cho 1 file khác với yêu cầu tương tự. Anh hướng dẫn thêm giúp em về cách sửa lại hàm này được không ạ?
 
Đó chưa f ải là hàm; chỉ là macro sự kiện

Em không biết cách áp dụng cho 1 file khác với yêu cầu tương tự. Hướng dẫn thêm về cách sửa lại hàm này được không ạ?

Mình diễn dịch để bạn hiểu các công việc mà macro làm, như sau:

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) 
'Nếu ta thay đổi DL (dữ liệu) của ô [E3] thì macro sẻ thực hiện dòng lệnh thức 2 trở về sau:'
1 If Not Intersect(Target, [E3]) Is Nothing Then
' Khai báo các biến cần dùng:'
    Dim Rng As Range, Sh As Worksheet, sRng As Range
    Dim MyAdd As String
' Gán trang 'NhapLieu} vô biến đã khai báo:'    
3    Set Sh = Sheets("NhapLieu")   
'Lấy vùng có DL của cột 'A' trang tính "NhapLieu" gán vô biến đã khai báo:'
    Set Rng = Sh.Range(Sh.[A1], Sh.[A65500].End(xlUp))
'Tạo bãi đáp cho dữ liệu sẽ được macro tìm ra, bằng cách xoá DL cũ:'
5    [A5].Resize(Rng.Rows.Count, 6).ClearContents
'Tìm mã cần thiết trên vùng mà biến Rng đang lưu trữ:'
    Set sRng = Rng.Find([E3].Value, , xlFormulas, xlWhole)
'Nếu tìm thầy thì thực hiện các lệnh trước dòng lệnh 15:'
7    If Not sRng Is Nothing Then
'Lấy địa chỉ tìm thấy gán vô biến chuỗi đã khai báo:'
        MyAdd = sRng.Address
'Tạo vòng lặp đến dòng lệnh 14 để tìm hếu các mã có trong vùng thuộc biện Rng:'
9        Do
 'TB (thông báo) sẽ làm việc với ô dưới 1 ô so với ô cuối cùng thuộc cột "A" có DL:'  
            With [A65500].End(xlUp).Offset(1)
'Cả 5 ô cùng dòng bắt đầu từ ô đã TB được gán trị từ 5 ô kể từ ô tìm thấy về fía fải:'
11                .Resize(, 5).Value = sRng.Offset(, 1).Resize(, 5).Value
            End With                          'Kết thúc TB'
 'Tìm tiếp tục cho đến khi. . . '
13            Set sRng = Rng.FindNext(sRng)
'. . . .  Không còn tìm thấy:'
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
' Nếu không tìm thấy:'
15    Else
        MsgBox "Nothing"   'Hiện hộp thoại báo cho biết không tìm ra:'
17    End If
 End If
End Sub

Các chú í khi sử dụng macro sự kiện này trên trang tính của 1 workbook khác:

(|) Ô [E3] có 1 danh sách mã (duy nhứt) để chọn (Validation)

(|) CSDL có trên trang tính tên là 'NhapLieu'; Nếu tên khác thì đổi lại cho fù hợp.

(|) Nếu bạn cần kết quả từ hàm người dùng thì cho biết í kiến để còn ngâm cứu khả năng giải quyết tiếp cho bạn

Thân ái!
 
Cám ơn HYen17 nhiều! Em đã sửa được file Tìm kiếm của em rồi. Thanks a lot.
 
E muốn thay đổi bãi đáp cho dữ liệu do macro tạo ra thì như thế nào a.? Ví dụ, tạo bãi đáp ở cells khác. Vì em thử sửa dòng này thành [A7] mà không được "5 [A5].Resize(Rng.Rows.Count, 6).ClearContents"
 
Em thử sửa dòng này thành [A7] mà không được "5 [A5].Resize(Rng.Rows.Count, 6).ClearContents"

Ngoài chuyện sửa câu lệnh như vậy, bạn còn fải có hành vi vầy:
Lấy chuốt tô chọn 2 dòng 4 & 5 & vô mê nu Insert để thêm 2 dòng mới trước khi chạy macro

Chúc thành công.
 
Anh xem sửa lại file giúp em với. Em sửa không có được. -\\/.

Các tiền bối giúp em với. Thanks a lot!
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Đó chưa f ải là hàm; chỉ là macro sự kiện



Mình diễn dịch để bạn hiểu các công việc mà macro làm, như sau:

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'Nếu ta thay đổi DL (dữ liệu) của ô [E3] thì macro sẻ thực hiện dòng lệnh thức 2 trở về sau:'
1 If Not Intersect(Target, [E3]) Is Nothing Then
' Khai báo các biến cần dùng:'
    Dim Rng As Range, Sh As Worksheet, sRng As Range
    Dim MyAdd As String
' Gán trang 'NhapLieu} vô biến đã khai báo:'  
3    Set Sh = Sheets("NhapLieu") 
'Lấy vùng có DL của cột 'A' trang tính "NhapLieu" gán vô biến đã khai báo:'
    Set Rng = Sh.Range(Sh.[A1], Sh.[A65500].End(xlUp))
'Tạo bãi đáp cho dữ liệu sẽ được macro tìm ra, bằng cách xoá DL cũ:'
5    [A5].Resize(Rng.Rows.Count, 6).ClearContents
'Tìm mã cần thiết trên vùng mà biến Rng đang lưu trữ:'
    Set sRng = Rng.Find([E3].Value, , xlFormulas, xlWhole)
'Nếu tìm thầy thì thực hiện các lệnh trước dòng lệnh 15:'
7    If Not sRng Is Nothing Then
'Lấy địa chỉ tìm thấy gán vô biến chuỗi đã khai báo:'
        MyAdd = sRng.Address
'Tạo vòng lặp đến dòng lệnh 14 để tìm hếu các mã có trong vùng thuộc biện Rng:'
9        Do
'TB (thông báo) sẽ làm việc với ô dưới 1 ô so với ô cuối cùng thuộc cột "A" có DL:'
            With [A65500].End(xlUp).Offset(1)
'Cả 5 ô cùng dòng bắt đầu từ ô đã TB được gán trị từ 5 ô kể từ ô tìm thấy về fía fải:'
11                .Resize(, 5).Value = sRng.Offset(, 1).Resize(, 5).Value
            End With                          'Kết thúc TB'
'Tìm tiếp tục cho đến khi. . . '
13            Set sRng = Rng.FindNext(sRng)
'. . . .  Không còn tìm thấy:'
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
' Nếu không tìm thấy:'
15    Else
        MsgBox "Nothing"   'Hiện hộp thoại báo cho biết không tìm ra:'
17    End If
End If
End Sub

Các chú í khi sử dụng macro sự kiện này trên trang tính của 1 workbook khác:

(|) Ô [E3] có 1 danh sách mã (duy nhứt) để chọn (Validation)

(|) CSDL có trên trang tính tên là 'NhapLieu'; Nếu tên khác thì đổi lại cho fù hợp.

(|) Nếu bạn cần kết quả từ hàm người dùng thì cho biết í kiến để còn ngâm cứu khả năng giải quyết tiếp cho bạn

Thân ái!
Nếu mình nhặt dữ liệu bên sheet "Nhaplieu" chỉ các cột B, C, E, F ... (nhặt theo cột) và trả về các cột bên sheet "Tổng hợp không liền mạch ví dụ như C (DL) = E (TH); B (DL) = C (TH) ... thì code viết thế nào được bạn
 
Web KT

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

Back
Top Bottom