Xin được giúp đỡ: Hàm Vlookup trả về nhiều giá trị

Liên hệ QC

Tuongidea

Thành viên mới
Tham gia
22/8/17
Bài viết
29
Được thích
4
Giới tính
Nam
Dear!
1. Mình cần sử dụng hàm Vlookup nâng cao hoặc tương đương để bảng kết quả trả về nhiều giá trị được tham chiếu trong dữ liệu nguồn.
2. Để mọi người dễ hiểu, mình đã làm một file cell ví dụ kèm theo, có ghi chú rõ ràng trong file cell.
3. Nhờ mọi người viết hàm hộ mình.
Cám ơn mọi người.
 

File đính kèm

  • Nhờ mọi người.xlsx
    10 KB · Đọc: 38
Mình có tìm được trên mạng hàm này có thể áp dụng vào vấn đề của mình, nhưng vấn đề mình không hiểu được hàm vì mình thấy hàm if & hàm index dùng có 2 đối số trong khi bình thường là 3 đối số.
Vì vậy mình không thể biến hóa được để áp dụng vào vấn đề của mình.
Nhờ các cao thủ giúp đỡ.
Hàm: =IF(COUNTIF($A$1:$A$1000,$G$1)>=ROWS($1:2),INDEX($F$1:$F$1000,SMALL(IF($A$1:$A$1000=$G$1,ROW($1:$1000)),ROW(2:2))),"")
 
Hai tham số thì có nghĩa là nó lấy cả hàng hoặc cả cột thay vì một ô.
Mỗi một cái "công dụng" thì số lượng dòng kết quả là khác nhau---> Bố trí không gian chứa kết quả cũng là cả một vấn đề lớn rồi.
Mình sắp sếp lại không gian chứa kết quả rồi nhờ cầu đặt hàm được không ạ ?
 
"Bang dữ liệu chuẩn" của bạn nó vốn đã không chuẩn rồi thì có mọc cánh cũng không bay được. Ít nhất phải sửa lại cột B, không để các ô trống vô duyên đó nữa.
 

File đính kèm

  • Đa tạ.xls
    384.5 KB · Đọc: 17
Lần chỉnh sửa cuối:
Bạn thử xài hàm mảng tự tạo này xem sao
 

File đính kèm

  • UDF.rar
    10.7 KB · Đọc: 20
Bạn thử xài hàm mảng tự tạo này xem sao
Trước hết cám ơn bạn rất nhiều, sau mình muốn bày tỏ vài điều:
1. Tại bảng kê chi tiết, sau khi hoàn thiện mình cần chèn thêm các cột ở giữa, dùng mảng tự tạo này không chèn được thêm cột bên bảng kê chi tiết.
2. Bố cục các sheet, sau khi hoàn thiện mình cần bố trí dữ liệu nguồn ở riêng 1 sheet, và sẽ có nhiều sheet bảng kê chi tiết được sinh ra, mảng tự tạo này đòi hỏi cả 2 bảng nằm trong 1 sheet.
3. Tại bảng dữ liệu chuẩn, hàm mới giới hạn nhập số liệu từ hàng 17 (R17) trở về, bắt đầu từ R18 trở đi sẽ không trong phạm vi xuất kết quả.
Nhờ bạn chỉnh dùm mình với ạ. Nếu bạn có thể cho mình xin hàm mảng và chỉ cho mình cách sử dụng hàm thì mình sẽ càng biết ơn hơn nữa.
Cám ơn bạn nhiều.
 

File đính kèm

  • Mảng(22.1.18).xls
    236.5 KB · Đọc: 5
Trước hết cám ơn bạn rất nhiều, sau mình muốn bày tỏ vài điều:
1. Tại bảng kê chi tiết, sau khi hoàn thiện mình cần chèn thêm các cột ở giữa, dùng mảng tự tạo này không chèn được thêm cột bên bảng kê chi tiết.
2. Bố cục các sheet, sau khi hoàn thiện mình cần bố trí dữ liệu nguồn ở riêng 1 sheet, và sẽ có nhiều sheet bảng kê chi tiết được sinh ra, mảng tự tạo này đòi hỏi cả 2 bảng nằm trong 1 sheet.
3. Tại bảng dữ liệu chuẩn, hàm mới giới hạn nhập số liệu từ hàng 17 (R17) trở về, bắt đầu từ R18 trở đi sẽ không trong phạm vi xuất kết quả.
Nhờ bạn chỉnh dùm mình với ạ. Nếu bạn có thể cho mình xin hàm mảng và chỉ cho mình cách sử dụng hàm thì mình sẽ càng biết ơn hơn nữa.
Cám ơn bạn nhiều.
Góp ý cho bạn:

