VLOOKUP nhiều giá trị cần lấy

Liên hệ QC

phihndhsp

Thành viên gạo cội
Tham gia
26/12/09
Bài viết
3,363
Được thích
2,488
Giới tính
Nam
Nghề nghiệp
Giáo Viên
tôi có 1 bảng cột đầu tiên là mã và cột 2 là IP
A 1
A 2
A 3
B 4
B 2
C 1
D 3

bây giờ tôi có mã là A
tôi muốn dò lấy cột giá trị IP và kết quả mong muốn là
1,2,3
tương tự nếu mã là B thì giá trị mong muốn là
4,2
............
xin được ý kiến của các thủ trên diễn đàn, xin chân thành cảm ơn
 

File đính kèm

tôi có 1 bảng cột đầu tiên là mã và cột 2 là IP
A 1
A 2
A 3
B 4
B 2
C 1
D 3

bây giờ tôi có mã là A
tôi muốn dò lấy cột giá trị IP và kết quả mong muốn là
1,2,3
tương tự nếu mã là B thì giá trị mong muốn là
4,2
............
xin được ý kiến của các thủ trên diễn đàn, xin chân thành cảm ơn
Bài này thuộc dạng NỐI CHUỔI CÓ ĐIỀU KIỆN chứ Vlookup gì đâu
Bạn biết rằng các bài toán liên quan đến nối chuổi đều không phải sở trường của công thức Excel (nhất là khi phải nối nhiều chuổi)
Vậy nên khuyên bạn dùng VBA (hàm JoinIf tôi đã post trên diễn đàn nhiều lần rồi)
 
Bài này thuộc dạng NỐI CHUỔI CÓ ĐIỀU KIỆN chứ Vlookup gì đâu
Bạn biết rằng các bài toán liên quan đến nối chuổi đều không phải sở trường của công thức Excel (nhất là khi phải nối nhiều chuổi)
Vậy nên khuyên bạn dùng VBA (hàm JoinIf tôi đã post trên diễn đàn nhiều lần rồi)
Sau khi thỉnh giáo được Joinif của anh ndu em đã giải quyết xong bài toán này, trong những bài trước em không thấy điều kiện là 1 chuỗi nên em post lên để ai cần thì có mà tham khảo, xin cảm ơn
 

File đính kèm

Lần chỉnh sửa cuối:
Sau khi thỉnh giáo được Joinif của anh ndu em đã giải quyết xong bài toán này, trong những bài trước em không thấy điều kiện là 1 chuỗi nên em post lên để ai cần thì có mà tham khảo, xin cảm ơn

Hàm ấy viết từ ngày xưa, giờ đã sửa lại hoàn toàn khác rồi
PHP:
Function JoinIf(ByVal CritArr, ByVal Criteria, ByVal ResArr, ByVal Sep As String) As String
  Dim CritTmp, ResTmp, tmp, Arr()
  Dim bComp As Boolean, Chk As Boolean
  Dim i As Long, j As Long, k As Long, tmpVal As Double
  CritTmp = CritArr: ResTmp = ResArr
  On Error Resume Next
  bComp = (InStr("<>=", Left(Criteria, 1)) > 0)
  If TypeName(ResTmp) <> "Variant()" Then
    JoinIf = ResArr
  Else
    For i = LBound(ResTmp, 1) To UBound(ResTmp, 1)
      For j = LBound(ResTmp, 2) To UBound(ResTmp, 2)
        If TypeName(CritTmp) <> "Variant()" Then
          tmp = CritTmp: Chk = True
        Else
          tmp = CritTmp(i, j)
        End If
        If bComp And Criteria <> "" Then
          tmpVal = CDbl(CritTmp(i, j))
          If Evaluate(tmpVal & Criteria) Then GoTo Stp1
        Else
          If (Left(Criteria, 1) = "!") Then
            If Not (UCase(tmp) Like UCase(Mid(Criteria, 2, Len(Criteria)))) Then GoTo Stp1
          Else
            If (UCase(tmp) Like UCase(Criteria)) Then GoTo Stp1
          End If
        End If
        GoTo Stp2
Stp1:
        k = k + 1
        ReDim Preserve Arr(1 To k)
        Arr(k) = ResTmp(i, j)
        If Chk Then GoTo Stp3
