Hàm Index với 3 điều kiện (1 người xem)

  • Thread starter Thread starter nnpc
  • Ngày gửi Ngày gửi

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

nnpc

Thành viên chính thức
Tham gia
14/5/10
Bài viết
59
Được thích
1
Mình đang cần lấy giá từ 2 File với nhiều điều kiện. Đã làm suốt 1 ngày rồi mà không được. Nhờ mọi người giúp đỡ
 

File đính kèm

Bảng kết quả cần lấy của mình có khoảng 20.000 dòng. Bảng tham chiếu có 90.000 dòng. Như vậy lấy giá được có cao ko ạ.
Cảm ơn mọi người.
Làm cả ngày rồi, nhức đầu quá.
 
Mình đang cần lấy giá từ 2 File với nhiều điều kiện. Đã làm suốt 1 ngày rồi mà không được. Nhờ mọi người giúp đỡ
Nói chung bạn không một lời giải thích. Vậy bạn tự kiểm tra xem sao:
Mã:
=LOOKUP(2,1/(B2='[Bảng tham chiếu.xlsx]Sheet1'!B$2:B$24)/(C2='[Bảng tham chiếu.xlsx]Sheet1'!C$2:C$24)/(D2='[Bảng tham chiếu.xlsx]Sheet1'!D$2:D$24),'[Bảng tham chiếu.xlsx]Sheet1'!$E$2:$E$24)
 
Nói chung bạn không một lời giải thích. Vậy bạn tự kiểm tra xem sao:
Mã:
=LOOKUP(2,1/(B2='[Bảng tham chiếu.xlsx]Sheet1'!B$2:B$24)/(C2='[Bảng tham chiếu.xlsx]Sheet1'!C$2:C$24)/(D2='[Bảng tham chiếu.xlsx]Sheet1'!D$2:D$24),'[Bảng tham chiếu.xlsx]Sheet1'!$E$2:$E$24)
để em thử xem. cảm ơn bác
 
Nói chung bạn không một lời giải thích. Vậy bạn tự kiểm tra xem sao:
Mã:
=LOOKUP(2,1/(B2='[Bảng tham chiếu.xlsx]Sheet1'!B$2:B$24)/(C2='[Bảng tham chiếu.xlsx]Sheet1'!C$2:C$24)/(D2='[Bảng tham chiếu.xlsx]Sheet1'!D$2:D$24),'[Bảng tham chiếu.xlsx]Sheet1'!$E$2:$E$24)

Tại em mệt quá rồi, nói ko nổi nữa. bác thông cảm. thân con gái, xử lý đống dữ liệu quá lớn. mệt quá.
 
Nói chung bạn không một lời giải thích. Vậy bạn tự kiểm tra xem sao:
Mã:
=LOOKUP(2,1/(B2='[Bảng tham chiếu.xlsx]Sheet1'!B$2:B$24)/(C2='[Bảng tham chiếu.xlsx]Sheet1'!C$2:C$24)/(D2='[Bảng tham chiếu.xlsx]Sheet1'!D$2:D$24),'[Bảng tham chiếu.xlsx]Sheet1'!$E$2:$E$24)

---

Em làm trên bảng mẫu gửi lên Forum và làm trên bảng gốc đều ko được. ko biết sai ở đâu nữa.
 
Mình đã sử dụng hàm Lookup, cấu trúc như sau :
=LOOKUP(B8&C8&D8;'[Bảng tham chiếu.xlsx]Sheet1'!$B$2:'[Bảng tham chiếu.xlsx]Sheet1'!$B$24&'[Bảng tham chiếu.xlsx]Sheet1'!$C$2:$C$24&'[Bảng tham chiếu.xlsx]Sheet1'!$D$2:$D$24;'[Bảng tham chiếu.xlsx]Sheet1'!$E$2:$E$24)

Nếu 2 bảng dữ liệu trùng khớp nhau thì ra dữ liệu chuẩn. Nhưng thay đổi bảng tham chiếu thì ở bảng kết quả lại chỉ cho giá trị gần đúng.
 
Mình đã sử dụng hàm Lookup, cấu trúc như sau :
=LOOKUP(B8&C8&D8;'[Bảng tham chiếu.xlsx]Sheet1'!$B$2:'[Bảng tham chiếu.xlsx]Sheet1'!$B$24&'[Bảng tham chiếu.xlsx]Sheet1'!$C$2:$C$24&'[Bảng tham chiếu.xlsx]Sheet1'!$D$2:$D$24;'[Bảng tham chiếu.xlsx]Sheet1'!$E$2:$E$24)