1/ Muốn làm cái gì đó thì nên cụ thể, rõ ràng, ví dụ: bảng kê chi tiết là bảng nào của sheet nào? Trong khi đó File của bạn ghi BẢNG DỮ LIỆU CHUẨN?
1. Tại bảng kê chi tiết: Nên thiết kế thống nhất chứ không nên chèn cột lung tung (hàm hoặc code nó không hiểu ý của mình đâu).
2. Việc bố trí dữ liệu nguồn ở riêng 1 sheet là đúng, nhưng nên thiết kế sử dụng chỉ 1 sheet duy nhất (không nên làm nhiều sheet bảng kê chi tiết phát sinh ra để làm gì?).
 
Lần chỉnh sửa cuối:
. . . , sau mình muốn bày tỏ vài điều:
1.
2.
3. Tại bảng dữ liệu chuẩn, hàm mới giới hạn nhập số liệu từ hàng 17 (R17) trở về, bắt đầu từ R18 trở đi sẽ không trong phạm vi xuất kết quả.
Nhờ bạn chỉnh dùm mình với ạ.

(1) & (2) Chắc fải chuyển sang xài macro; Bạn khẳng định cấu trúc file #1 chuẩn thì mình sẽ làm thử vô đó
(3) Xài hàm này
PHP:
Function CD(Rng As Range, CDg As String)
 Dim J As Long, W As Integer, Col As Byte, Rws As Long, TT As Boolean    '*'
 ReDim Arr(1 To 9, 1 To 3) As String
 
 Rws = [C65500].End(xlUp).Row      '**'
 For J = 9 To Rws                  '*'
    If Cells(J, "B").Value = CDg Then
        W = W + 1:                          TT = True
        For Col = 1 To 3
            Arr(W, Col) = Cells(J, 2 + Col).Value
        Next Col
    ElseIf Cells(J, 2).Value = "" And TT Then
        W = W + 1
        For Col = 1 To 3
            Arr(W, Col) = Cells(J, 2 + Col).Value
        Next Col
    ElseIf (Cells(J, 2).Value <> "" And TT) Or J > Rws Then   '*'
        Exit For
    End If
 Next J
 CD = Arr()
End Function
 
.
 
Lần chỉnh sửa cuối:
Góp ý cho bạn:

1/
1.
2. Việc ...
-------------------------------------------------------------------------------------------
Xin được giải thích cho góp ý của bạn be09, và Reply bạn Hoang2013
Trước tiên cám ơn 2 bạn nhiều ạ.
- ý (1/) : Mình xin gửi các bạn file Chuẩn mới. Về cơ bản file này tuy chưa đầy đủ, nhưng cách bố trí không gian đã đúng định hướng.
- ý (1.) : Tại bảng kê chi tiết, chỉ có thể đưa ra bảng kê bố trí không gian tương đối 80%, vì mình làm thuê cho chủ đầu tư, mỗi chủ đầu tư yêu cầu một mẫu riêng, nên đều phải bổ xung thêm các dòng và cột ở bảng kê chi tiếtdữ liệu nguồn.
- ý (2.): Mình bắt buộc phải bố trí dữ liệu nguồn ở một sheet riêng, vì mỗi một công trình có số lượng và độ rộng của dự án khác nhau, dao động từ 3 đến 8 sheet bảng kê chi tiết, nhưng dữ liệu nguồn thì chỉ cần 1 sheet.
- Việc tạo một sheet nguồn riêng còn có lợi cho việc bổ xung những mã, những cấu hình mới mà hiện tại chưa được sinh ra. Đồng thời giúp quản lý số liệu đầu vào dễ dàng hơn đối với mình.
Cám ơn các bạn nhiều.
Thân ái!
 

File đính kèm

  • File chuẩn.xls
    367 KB · Đọc: 23
