Giúp đỡ tìm số liệu của 2 bảng

Liên hệ QC

trong090892

Thành viên mới
Tham gia
23/9/17
Bài viết
5
Được thích
1
Giới tính
Nam
Nhờ anh chị giúp dùm em file excel đính kèm em có tô màu kết quả e mong muốn.
Em có bảng 1 từ cột A-C, bảng 2 từ cột E-G. từ bảng 2 em có sẵn dữ liệu cột mã 2 và số lượng, cần tìm cột mã 1 (tìm dữ liệu trên bảng 1) với điều kiện số lượng lớn hơn or bằng.
Cám ơn anh chị nhiều nhiều.

up up mùa vi rut
 

File đính kèm

  • vidu.xlsx
    8.7 KB · Đọc: 40
Tạm thời dùng công thức loằng ngoằng này trước, nhờ bác nào rút gọn giúp,
Mã:
=INDEX(A$2:A$12,MATCH(1,INDEX((B$2:B$12=E2)*(C$2:C$12>=F2)*($C$2:$C$12=AGGREGATE(15,6,1/($B$2:$B$12=E2)/($C$2:$C$12>=F2)*$C$2:$C$12,1)),0),0))
 
Tạm thời dùng công thức loằng ngoằng này trước, nhờ bác nào rút gọn giúp,
Mã:
=INDEX(A$2:A$12,MATCH(1,INDEX((B$2:B$12=E2)*(C$2:C$12>=F2)*($C$2:$C$12=AGGREGATE(15,6,1/($B$2:$B$12=E2)/($C$2:$C$12>=F2)*$C$2:$C$12,1)),0),0))
Thử dữ liệu mới
 

File đính kèm

  • vidu.xlsx
    8.4 KB · Đọc: 15
Tạm thời dùng công thức loằng ngoằng này trước, nhờ bác nào rút gọn giúp,
Mã:
=INDEX(A$2:A$12,MATCH(1,INDEX((B$2:B$12=E2)*(C$2:C$12>=F2)*($C$2:$C$12=AGGREGATE(15,6,1/($B$2:$B$12=E2)/($C$2:$C$12>=F2)*$C$2:$C$12,1)),0),0))
Có ngắn hơn tí đây, lâu rồi không có bài nào động não nữa anh à :v
=INDEX(A$2:A$12,RIGHT(AGGREGATE(15,6,C$2:C$12*1000/(B$2:B$12=E2)/(C$2:C$12>=F2)+ROW($A$2:$A$12)-ROW($A$1),1),3))
 
Thanks a #HieuCD, a #dazkangel, a #leonguyenz,