Nếu 2 bảng dữ liệu trùng khớp nhau thì ra dữ liệu chuẩn. Nhưng thay đổi bảng tham chiếu thì ở bảng kết quả lại chỉ cho giá trị gần đúng.
Viết như bạn chỉ là dò tìm tương đối thôi, không đúng là phải rồi. Bạn thay dấu phẩy thành dấu chấm phẩy lại công thức trên xem. (nhìn công thức của bạn sử dụng dấu chấm phẩy)
 
Viết như bạn chỉ là dò tìm tương đối thôi, không đúng là phải rồi. Bạn thay dấu phẩy thành dấu chấm phẩy lại công thức trên xem. (nhìn công thức của bạn sử dụng dấu chấm phẩy)

cái này m cũng ko hiểu. Nhưng các công thức khác cũng thế, sử dụng ở máy khác thì là dấu phẩy, nhưng ở máy mình thì dấu chấm phẩy mới chạy được.
 
Viết như bạn chỉ là dò tìm tương đối thôi, không đúng là phải rồi. Bạn thay dấu phẩy thành dấu chấm phẩy lại công thức trên xem. (nhìn công thức của bạn sử dụng dấu chấm phẩy)
bảng tham chiếu với bảng kết quả cái nào cũng mấy chục nghìn dòng không à ,thân gái kéo công thức mệt mõi lắm anh , anh có giãi pháp nào khác chỉ cần bấm 1 nút ra luôn không , giúp em với . hic hic
 
cái này m cũng ko hiểu. Nhưng các công thức khác cũng thế, sử dụng ở máy khác thì là dấu phẩy, nhưng ở máy mình thì dấu chấm phẩy mới chạy được.
Search trên diễn đàn hoặc cụ "gồ" chỉnh trong Control Panel ấy.
bảng tham chiếu với bảng kết quả cái nào cũng mấy chục nghìn dòng không à ,thân gái kéo công thức mệt mõi lắm anh , anh có giãi pháp nào khác chỉ cần bấm 1 nút ra luôn không , giúp em với . hic hic
Nếu có giải pháp nào tốt hơn thì chống "ế" được lâu rồi người đẹp ơi. (Cái nick xanh lá mới bấm nút bài trên làm vô tư ấy chứ)--=0--=0--=0
 
Viết như bạn chỉ là dò tìm tương đối thôi, không đúng là phải rồi. Bạn thay dấu phẩy thành dấu chấm phẩy lại công thức trên xem. (nhìn công thức của bạn sử dụng dấu chấm phẩy)
-------
Mình muốn dò tìm tuyệt đối thì làm ntn bạn. Công thức mà bạn cho, mình gõ vào nhưng nó báo lỗi
 
vẫn đang vật vã với 2 cái bảng. hixx
 
cái bảng của em, vừa mới repair rồi/ Nhưng ko hiểu sau, khi gõ các công thức đơn giản như Sumif mà kết quả cứ trả về 0, cho dù kết quả đúng là khác 0.
 

File đính kèm

  • chi.jpg
    chi.jpg
    34.3 KB · Đọc: 38
Cái cột I của bạn đang định dạng kiểu Text nên nó không có ra kết quả.

Bạn chuyển nó thành dạng Number là được.

Có rất nhiều cách để chuyển thành number :
1. Bạn đặt con trỏ chuột tại 1 ô trống trên bảng tính và bấm Ctrl+C
2. Bôi đen để chọn dữ liệu từ I2:I6/ Bấm phải chuột chọn Paste Special/ Trong phần Operation của Paste Special bạn tích chọn Add rồi bấm OK.
............................

Cách 2 thì bạn có thể chọn luôn vùng I2:I6 bên cạnh I2 xuất hiện 1 hình thoi có dấu chấm than nhỏ bên trong, bấm mũi tên xổ xuống chọn Convert to number.
 
Tại em mệt quá rồi, nói ko nổi nữa. bác thông cảm. thân con gái, xử lý đống dữ liệu quá lớn. mệt quá.
vẫn đang vật vã với 2 cái bảng. hixx
Bạn là con gái mà mí anh trên diễn đàn hỏng có ga lăng gì hết, bắt còn gái mà kéo công thức 20 ngàn dòng thì thiệt là ác quá đi.
Chịu khó đưa cái avata nào thật quyến rũ lên nha. hihihihi --=0--=0--=0

Thui xài tạm cái cùi bắp này của mình vậy, con gái tự an ủi nhau thôi. hihihihi
Mã:
Sub GetPrice()
Dim Wb0 As Workbook
Dim Dic As Object, i As Long, Tmp
Dim sArr(), dArr()
Set Dic = CreateObject("Scripting.dictionary")
Set Wb0 = Workbooks("BangThamChieu.xlsx")
With Wb0.Worksheets("Sheet1")
sArr = .Range("B2:E" & .[E25000].End(xlUp).Row).Value
For i = 1 To UBound(sArr)
        Tmp = sArr(i, 1) & "#" & sArr(i, 2) & "#" & sArr(i, 3)
        Dic(Tmp) = sArr(i, 4)
