Xin giúp e về tìm kiếm lấy về nhiều giá trị (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

mjnlove

Thành viên mới
Tham gia
22/5/08
Bài viết
29
Được thích
3
Tình hình là e có 1 câu hỏi như thế này. Trong Excel khi tìm kiếm bằng hàm Vlookup chỉ trả một giá trị tương ứng nhưng nếu e muốn lấy được nhiều giá trị tương ứng cùng một lúc thì phải làm thế nào ạ?
Ví dụ Trong tháng 1 có tình hình xuất kho như sau
Số HĐ Tên vật tư
1 A
2 B
3 A
4 C
5 A
Nếu e muốn lọc ra số hóa đơn tương ứng giá trị là A thì phải làm thế nào ạ? (kết quá là 1,3,5). Theo e cũng có tìm hiểu thì sử dụng hàm INDEX nhưng e chưa hiểu lắm về cách làm, mong các anh chị chỉ giáo :D nhân tiện cho e hỏi thêm dùng pivot table có được không và làm như thế nào luôn ạ :(
E xin cảm ơn nhiều :)
File của e có đính kèm bên dưới

 

File đính kèm

cái này trên diễn đàn nhiều lắm
bạn tìm xem
thông thường có 3 cách
1-cthuc mảng
2-dùng cột phụ (dùng offset để dời vùng tìm kiếm)
3- vba
tôi thấy dữ liệu cuả bạn cũng khá nhiều, bạn có muốn là bằng vba ko?
 
cái này trên diễn đàn nhiều lắm
bạn tìm xem
thông thường có 3 cách
1-cthuc mảng
2-dùng cột phụ (dùng offset để dời vùng tìm kiếm)
3- vba
tôi thấy dữ liệu cuả bạn cũng khá nhiều, bạn có muốn là bằng vba ko?

bạn có thể chỉ giúp mình cả 3 cách luôn được không, cám ơn bạn nhiều :D
 
ai giúp e với, e tìm không thấy
 
ai giúp e với, e tìm không thấy

file của bạn bị nhiễm virus hay sao đó, office của tôi nó cảnh báo nếu editing sẻ có hại cho máy
bạn có thể tải file khác lên ko?
thứ nữa là bạn mô tả xem bạn cấn tìm cái gì ở sheet nào
bạn phải nói rỏ thì người ta mới làm dùm bạn được chứ.
lấy cái gì đi tìm? tìm ở đâu? tìm được rồi để nó ở đâu
 
file của bạn bị nhiễm virus hay sao đó, office của tôi nó cảnh báo nếu editing sẻ có hại cho máy
bạn có thể tải file khác lên ko?
thứ nữa là bạn mô tả xem bạn cấn tìm cái gì ở sheet nào
bạn phải nói rỏ thì người ta mới làm dùm bạn được chứ.
lấy cái gì đi tìm? tìm ở đâu? tìm được rồi để nó ở đâu

k phải nhiễm vi rút đâu. vì mình tải từ mail xuống nên khi mở nó cũng hiện như vậy, edit bình thường.
Mình muốn biết những mặt hàng ở sheet 2 nằm ở những hóa đơn nào ở sheet 2013 thì dùng hàm gì, vì ở đây có rất nhiều mặt hàng, mà sort thủ công sẽ rất mất thời gian, nên mình muốn dùng hàm để tự động lọc cho những mặt hàng khác. bạn giúp mình với, mới học exel còn gà qá >.< lọc ra để trên sheet 4 (sheet mới) :D:D Cám ơn bạn nhiều >.<
 
Lần chỉnh sửa cuối:
file nè bạn, không có nhiễm vi rút đâu nhaa:-=
 

File đính kèm

Thử file này xem.
Muốn tìm cái gì thì nhập vào ô G1.

Tôi đang định làm bằng lọc trên sheet1 để lấy kết quả thì thấy bài anh Ba nên thôi không làm.

Anh Ba làm bằng cách duyệt tìm trong sheet1 để lấy kết quả.

Nếu có thể anh đánh giá tốc độ của 2 cách lọc và duyệt danh sách. Cảm ơn
 
Thử file này xem.
Muốn tìm cái gì thì nhập vào ô G1.

Đầu tiên cảm ơn a Ba Tê trước nha :D cách a làm rất hay, nhưng có 1 điểm nhỏ là ví dụ mình gõ tìm bánh răng, nó sẽ hiện tất cả các loại bánh răng luôn (bánh răng, bánh răng A, bánh răng B...). e muốn chỉ lọc ra bánh răng thôi có được không :D

Nhân tiện chỉ e làm với, trên gpe toàn cao thủ k hà..ngưỡng mộ thật :((
 
Lần chỉnh sửa cuối:
Thật ra ban đầu ý của e là làm thế nào để làm được như sheet 4 (có đính kèm file bên dưới): tức là sắp xếp và liệt kê từng loại mặt hàng theo số hóa đơn, ngày tháng... mn chỉ e với >.<
 

File đính kèm

Lần chỉnh sửa cuối:
Thật ra ban đầu ý của e là làm thế nào để làm được như sheet 4 (có đính kèm file bên dưới): tức là sắp xếp và liệt kê từng loại mặt hàng theo số hóa đơn, ngày tháng... mn chỉ e với >.<
đã có bác BeTe làm cho bạn, thôi lỡ làm rồi, cho lên luôn
ở sheet3 G2 có một cái combobox, hãy gõ vào đó một vài chữ cái mặt hàng bạn muốn đi tìm (ví dụ, khí Co2 thì gõ k) rồi nhấp mũi tên sổ xuống chọn mặc hàng nào chính xác muốn lọc
 

File đính kèm

Thật ra ban đầu ý của e là làm thế nào để làm được như sheet 4 (có đính kèm file bên dưới): tức là sắp xếp và liệt kê từng loại mặt hàng theo số hóa đơn, ngày tháng... mn chỉ e với >.<

Không biết "Thật ra bạn đã muốn hết ý chưa?"
Muốn lọc cái gì thì nhập chính xác vào cột A nhé.
Thọt "chú tiểu" 1 cái.
 

File đính kèm

đã có bác BeTe làm cho bạn, thôi lỡ làm rồi, cho lên luôn
ở sheet3 G2 có một cái combobox, hãy gõ vào đó một vài chữ cái mặt hàng bạn muốn đi tìm (ví dụ, khí Co2 thì gõ k) rồi nhấp mũi tên sổ xuống chọn mặc hàng nào chính xác muốn lọc

Cám ơn bạn nhiều nha hihi --=0
 
Không biết "Thật ra bạn đã muốn hết ý chưa?"
Muốn lọc cái gì thì nhập chính xác vào cột A nhé.
Thọt "chú tiểu" 1 cái.

za đúng r :D mà chỉ nhập giới hạn trong những dòng màu hồng thôi hả a..e tính nhập cùng lúc cho tất cả các mặt hàng ở sheet 2 có được không. nhân tiện a chỉ e cách làm với được không, vì e hay phải làm những file như vậy lắm.cám ơn a nhiều >.<
 
Lần chỉnh sửa cuối:
za đúng r :D mà chỉ nhập giới hạn trong những dòng màu hồng thôi hả a..e tính nhập cùng lúc cho tất cả các mặt hàng ở sheet 2 có được không. nhân tiện a chỉ e cách làm với được không, vì e hay phải làm những file như vậy lắm.cám ơn a nhiều >.<

Yêu cầu quái thiệt ta.
Lấy hết tất cả các mặt hàng thì Sort sheet 2013 cho nhanh.
Muốn chọn một số mặt hàng thì Alt+F11, thay cái cũ bằng cái này.
nhân tiện a chỉ e cách làm với được không,
Cái chuyện này thì không chỉ được rồi. Tự nghiên cứu Code thôi.
PHP:
Sub CocCoc()
Application.ScreenUpdating = False
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
[B4:L10000].ClearContents
If [A65000].End(xlUp).Row > 3 Then
    sArr = Range([A3], [A3].End(xlDown)).Value
    For I = 2 To UBound(sArr, 1)
        Tem = UCase(sArr(I, 1))
        If Not Dic.Exists(Tem) Then Dic.Add Tem, Empty
    Next I
    With Sheets("2013")
        sArr = .Range(.[A2], .[A2].End(xlDown)).Resize(, 11).Value
        ReDim dArr(1 To UBound(sArr, 1), 1 To 11)
        For I = 1 To UBound(sArr, 1)
            Tem = UCase(sArr(I, 7))
            If Dic.Exists(Tem) Then
                K = K + 1
                For J = 1 To 11
                    dArr(K, J) = sArr(I, J)
                Next J
            End If
        Next I
        If K Then
            [B4].Resize(K, 11) = dArr
            [B4].Resize(K, 11).Sort Key1:=[H4], Key2:=[B4]
        Else
            MsgBox "Khong co."
        End If
    End With
Else
    MsgBox "Hic Hic Hic"
End If
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub
 
Yêu cầu quái thiệt ta.
Lấy hết tất cả các mặt hàng thì Sort sheet 2013 cho nhanh.
Muốn chọn một số mặt hàng thì Alt+F11, thay cái cũ bằng cái này.

Cái chuyện này thì không chỉ được rồi. Tự nghiên cứu Code thôi.
PHP:
Sub CocCoc()
Application.ScreenUpdating = False
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
[B4:L10000].ClearContents
If [A65000].End(xlUp).Row > 3 Then
    sArr = Range([A3], [A3].End(xlDown)).Value
    For I = 2 To UBound(sArr, 1)
        Tem = UCase(sArr(I, 1))
        If Not Dic.Exists(Tem) Then Dic.Add Tem, Empty
    Next I
    With Sheets("2013")
        sArr = .Range(.[A2], .[A2].End(xlDown)).Resize(, 11).Value
        ReDim dArr(1 To UBound(sArr, 1), 1 To 11)
        For I = 1 To UBound(sArr, 1)
            Tem = UCase(sArr(I, 7))
            If Dic.Exists(Tem) Then
                K = K + 1
                For J = 1 To 11
                    dArr(K, J) = sArr(I, J)
                Next J
            End If
        Next I
        If K Then
            [B4].Resize(K, 11) = dArr
            [B4].Resize(K, 11).Sort Key1:=[H4], Key2:=[B4]
        Else
            MsgBox "Khong co."
        End If
    End With
Else
    MsgBox "Hic Hic Hic"
End If
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub

vâng e cám ơn a nhiều ạ >.< lọc theo sheet 2013 thì phải sort từng mặt hàng, phân loại từng mặt hàng theo số hóa đơn rồi tổng hợp lại rất mất thời gian :(. Vì ví dụ có 200 mặt hàng, phải bấm lọc từng mặt hàng, coi những mặt hàng đấy ở số hóa đơn, ngày tháng nào rồi cop dán vào 1 sheet. Còn ở đây là dùng hàm để tự động không phải sort thủ công như vậy mừ. Tức là đã có tên của 200 mặt hàng, dùng công thức để tự động hiện tất cả số hóa đơn của các mặt hàng ấy, hay nói cách khác sắp xếp sheet 2013 theo từng mặt hàng-tương ứng với những hóa đơn nào >.<
Hì thật ra từ công thức ở sheet GPE của a đã hay lắm rồi, chỉ vì e hơi nhìu chuyện muốn biết thêm ^^~ Một lần nữa cám ơn a nhiều nha. Chúc a ngủ ngon ^^
 
Lần chỉnh sửa cuối:
Yêu cầu quái thiệt ta.
Lấy hết tất cả các mặt hàng thì Sort sheet 2013 cho nhanh.
Muốn chọn một số mặt hàng thì Alt+F11, thay cái cũ bằng cái này.

Cái chuyện này thì không chỉ được rồi. Tự nghiên cứu Code thôi.
PHP:
Sub CocCoc()
Application.ScreenUpdating = False
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
[B4:L10000].ClearContents
If [A65000].End(xlUp).Row > 3 Then
    sArr = Range([A3], [A3].End(xlDown)).Value
    For I = 2 To UBound(sArr, 1)
        Tem = UCase(sArr(I, 1))
        If Not Dic.Exists(Tem) Then Dic.Add Tem, Empty
    Next I
    With Sheets("2013")
        sArr = .Range(.[A2], .[A2].End(xlDown)).Resize(, 11).Value
        ReDim dArr(1 To UBound(sArr, 1), 1 To 11)
        For I = 1 To UBound(sArr, 1)
            Tem = UCase(sArr(I, 7))
            If Dic.Exists(Tem) Then
                K = K + 1
                For J = 1 To 11
                    dArr(K, J) = sArr(I, J)
                Next J
            End If
        Next I
        If K Then
            [B4].Resize(K, 11) = dArr
            [B4].Resize(K, 11).Sort Key1:=[H4], Key2:=[B4]
        Else
            MsgBox "Khong co."
        End If
    End With
Else
    MsgBox "Hic Hic Hic"
End If
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub

Dear bác Ba tê,

Trong trường hợp này mình có thể dùng hàm không?

Thanks bác nhiều nhiều..
 
Chào cả nhà!
Mình cũng có 1 vấn đề tương tự. Nhưng khác 1 chút là: Thay vì mỗi lần chỉ dò 1 mã và trả về tất cả giá trị.
Bài toán của mình yêu cầu là dò mã A lấy hết giá trị của nó rồi lần lượt B và C.
Mong các bạn giúp đỡ.
Mã Giá trị
A 1
B 2
C 4
A 5
C 6
C 7
C 8
B 9
Mình muốn trả về hết giá trị của A rồi đến B và C (có thể là D, E, F....) như sau:
A 1
5
B 2
9
C 4
6
7
8

P/s: Số giá trị của A, B, C là bất kì.
Cám ơn các AC rất nhiều.
 
Lần chỉnh sửa cuối:
@trungtruc0512: Bạn up file lên cho mọi người dễ hình dung nha.
 

Cám ơn bạn đã quan tâm trả lời.
Mình muốn lấy giá trị dựa vào mã đó cho sheet khác và dữ liệu hàng ngàn dòng mình không thể sort được.
Đây là 1 bài toán giống như dùng hàm index để trả về nhiều giá trị. Nhưng nó chỉ dò mỗi lần 1 mã.
Mình muốn dò hết mã này đến mã khác liên tục.

Không biết có ai giúp mình không?
P/s: Mình đã tìm gần 1 năm rồi.
 
Lần chỉnh sửa cuối:
Cám ơn bạn đã quan tâm trả lời.
Mình muốn lấy giá trị dựa vào mã đó cho sheet khác và dữ liệu hàng ngàn dòng mình không thể sort được.
Đây là 1 bài toán giống như dùng hàm index để trả về nhiều giá trị. Nhưng nó chỉ dò mỗi lần 1 mã.
Mình muốn dò hết mã này đến mã khác liên tục.

Không biết có ai giúp mình không?
P/s: Mình đã tìm gần 1 năm rồi.

Nếu tìm lâu quá mà không có công thức thì bạn chịu xài VBA không?
Bạn đưa file mà "Mình muốn lấy giá trị dựa vào mã đó cho sheet khác và dữ liệu hàng ngàn dòng " lên thử xem.
 
Lần chỉnh sửa cuối:
Cám ơn bạn đã quan tâm.

Bạn có thể làm giúp mình dựa vào tập tin đính kèm được không?

Nếu được mình cũng muốn thử. Tại vì dùng index cũng khá chậm.
Cám ơn bạn trước nha.
 
Lần chỉnh sửa cuối:
Cám ơn bạn đã quan tâm trả lời.
Mình muốn lấy giá trị dựa vào mã đó cho sheet khác và dữ liệu hàng ngàn dòng mình không thể sort được.
Đây là 1 bài toán giống như dùng hàm index để trả về nhiều giá trị. Nhưng nó chỉ dò mỗi lần 1 mã.
Mình muốn dò hết mã này đến mã khác liên tục.

Không biết có ai giúp mình không?
P/s: Mình đã tìm gần 1 năm rồi.

Cái chỗ màu đỏ không cần nêu bởi vì sau khi xem file bài #21 thì tôi biết chắc chắn bạn sẽ kêu tiếp.

Muốn nhanh thì ta vào đề luôn, gửi cái file đang làm thật ấy lên thôi.
 
Cám ơn bạn đã quan tâm.

Bạn có thể làm giúp mình dựa vào tập tin đính kèm được không?

Nếu được mình cũng muốn thử. Tại vì dùng index cũng khá chậm.
Cám ơn bạn trước nha.

Nó đây.......................................................................
 

File đính kèm

Thật ra ban đầu ý của e là làm thế nào để làm được như sheet 4 (có đính kèm file bên dưới): tức là sắp xếp và liệt kê từng loại mặt hàng theo số hóa đơn, ngày tháng... mn chỉ e với >.<

Tôi thấy bạn nêu "liệt kê từng loại mặt hàng theo số hóa đơn", nhưng trong File của bạn không thấy sheet nào có cột số hóa đơn thì làm sao mà lọc ?????

Thứ 2 bạn cũng cần có 1 sheet làm mẫu hóa đơn để in hóa đơn cho khách hàng xong thì lưu dữ liệu vào sheet theo dõi hoặc khi cần xem hoặc in lại hóa đơn thì gõ số hoặc đơn lọc nó ra tại sheet này.
 
Xin chào các bạn,
Nhờ các bạn giúp đỡ Oanh Thơ giải quyết trường hợp trong tập tin gửi kèm với ạ.
Bạn thử cái này xem
PHP:
Sub LocNhieuDK()
    Dim ParkHangSeo As Object, Key As String
    Dim VietNam(), HanQuoc(), I As Long, K As Long
Set ParkHangSeo = CreateObject("Scripting.Dictionary")
With Sheets("Dulieu")
    VietNam = .Range("E2", .Range("E" & Rows.Count).End(3)).Resize(, 19).Value
End With
ReDim HanQuoc(1 To UBound(VietNam, 1), 1 To 5)
For I = 1 To UBound(VietNam, 1)
    Key = VietNam(I, 1) & "@@@" & VietNam(I, 19)
    If Not ParkHangSeo.Exists(Key) Then
        K = K + 1
        ParkHangSeo.Add Key, K
        HanQuoc(K, 1) = K
        HanQuoc(K, 2) = VietNam(I, 1)
        HanQuoc(K, 3) = VietNam(I, 18)
        HanQuoc(K, 4) = VietNam(I, 19)
        HanQuoc(K, 5) = "=RC[-2]*RC[-1]"
    Else
        HanQuoc(ParkHangSeo.Item(Key), 3) = HanQuoc(ParkHangSeo.Item(Key), 3) + VietNam(I, 18)
    End If
Next I
With Sheets("Ketqua")
    .Range("H3").Resize(K, 5) = HanQuoc
End With
Set ParkHangSeo = Nothing
End Sub
 
Bạn thử cái này xem
PHP:
Sub LocNhieuDK()
    Dim ParkHangSeo As Object, Key As String
    Dim VietNam(), HanQuoc(), I As Long, K As Long
Set ParkHangSeo = CreateObject("Scripting.Dictionary")
With Sheets("Dulieu")
    VietNam = .Range("E2", .Range("E" & Rows.Count).End(3)).Resize(, 19).Value
End With
ReDim HanQuoc(1 To UBound(VietNam, 1), 1 To 5)
For I = 1 To UBound(VietNam, 1)
    Key = VietNam(I, 1) & "@@@" & VietNam(I, 19)
    If Not ParkHangSeo.Exists(Key) Then
        K = K + 1
        ParkHangSeo.Add Key, K
        HanQuoc(K, 1) = K
        HanQuoc(K, 2) = VietNam(I, 1)
        HanQuoc(K, 3) = VietNam(I, 18)
        HanQuoc(K, 4) = VietNam(I, 19)
        HanQuoc(K, 5) = "=RC[-2]*RC[-1]"
    Else
        HanQuoc(ParkHangSeo.Item(Key), 3) = HanQuoc(ParkHangSeo.Item(Key), 3) + VietNam(I, 18)
    End If
Next I
With Sheets("Ketqua")
    .Range("H3").Resize(K, 5) = HanQuoc
End With
Set ParkHangSeo = Nothing
End Sub

Kết quả cuối cùng trả về HanQuoc kìa, không biết kết quả này là thắng hay thua nhỉ :D
 
Kết quả đúng ý mình rồi, c
Bạn thử cái này xem
PHP:
Sub LocNhieuDK()
    Dim ParkHangSeo As Object, Key As String
    Dim VietNam(), HanQuoc(), I As Long, K As Long
Set ParkHangSeo = CreateObject("Scripting.Dictionary")
With Sheets("Dulieu")
    VietNam = .Range("E2", .Range("E" & Rows.Count).End(3)).Resize(, 19).Value
End With
ReDim HanQuoc(1 To UBound(VietNam, 1), 1 To 5)
For I = 1 To UBound(VietNam, 1)
    Key = VietNam(I, 1) & "@@@" & VietNam(I, 19)
    If Not ParkHangSeo.Exists(Key) Then
        K = K + 1
        ParkHangSeo.Add Key, K
        HanQuoc(K, 1) = K
        HanQuoc(K, 2) = VietNam(I, 1)
        HanQuoc(K, 3) = VietNam(I, 18)
        HanQuoc(K, 4) = VietNam(I, 19)
        HanQuoc(K, 5) = "=RC[-2]*RC[-1]"
    Else
        HanQuoc(ParkHangSeo.Item(Key), 3) = HanQuoc(ParkHangSeo.Item(Key), 3) + VietNam(I, 18)
    End If
Next I
With Sheets("Ketqua")
    .Range("H3").Resize(K, 5) = HanQuoc
End With
Set ParkHangSeo = Nothing
End Sub

Kết quả đúng ý mình rồi, cảm ơn bạn nhiêu.
Bài này có bạn nào làm được bằng công thức cho mình tham khảo với.
 

File đính kèm

File đính kèm

Với dữ liệu hơn 4000 dòng, nên nghĩ đến công cụ Pivot Table với một chút chỉnh trang cho dữ liệu.
Xem file kèm.

Thân
Xin chào Phan Thế Hiệp,

Bạn có thể recode 1 đoạn video chỉ giúp Oanh Thơ cách tạo Pivot Table như file kèm được không ạ?

Cảm ơn bạn đã giúp đỡ.
 

File đính kèm

Chào cả nhà,
Chủ đề các bạn trao đổi hay và bổ ích quá. Mình đang vướng phải vấn đề như các bạn nhưng vấn đề của mình ở đây là muốn tìm kiếm và trả về nhiều kết quả, liệt kê trên một dòng (có thể ngăn cách bởi dấu phẩy (,) hoặc dấu (-)...
Một vấn đề nữa là nếu như dữ liệu của mình lớn (giả sử như trên 40.000 dòng dữ liệu thì các bạn có thể giúp tìm nhanh được ko ah?
Mình có gửi Ví dụ. Mong mọi người giải quyết giùm ạ.
THANKS CẢ NHÀ
 

File đính kèm

Chào cả nhà,
Chủ đề các bạn trao đổi hay và bổ ích quá. Mình đang vướng phải vấn đề như các bạn nhưng vấn đề của mình ở đây là muốn tìm kiếm và trả về nhiều kết quả, liệt kê trên một dòng (có thể ngăn cách bởi dấu phẩy (,) hoặc dấu (-)...
Một vấn đề nữa là nếu như dữ liệu của mình lớn (giả sử như trên 40.000 dòng dữ liệu thì các bạn có thể giúp tìm nhanh được ko ah?
Mình có gửi Ví dụ. Mong mọi người giải quyết giùm ạ.
Cảm ơn CẢ NHÀ
Nếu bạn sử dụng Excel 365, đã tham gia Office insider thì có thể dùng công thức sau tại ô E5:
=TEXTJOIN(",",TRUE,UNIQUE(IF($A$3:$A$14=D5,$B$3:$B$14,"")))
(bấm enter)
Nếu bạn không sử dụng bản excel này thì có thể dùng cột phụ hoặc vba.
 
. . . .vấn đề của mình là muốn tìm kiếm và trả về nhiều kết quả, liệt kê trên một dòng (có thể ngăn cách bởi dấu phẩy (,) hoặc dấu (-)...
Một vấn đề nữa là nếu như dữ liệu của mình lớn (giả sử như trên 40.000 dòng dữ liệu thì các bạn có thể giúp tìm nhanh được ko ah?
Mình có gửi Ví dụ. Mong mọi người giải quyết giùm ạ.
Bạn thử tốc độ với hàm tự tạo này:
PHP:
Function CKQ(CSDL As Range, Ma)
Dim J As Long:                         Dim Arr()

Arr() = CSDL.Value
For J = 1 To UBound(Arr())
    If Arr(J, 1) = Ma Then CKQ = CKQ & ";" & Arr(J, 2)
Next J
If Len(CKQ) Then CKQ = Mid(CKQ, 2, Len(CKQ))
End Function

Cách xài: Tại ô {e5] bạn thiết lập công thức =CKQ(A$2:B14, D5)
Nếu kết quả không sai thì tìm cách chép xuống phía dưới
 
Lần chỉnh sửa cuối:
Bạn ơi, thế nếu như dữ liệu của mình ví dụ như là A2:C5 hoặc A:E và dữ liệu trả về cột C hoặc cột E, F... thì như nào bạn???
Mình vừa chạy thử code của bạn, Rất hay ạ nhưng nếu thử với dữ liệu lớn thì chậm mất nhiều thời gian ạ. Có thể khắc phục được nhược điểm nay ko ạ, Thêm nữa nếu tìm giá trị ở cột thứ 3,4 thì ko được. Mình xin đưa ví dụ với số lượng dữ liệu nhiều hơn và giá trị cần tìm kiếm là cột thứ 3,4. (sheet Du lieu 2)
Thanks bạn và mọi người
 

File đính kèm

. . . (1)nhưng nếu thử với dữ liệu lớn thì chậm mất nhiều thời gian ạ. Có thể khắc phục được nhược điểm nay ko ạ,
(2) Thêm nữa nếu tìm giá trị ở cột thứ 3,4 thì ko được. Mình xin đưa ví dụ với số lượng dữ liệu nhiều hơn và giá trị cần tìm kiếm là cột thứ 3,4. (sheet Du lieu 2)
(1) Có thể được, nhưng mình chưa có khả năng!
(2.0) Cột thứ 3 là những con số; Vậy có cọng lại không (để cho ra đáp án là 1 tổng) hay chép nối?
(2.1) Cột thứ tư là cột chỉ ngày-tháng; Chắc cột này là chép nối đuôi nhau
Nhưng như vậy kết quả sẽ quá dài dòng
Vả lại bạn iêu cầu tìm không nhiều những mã khách hàng: Nên chăng ta xoay iêu cầu lại, nhỉ:

Số tiềnNgàySố tiềnNgàySố tiềnNgàySố tiềnNgàySố tiềnNgàySố tiềnNgàySố tiềnNgày
002285015269003359005363016847003132005153
198000​
1/1/2000​
975000​
2/1/2000​
. . .. . . .
 
Mình vừa chạy thử code của bạn, Rất hay ạ nhưng nếu thử với dữ liệu lớn thì chậm mất nhiều thời gian ạ. Có thể khắc phục được nhược điểm nay ko ạ, Thêm nữa nếu tìm giá trị ở cột thứ 3,4 thì ko được. Mình xin đưa ví dụ với số lượng dữ liệu nhiều hơn và giá trị cần tìm kiếm là cột thứ 3,4. (sheet Du lieu 2)
Cảm ơn bạn và mọi người
Chạy thử code
Mã:
Sub ThanhToan()
  Dim sArr(), aMa(), Res(), iKey$, tmp$
  Dim i&, iR&, sRow&
  With Sheets("Du Lieu 2")
    i = .Range("E" & Rows.Count).End(xlUp).Row
    If i < 2 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A2:E" & i).Value
    i = .Range("G" & Rows.Count).End(xlUp).Row
    If i < 5 Then MsgBox ("Khong co du lieu"): Exit Sub
    aMa = .Range("G5:G" & i).Value
  End With
  With CreateObject("scripting.dictionary")
    sRow = UBound(aMa)
    ReDim Res(1 To sRow, 1 To 2)
    For i = 1 To sRow
      iKey = aMa(i, 1)
      If Not .exists(iKey) Then .Add iKey, i
    Next i
    sRow = UBound(sArr)
    For i = 1 To sRow
      iKey = sArr(i, 1)
      If .exists(iKey) Then
        iR = .Item(iKey)
        Res(iR, 1) = Res(iR, 1) + sArr(i, 4)
        Res(iR, 2) = Res(iR, 2) & ", " & Format(sArr(i, 5), "dd/mm/yyyy")
      End If
    Next i
  End With
  sRow = UBound(Res)
  For i = 1 To sRow
    tmp = Res(i, 2)
    If tmp <> Empty Then
      Res(i, 2) = Mid(tmp, 3, Len(tmp))
      If Len(Res(i, 2)) = 10 Then Res(i, 2) = "'" & Res(i, 2)
    End If
  Next i
  With Sheets("Du Lieu 2")
    .Range("H5").Resize(sRow, 2).Value = Res
  End With
End Sub
 
Chạy thử code
Mã:
Sub ThanhToan()
  Dim sArr(), aMa(), Res(), iKey$, tmp$
  Dim i&, iR&, sRow&
  With Sheets("Du Lieu 2")
    i = .Range("E" & Rows.Count).End(xlUp).Row
    If i < 2 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A2:E" & i).Value
    i = .Range("G" & Rows.Count).End(xlUp).Row
    If i < 5 Then MsgBox ("Khong co du lieu"): Exit Sub
    aMa = .Range("G5:G" & i).Value
  End With
  With CreateObject("scripting.dictionary")
    sRow = UBound(aMa)
    ReDim Res(1 To sRow, 1 To 2)
    For i = 1 To sRow
      iKey = aMa(i, 1)
      If Not .exists(iKey) Then .Add iKey, i
    Next i
    sRow = UBound(sArr)
    For i = 1 To sRow
      iKey = sArr(i, 1)
      If .exists(iKey) Then
        iR = .Item(iKey)
        Res(iR, 1) = Res(iR, 1) + sArr(i, 4)
        Res(iR, 2) = Res(iR, 2) & ", " & Format(sArr(i, 5), "dd/mm/yyyy")
      End If
    Next i
  End With
  sRow = UBound(Res)
  For i = 1 To sRow
    tmp = Res(i, 2)
    If tmp <> Empty Then
      Res(i, 2) = Mid(tmp, 3, Len(tmp))
      If Len(Res(i, 2)) = 10 Then Res(i, 2) = "'" & Res(i, 2)
    End If
  Next i
  With Sheets("Du Lieu 2")
    .Range("H5").Resize(sRow, 2).Value = Res
  End With
End Sub
Vang. Hay quá ạ. Nhưng mình chưa rõ lắm về các code.. Bác có thể giải thích mã các dòng lệnh đc ko ạ; :-) thanks bác
 
Vang. Hay quá ạ. Nhưng mình chưa rõ lắm về các code.. Bác có thể giải thích mã các dòng lệnh đc ko ạ; :) Cảm ơn bác
Bác ơi, với dòng dữ liệu tra cứu ít như dưới đây thì Ok ạ!
1577110391217.png
Tuy nhiên nếu dòng tra cứu dữ liệu nhiều như sau, thì sẽ báo lỗi như dưới này ạ:
1577110610309.png
báo lỗi như này ạ!
1577110449308.png
Bác nghiên cứu xử lý giúp em với ạ.
Nếu em muốn chuyển mục danh sách tim kiếm, tra cứu sang sheet khác thì như nào ạ.
Cảm ơn bác nhiều ah
Bài đã được tự động gộp:

Bác ơi, với dòng dữ liệu tra cứu ít như dưới đây thì Ok ạ!
1577110391217.png
Tuy nhiên nếu dòng tra cứu dữ liệu nhiều như sau, thì sẽ báo lỗi như dưới này ạ:
1577110610309.png
báo lỗi như này ạ!
1577110449308.png
Bác nghiên cứu xử lý giúp em với ạ.
Nếu em muốn chuyển mục danh sách tim kiếm, tra cứu sang sheet khác thì như nào ạ.
Cảm ơn bác nhiều ah
EM quên chưa post Ví dụ lên. Em xin up lên. Mong bác nghiên cứu giải cứu em với ah
 

File đính kèm

Bác ơi, với dòng dữ liệu tra cứu ít như dưới đây thì Ok ạ!

Tuy nhiên nếu dòng tra cứu dữ liệu nhiều như sau, thì sẽ báo lỗi như dưới này ạ:

báo lỗi như này ạ!

Bác nghiên cứu xử lý giúp em với ạ.
Nếu em muốn chuyển mục danh sách tim kiếm, tra cứu sang sheet khác thì như nào ạ.
Cảm ơn bác nhiều ah
Bài đã được tự động gộp:


EM quên chưa post Ví dụ lên. Em xin up lên. Mong bác nghiên cứu giải cứu em với ah
Có một số dòng của cột số tiền là ký tự "-" không phải số 0
Xem ghi chú trong code
Mã:
Sub ThanhToan()
  Dim sArr(), aMa(), Res(), iKey$, tmp$
  Dim i&, iR&, sRow&
  With Sheets("Du Lieu 2") 'Sheet Du lieu
    i = .Range("E" & Rows.Count).End(xlUp).Row
    If i < 2 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A2:E" & i).Value
  End With
  With Sheets("Du Lieu 2") 'Sheet ket qua
    i = .Range("G" & Rows.Count).End(xlUp).Row 'Cot "G" la cot Ma
    If i < 5 Then MsgBox ("Khong co du lieu"): Exit Sub
    aMa = .Range("G5:G" & i).Value 'Cot "G" la cot Ma, "5" là dong dau
  End With
  With CreateObject("scripting.dictionary")
    sRow = UBound(aMa)
    ReDim Res(1 To sRow, 1 To 2)
    For i = 1 To sRow
      iKey = aMa(i, 1)
      If Not .exists(iKey) Then .Add iKey, i
    Next i
    sRow = UBound(sArr)
    For i = 1 To sRow
      iKey = sArr(i, 1)
      If .exists(iKey) Then
        iR = .Item(iKey)
        If IsNumeric(sArr(i, 4)) Then Res(iR, 1) = Res(iR, 1) + sArr(i, 4)
        Res(iR, 2) = Res(iR, 2) & ", " & Format(sArr(i, 5), "dd/mm/yyyy")
      End If
    Next i
  End With
  sRow = UBound(Res)
  For i = 1 To sRow
    tmp = Res(i, 2)
    If tmp <> Empty Then
      Res(i, 2) = Mid(tmp, 3, Len(tmp))
      If Len(Res(i, 2)) = 10 Then Res(i, 2) = "'" & Res(i, 2)
    End If
  Next i
  With Sheets("Du Lieu 2") 'Sheet ket qua
    .Range("H5").Resize(sRow, 2).Value = Res '"H5" la o dau cua ket qua
  End With
End Sub
 
Có một số dòng của cột số tiền là ký tự "-" không phải số 0
Xem ghi chú trong code
Mã:
Sub ThanhToan()
  Dim sArr(), aMa(), Res(), iKey$, tmp$
  Dim i&, iR&, sRow&
  With Sheets("Du Lieu 2") 'Sheet Du lieu
    i = .Range("E" & Rows.Count).End(xlUp).Row
    If i < 2 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A2:E" & i).Value
  End With
  With Sheets("Du Lieu 2") 'Sheet ket qua
    i = .Range("G" & Rows.Count).End(xlUp).Row 'Cot "G" la cot Ma
    If i < 5 Then MsgBox ("Khong co du lieu"): Exit Sub
    aMa = .Range("G5:G" & i).Value 'Cot "G" la cot Ma, "5" là dong dau
  End With
  With CreateObject("scripting.dictionary")
    sRow = UBound(aMa)
    ReDim Res(1 To sRow, 1 To 2)
    For i = 1 To sRow
      iKey = aMa(i, 1)
      If Not .exists(iKey) Then .Add iKey, i
    Next i
    sRow = UBound(sArr)
    For i = 1 To sRow
      iKey = sArr(i, 1)
      If .exists(iKey) Then
        iR = .Item(iKey)
        If IsNumeric(sArr(i, 4)) Then Res(iR, 1) = Res(iR, 1) + sArr(i, 4)
        Res(iR, 2) = Res(iR, 2) & ", " & Format(sArr(i, 5), "dd/mm/yyyy")
      End If
    Next i
  End With
  sRow = UBound(Res)
  For i = 1 To sRow
    tmp = Res(i, 2)
    If tmp <> Empty Then
      Res(i, 2) = Mid(tmp, 3, Len(tmp))
      If Len(Res(i, 2)) = 10 Then Res(i, 2) = "'" & Res(i, 2)
    End If
  Next i
  With Sheets("Du Lieu 2") 'Sheet ket qua
    .Range("H5").Resize(sRow, 2).Value = Res '"H5" la o dau cua ket qua
  End With
End Sub
Dạ! Cảm ơn bạn nhiều :) :) ah...
 

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

Back
Top Bottom