Lần chỉnh sửa cuối:
Bài này nên làm bỡi VBA;
Đã vậy thì fải:

1./ Tên trang tính nên là tiếng Việt không dấu; Như 'CTiet' hay 'DuLieu' là được rồi.

2./ So với file bài đầu thì file sau khác xa;
Như vậy theo mình hiểu thì:
(.) Nhập mã hiệu vô cột [C:c] của 'CTiet', thì các thông số cần lấy sẽ được nạp vô các cột S, V, Y & AB từ trang 'DuLieu'?
 
Bài này nên làm bỡi VBA;
Đã vậy thì fải:

1./ Tên trang tính nên là tiếng Việt không dấu; Như 'CTiet' hay 'DuLieu' là được rồi.

2./ So với file bài đầu thì file sau khác xa;
Như vậy theo mình hiểu thì:
(.) Nhập mã hiệu vô cột [C:c] của 'CTiet', thì các thông số cần lấy sẽ được nạp vô các cột S, V, Y & AB từ trang 'DuLieu'?
Dạ vâng, bạn hiểu đúng vấn đề rồi đấy ạ.
 
Vậy thì đây là nội dung macro sự kiện tại trang 'CTiet':
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Rws As Long, Dg As Long, Hg As Long, Col As Byte
 Dim Sh As Worksheet, Rng As Range, sRng As Range, Cls As Range, Rg0 As Range

 Rws = [s65500].End(xlUp).Row + 99
 If Not Intersect(Target, Range("C19:C" & Rws)) Is Nothing Then
    Set Sh = ThisWorkbook.Worksheets("DuLieu")
    Dg = Sh.[B65500].End(xlUp).Offset(9).Row            'Dòng Cuói Có Du Liêu  '
    Set Rng = Sh.[B2].Resize(Dg)
    Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        MsgBox "Nothing", , "GPE.COM Xin Chào!"
    Else
        If sRng.Offset(1).Value <> "" Then
            For Col = 1 To 4
                Cells(Target.Row, 3 * (Col + 5) + 1).Value = sRng.Offset(, Col).Value
            Next Col
        Else
            Hg = sRng.End(xlDown).Row - sRng.Row        'Xác Dinh Só Dòng Tróng  '
            If Hg > 9 Then Hg = 9
            For Col = 1 To 4
                Cells(Target.Row, 3 * (Col + 5) + 1).Resize(Hg).Value = _
                    sRng.Offset(, Col).Resize(Hg).Value
            Next Col
        End If
    End If
 End If
End Sub

Những mong bạn thành công mĩ mãn!
 
Mình cám ơn bạn nhiều.
Cũng chúc bạn thành đạt trong cuộc sống.
 
Thành đạt cái nổi gì 1 khi đã hưu;

Giờ sức khỏe là trên hết!
 
Thành đạt cái nổi gì 1 khi đã hưu;

Giờ sức khỏe là trên hết!
Dạ vâng, có sức khỏe là có tất cả.
Vậy thì phải gọi bằng bác rồi ạ.
Chúc bác sức khỏe và niềm vui, để đơm hoa cho đời.
Có gì khó khăn thì chúng cháu nhờ bác giúp ạ.
 
Dạ vâng, có sức khỏe là có tất cả.
Vậy thì phải gọi bằng bác rồi ạ.
Chúc bác sức khỏe và niềm vui, để đơm hoa cho đời.
Có gì khó khăn thì chúng cháu nhờ bác giúp ạ.
Dù hưu rồi, nhưng đem 1 xị rượu tới là anh ấy giúp tới sáng.
 
Vậy thì đây là nội dung macro sự kiện tại trang 'CTiet':
Những mong bạn thành công mĩ mãn!
Cháu chào bác.
Cháu chúc bác ngày mới vui vẻ.
Có một vấn đề cháu muốn nhờ bác ạ: Sau khi cháu copy đoạn code vào bảng cell và cho chạy thì hiện lên bảng báo "Nothing" ạ
Vì vậy cháu nhờ bác thương cho chót, sửa giúp nốt cháu, cháu có gửi kèm file cell đã add code.
Cháu cám ơn bác nhiều.
 

File đính kèm

  • File chuan.xlsm
    134.2 KB · Đọc: 8
Web KT
Back
Top Bottom