Stp2:
      Next
    Next
Stp3:
    JoinIf = Join(Arr, Sep)
  End If
End Function
Cách dùng của hàm mới này vẫn như trước nhưng có nhiều ưu điểm hơn:
- Cho phép tham chiếu là Range hoặc Array... Có nghĩa là nguồn dữ liệu có thể là 1 vùng nào đó hoặc 1 mảng do công thức trả về
- Cho phép sử dụng ký tự đại diện như =JoinIf(B2:B11,"*Anh*",C2:C11,", ")
- Cho phép dùng toán tử so sánh khi dữ liệu là số, ví dụ =JoinIf(I10:I21,"<50000",J10:J21, " - ")
vân vân... từ từ khám phá nhé
 
Cái Jointif của thầy ndu96081631 hay quá. em áp dụng vào bảng tính bên em nên công tác kiểm soát nhàn đi nhiều lắm
 
Cái Jointif của thầy ndu96081631 hay quá. em áp dụng vào bảng tính bên em nên công tác kiểm soát nhàn đi nhiều lắm

Cho mình hỏi chút, mình cũng muốn dùng hàm joinif này, nhưng trong file excel của mình lại chưa có sẵn hàm này, mình đang dùng excel 2010, vậy phải làm thế nào đây? !$@!!
 
cao thủ ơi, cho em hỏi e muốn dùng hàm joinif này nhưng trong file excel 2010 của em cứ báo hàm này chưa được định nghĩa? vậy em phải làm sao ạ?
 
em đã chèn được hàm, tuy nhiên, bây giờ em muốn cộng các giá trị tìm được, tức là chỗ kết quả hiển thị em không muốn cách nhau bởi dấu , mà muốn cộng các giá trị đó lại?
 
em đã chèn được hàm, tuy nhiên, bây giờ em muốn cộng các giá trị tìm được, tức là chỗ kết quả hiển thị em không muốn cách nhau bởi dấu , mà muốn cộng các giá trị đó lại?

Muốn cộng thì dùng hàm SUMIF thôi, khỏi cần phải dùng VBA
 
Em làm hàm sumif trên cùng 1 file thì được, nhưng muốn làm trên 2 file khác nhau thì chưa biết phải dùng thế nào.
Ví dụ:
File 1: file dữ liệu gốc của em có 2 cột mã nhân viên và số tiền, trong đó mã nhân viên lặp nhiều lần
file_dulieu.png
File 2: file tính toán: e muốn tính mỗi nhân viên được nhận bao tiền? Nhung ko biết phải dùng hàm sumif như thế nào trên 2 file ạ?
file_tinhtoan.png
Anh giúp em tí ạ ^^
 
Lần chỉnh sửa cuối:
Bạn mở 2 file và thực hiện đạt công thức sumif bình thường nhé. Ví dụ tôi cần dữ liệu trong file 01-NN thì tôi sẽ đặt công thức như sau :

=SUMIF('[01-NN.xls]Sheet1'!$A$1:$A$7,A1,'[01-NN.xls]Sheet1'!$B$1:$B$7)
 
Bạn mở 2 file và thực hiện đạt công thức sumif bình thường nhé. Ví dụ tôi cần dữ liệu trong file 01-NN thì tôi sẽ đặt công thức như sau :

=SUMIF('[01-NN.xls]Sheet1'!$A$1:$A$7,A1,'[01-NN.xls]Sheet1'!$B$1:$B$7)

Em dùng hàm sumif cho 2 file thì có lúc được có lúc lại ra toàn 0, trong khi giá trị số hạng cộng là khác 0. Như 2 file em đình kèm, em đặt công thức:
=SUMIF([file_doichieu1.xls]Sheet1!$B$2:$B$10,B4,[file_doichieu1.xls]Sheet1!$E$2:$E$10)
Nhưng kết quả toàn là 0
Các cao thủ xem hộ e xem file excel của em bị sao ạ :(
 

File đính kèm

Em đã tìm ra nguyên nhân do format cell rồi ạ. Cảm ơn mọi người :)
 
Có cách nào chỉnh lại hàm này sao cho nó không lấy lại những giá trị trùng nhau không thầy?
 
Web KT

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

Back
Top Bottom