Next
End With
sArr = Range("B2:D" & [D25000].End(xlUp).Row).Value
ReDim dArr(1 To UBound(sArr), 1 To 1)
For i = 1 To UBound(sArr)
        dArr(i, 1) = Dic.Item(sArr(i, 1) & "#" & sArr(i, 2) & "#" & sArr(i, 3))
Next
[F2].Resize(i - 1, 1) = dArr
End Sub
 

File đính kèm

Em Ứ có chịu code vầy đâu. Thân em con gái dặm trường...Em muốn cái file tham chiếu gì đó không cần có mở lên mà vẫn lấy được dữ liệu cơ...}}}}}}}}}}}}}}}
Bạn nhõng nhẽo thay cho bạn ý hả hp khương dễ xương, bạn chịu khó thay cái avata nào quyến rũ chút coi, biết đâu tui xúc động đậy sẽ viết tiếp --=0
 
Các chàng ấy không ai giúp bạn gồi, mà mấy ảnh comment ở trên cũng hỏng giúp mình luôn. Kiểu này chắc mình phải thay cái avata nào quyến rũ một chút mới được. hihihihihi.
Mình thì hỏng có biết nhiều về ADO, viết tạm code này giúp bạn - code này mình học của anh HaiLuaMienTay, hehehe :D :D :D

Mã:
Sub LayDuLieu_FileDong()
Dim lsSQL As String, cnn As Object, lrs As Object, sArr, i As Long, Dic As Object
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
Set Dic = CreateObject("Scripting.dictionary")
With cnn
   If Val(Application.Version) < 12 Then
      .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\BangThamChieu.xlsx" & ";Extended Properties=""Excel 8.0;IMEX=1;HDR=No"";"
   Else
      .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\BangThamChieu.xlsx" & ";Extended Properties=""Excel 12.0;IMEX=1;HDR=No"";"
   End If
   .Open
End With


    lsSQL = "SELECT * " & "FROM [Sheet1$A1:E65000] "
    lrs.Open lsSQL, cnn, 3, 1
 sArr = lrs.GetRows
 sArr = TransArr(sArr)
 '-----------------------Xu ly du lieu
 For i = 1 To UBound(sArr)
        Tmp = sArr(i, 1) & "#" & sArr(i, 2) & "#" & sArr(i, 3)
        Dic(Tmp) = sArr(i, 4)
Next


sArr = Range("B2:D" & [D65000].End(xlUp).Row).Value
ReDim dArr(1 To UBound(sArr), 1 To 1)
For i = 1 To UBound(sArr)
        dArr(i, 1) = Dic.Item(sArr(i, 1) & "#" & sArr(i, 2) & "#" & sArr(i, 3))
Next
[F2].Resize(i - 1, 1) = dArr


lrs.Close: Set lrs = Nothing
cnn.Close: Set cnn = Nothing
Set Dic = Nothing
End Sub
'----------------------Ham dao mang cua anh HaiLuaMienTay
Function TransArr(sArr As Variant) As Variant
    Dim cllX As Long, cllY As Long, tmpX As Long, tmpY As Long, tmpArr As Variant
    tmpX = UBound(sArr, 2):    tmpY = UBound(sArr, 1)
    ReDim tmpArr(tmpX, tmpY)
    For cllX = 0 To tmpX
        For cllY = 0 To tmpY
            tmpArr(cllX, cllY) = sArr(cllY, cllX)
        Next cllY
    Next cllX
    TransArr = tmpArr
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
mình ko biết dùng VBA. nhưng m tìm được cách làm rồi. Cực đơn giản luôn. ^^
 
Mình làm như sau.
tạo cột mã điền giá sản phẩm ở 2 bảng
Sau đó tạo mã: = Tên sản phẩm & Tên xe & Hãng sản xuất. Sau đấy dùng Vlookup. Nhìn nó dài dòng như cũng tìm được những giá chính xác.
Cảm ơn mọi người đã nhiệt tình giúp đỡ.

Căn bản mình cũng muốn học thêm hàm Index và hàm Match. Sử dụng công thức hàm index có 3 điều kiện trở lên trên mạng, rõ ràng là gõ đúng công thức mà kết quả cứ báo lỗi.
 
Mình đi chết đây bạn doveandrose - giangleloi và hpkhuong ạ, mình thực sự không muốn sống nữa sau khi đọc xong comment của tác giả topic.