E có áp dụng công thức thì nếu giá trị gần vs giá trị yêu cầu thì ra đúng, Em có chạy trong file đính kèm. E lấy dữ liệu nếu nó >= thì lấy giá trị đầu tiên (J0005,SL: 4000 ->95681260) nếu (J0005, SL: 10 or 1... đều lấy kết quả đủ điều kiện -> 95681260), nếu (J0005, SL: 5500, lớn hơn giá trị đầu và thứ 2,.... ->85898330, dữ liệu e cần là sl nếu thoả dk >= thì lấy dòng gần nhất từ trên xuống.
 

File đính kèm

  • vidu.xlsx
    9.2 KB · Đọc: 5
Cảm ơn a #HieuCD, a #dazkangel, a #leonguyenz,

E có áp dụng công thức thì nếu giá trị gần vs giá trị yêu cầu thì ra đúng, Em có chạy trong file đính kèm. E lấy dữ liệu nếu nó >= thì lấy giá trị đầu tiên (J0005,SL: 4000 ->95681260) nếu (J0005, SL: 10 or 1... đều lấy kết quả đủ điều kiện -> 95681260), nếu (J0005, SL: 5500, lớn hơn giá trị đầu và thứ 2,.... ->85898330, dữ liệu e cần là sl nếu thoả dk >= thì lấy dòng gần nhất từ trên xuống.
Nếu dữ liệu J5 như trong file kết quả thế nào
1586140508477.png
 

File đính kèm

  • vidu (2).xlsx
    8.2 KB · Đọc: 10
Hi anh, J0005, SL: 1000 -> 95681260
J0005, SL: 6500 -> 95681260

View attachment 234871
Bài nầy dùng công thức Excel rất và rất phức tạp, phải dùng hàm tự tạo
Mã:
Function FiFo_OutOne(ByVal sRng As Range, ByVal ResRng As Range)
  Dim sArr(), Ma$, SL#, MaRes$, tmp
  Dim sR&, sR2&, i&,  r&

  sArr = sRng.Value2
  sR = UBound(sArr)
  sR2 = ResRng.Rows.Count
  MaRes = ResRng(sR2, 1).Value2
  For r = 1 To sR2
    Ma = ResRng(r, 1).Value2
    If Ma = MaRes Then
      SL = ResRng(r, 2).Value2
      For i = 1 To sR
        If sArr(i, 2) = Ma Then
          If sArr(i, 3) >= SL Then
            sArr(i, 3) = sArr(i, 3) - SL
            If r = sR2 Then tmp = sArr(i, 1)
            Exit For
          End If
        End If
      Next i
    End If
  Next r
  If tmp = Empty Then FiFo_OutOne = "" Else FiFo_OutOne = tmp
End Function
G2 =FiFo_outOne($A$2:$C$12,$E$2:F2)
Copy xuống
Nếu dữ liệu "Đẹp" kết quả ngon lành, còn "Xấu quá" có thể Function bỏ chạy :)
 

File đính kèm

  • vidu (2).xlsb
    14.5 KB · Đọc: 11
Lần chỉnh sửa cuối:
Góp vui công thức, nếu bạn sử dụng excel 365 thì có thể dùng công thức sau tại G2
Mã:
=IFERROR(INDEX(FILTER($A$2:$A$12,($B$2:$B$12=E2)*($C$2:$C$12>=F2)),1),"")
 
Góp vui công thức, nếu bạn sử dụng excel 365 thì có thể dùng công thức sau tại G2
Mã:
=IFERROR(INDEX(FILTER($A$2:$A$12,($B$2:$B$12=E2)*($C$2:$C$12>=F2)),1),"")
Xuất kho theo phương pháp FIFO, hàng tồn kho đã xuất những lần trước phải trừ số lượng tồn để tính xuất các lần sau, bài toán khó hơn bình thường là mỗi yêu cầu chỉ được xuất 1 lần, dùng công thức không khả thi, viết code giải quyết tất cả khả năng có thể xảy ra cũng không đơn giản
 
Hiện tại e sử dụng công thức này (thoả được điều kiện lấy số >= ra kết quả như mong đợi)
[
Thử:
=INDEX(A$2:A$12,MATCH(1,INDEX((B$2:B$12=E2)*(C$2:C$12>=F2),),0))

/QUOTE]
Bài đã được tự động gộp:

Xuất kho theo phương pháp FIFO, hàng tồn kho đã xuất những lần trước phải trừ số lượng tồn để tính xuất các lần sau, bài toán khó hơn bình thường là mỗi yêu cầu chỉ được xuất 1 lần, dùng công thức không khả thi, viết code giải quyết tất cả khả năng có thể xảy ra cũng không đơn giản
Điều kiện làm FIFO thì bắt buộc phải chạy VBA hả anh?
 
Hiện tại e sử dụng công thức này (thoả được điều kiện lấy số >= ra kết quả như mong đợi)
Bài đã được tự động gộp:


Điều kiện làm FIFO thì bắt buộc phải chạy VBA hả anh?
Mình nghỉ bài nầy không dùng công thức excel được, Function tự tạo của mình có một số tình huống không ra được kết quả, phải dùng Sub xét hết các khả năng mới tính được kết quả
 
Bài nầy dùng công thức Excel rất và rất phức tạp, phải dùng hàm tự tạo
Mã:
Function FiFo_OutOne(ByVal sRng As Range, ByVal ResRng As Range)
  Dim sArr(), Ma$, SL#, MaRes$, tmp
  Dim sR&, sR2&, i&,  r&

  sArr = sRng.Value2
  sR = UBound(sArr)
  sR2 = ResRng.Rows.Count
  MaRes = ResRng(sR2, 1).Value2
  For r = 1 To sR2
    Ma = ResRng(r, 1).Value2
    If Ma = MaRes Then
      SL = ResRng(r, 2).Value2
      For i = 1 To sR
        If sArr(i, 2) = Ma Then
          If sArr(i, 3) >= SL Then
            sArr(i, 3) = sArr(i, 3) - SL
            If r = sR2 Then tmp = sArr(i, 1)
            Exit For
          End If
        End If
      Next i
    End If
  Next r
  If tmp = Empty Then FiFo_OutOne = "" Else FiFo_OutOne = tmp
End Function
G2 =FiFo_outOne($A$2:$C$12,$E$2:F2)
Copy xuống
Nếu dữ liệu "Đẹp" kết quả ngon lành, còn "Xấu quá" có thể Function bỏ chạy :)
Công thức có lẽ vẫn làm được, nếu chỉ đưa đơn hàng cuối, mượn file của bạn
Mã:
=INDEX($A$2:$A$12,MATCH(SUMIF($E$1:E2,E2,$F$1:F2),SUMIF(OFFSET($B$1,,,ROW($1:$12),),E2,OFFSET($C$1,,,ROW($1:$12),))+0.1))
Ctrl+Shift+Enter
 
Công thức có lẽ vẫn làm được, nếu chỉ đưa đơn hàng cuối, mượn file của bạn
Mã:
=INDEX($A$2:$A$12,MATCH(SUMIF($E$1:E2,E2,$F$1:F2),SUMIF(OFFSET($B$1,,,ROW($1:$12),),E2,OFFSET($C$1,,,ROW($1:$12),))+0.1))
Ctrl+Shift+Enter
Dữ liệu nhập theo thời gian, liên tục có đơn hàng cuối mới
Ví dụ trong file, Function của mình và công thức của bạn cùng chịu thua
 

File đính kèm

  • vidu (2).xlsb
    14.8 KB · Đọc: 15
Web KT
Back
Top Bottom