Vậy mà mình cứ đi thương bạn ý thân gái dặm trường =)))))))))))))))))))))))))))))))))))) òa òa
 
Mình đi chết đây bạn doveandrose - giangleloi và hpkhuong ạ, mình thực sự không muốn sống nữa sau khi đọc xong comment của tác giả topic.

Vậy mà mình cứ đi thương bạn ý thân gái dặm trường =)))))))))))))))))))))))))))))))))))) òa òa
Dẹp ngay ý định đó đi nàng , Hoamattroicoi mà làm thế thì Doveandrose cũng chả buồn sống nữa vì :
chỉ có phụ nữ mới đem lại hạnh phúc cho nhau =))
 
Mình đi chết đây bạn doveandrose - giangleloi và hpkhuong ạ, mình thực sự không muốn sống nữa sau khi đọc xong comment của tác giả topic.

Vậy mà mình cứ đi thương bạn ý thân gái dặm trường =)))))))))))))))))))))))))))))))))))) òa òa

Cái ở bài #22, #23 không phải là comment.
Gọi cho đúng từ thì nó là statement, declaration, hoặc explanation.
 
Mình đi chết đây bạn doveandrose - giangleloi và hpkhuong ạ, mình thực sự không muốn sống nữa sau khi đọc xong comment của tác giả topic.

Vậy mà mình cứ đi thương bạn ý thân gái dặm trường =)))))))))))))))))))))))))))))))))))) òa òa

Mình làm như vậy bị sai hay sao bạn.
 
Mình làm như vậy bị sai hay sao bạn.
Không, bạn làm như thế là OK nnpc ạ, thêm 1 cột phụ bên sheet File bảng tham chiếu nối 3 điều kiện lại, rồi dùng Vlookup() tại Bảng kết quả. Tại lúc đầu bạn nói hơn 20 ngàn dòng nên mấy ảnh cũng hơi ái ngại chuyện bạn kéo công thức, hihihi. Tuy nhiên nếu không biết code VBA thì xài công thức bạn đang làm đó đi, vừa dễ hiểu, vừa thông dụng bạn à.

Những câu mình viết bên trên là mấy anh em mình chọc nhau thôi, không có gì cả và cũng không có ý phê phán bạn làm sai.

Chúc bạn cuối tuần vui và học được nhiều kiến thức hay trên diễn đàn.

HMT.
 
Lần chỉnh sửa cuối:
Không, bạn làm như thế là OK nnpc ạ, thêm 1 cột phụ bên sheet File bảng tham chiếu nối 3 điều kiện lại, rồi dùng Vlookup() tại Bảng kết quả. Tại lúc đầu bạn nói hơn 20 ngàn dòng nên mấy ảnh cũng hơi ái ngại chuyện bạn kéo công thức, hihihi. Tuy nhiên nếu không biết code VBA thì xài công thức bạn đang làm đó đi, vừa dễ hiểu, vừa thông dụng bạn à.

Những câu mình viết bên trên là mấy anh em mình chọc nhau thôi, không có gì cả và cũng không có ý phê phán bạn làm sai.

Chúc bạn cuối tuần vui và học được nhiều kiến thức hay trên diễn đàn.

HMT.

Cảm ơn mọi người. thực sự cũng thích Dùng VBA lắm nhưng sau 1 thời gian dài dùng phần mềm. giờ quay lại dùng Excel, còn phải đang học nhiều. Sợ học thêm cái mới thì loạn quá.
Công thức thì ko kéo j cả, nháy đúp chuột thôi. máy ở cty cũng chạy mất tầm 10p. ^^.
---
Thực sự thấy mọi người viết code này nọ cũng thích và hâm mộ lắm.
 
Mệt quá các bác ạ. Sếp đưa cho file dữ liệu, dùng hàm chỉ lấy đc 1000 mã còn 19.000 mã phải dò thủ công. Mờ mắt luôn.
Người trước làm ko chuẩn. người sau chỉnh sửa đúng là ác mộng đêm đông.
 
Mệt quá các bác ạ. Sếp đưa cho file dữ liệu, dùng hàm chỉ lấy đc 1000 mã còn 19.000 mã phải dò thủ công. Mờ mắt luôn.
Người trước làm ko chuẩn. người sau chỉnh sửa đúng là ác mộng đêm đông.
Nhập liệu thừa khoảng trắng thì bạn dùng hàm Trim để loại khoảng trắng
Nhập liệu không chuẩn thì vẫn có cách để làm lại số liệu mà. Làm thủ công 19.000 dòng thì cũng đến tết dương lịch mất
 

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

Back
Top Bottom