Giúp lập công thức 2 dòng cùng điều kiện tính toán giống nhau

Liên hệ QC
Cột J là số phút chạy máy với số lượng cột M
dạ vâng, 2 cột đó của anh em nghĩ nó ảnh hưởng gì đó vì khi em thêm "Chung nhau 1" vào B6 thì ô R6 lại nhảy sai, thay vì bằng 7000 thì nó lại bằng 11500 ạ, nghĩa là nó vẫn tính 23h chạy máy
Bài đã được tự động gộp:


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

 

File đính kèm

  • Ví dụ 1 22.1.2021.xlsb
    30.1 KB · Đọc: 4
dạ vâng, 2 cột đó của anh em nghĩ nó ảnh hưởng gì đó vì khi em thêm "Chung nhau 1" vào B6 thì ô R6 lại nhảy sai, thay vì bằng 7000 thì nó lại bằng 11500 ạ, nghĩa là nó vẫn tính 23h chạy máy
Bài đã được tự động gộp:


Bài đã được tự động gộp:
Mắt mờ :p nhập dư 1 "s", chỉnh ssCol thành sCol
Mã:
Function PhanBoSoLuong(ByVal maxPhut#, ByVal Ngay, ByVal SoLuong, _
            Chung As Range, DinhMuc As Range, May As Range, Rng As Range) As Variant
  Dim sRow&, sCol&, i&, j&
  Dim tMay$, tDinhMuc#, tSoLuong As Variant
  Dim tmpChung$, tmpPhut#
 
  sRow = Rng.Rows.Count: sCol = Rng.Columns.Count
  tMay = May(sRow, 1).Offset(1).Value
  tDinhMuc = DinhMuc(sRow, 1).Offset(1).Value
  If Rng(1, sCol) < Ngay Then PhanBoSoLuong = "X": Exit Function
  For j = 2 To sCol - 1
     tSoLuong = Rng(sRow, j).Offset(1).Value
    If IsNumeric(tSoLuong) Then SoLuong = SoLuong - tSoLuong
  Next j
  For i = 2 To sRow
    If IsNumeric(Rng(i, sCol)) Then
      If May(i, 1) = tMay Then
        If Chung(i, 1) = Empty Then
          maxPhut = maxPhut - Rng(i, sCol) * DinhMuc(i, 1)
        Else
          If tmpChung <> Chung(i, 1) Then
            tmpChung = Chung(i, 1)
            tmpPhut = 0
          End If
          If tmpPhut < Rng(i, sCol) * DinhMuc(i, 1) Then
            tmpPhut = Rng(i, sCol) * DinhMuc(i, 1)
          End If
          If tmpChung <> Chung(i, 1).Offset(1) Then
            maxPhut = maxPhut - tmpPhut
          End If
        End If
      End If
    End If
  Next i
  tSoLuong = maxPhut / tDinhMuc
  If SoLuong > tSoLuong Then
    PhanBoSoLuong = Round(tSoLuong, 6)
  Else
    PhanBoSoLuong = Round(SoLuong, 6)
  End If
End Function
 

File đính kèm

  • Ví dụ 1 22.1.2021 (1).xlsb
    30.3 KB · Đọc: 12
Mắt mờ :p nhập dư 1 "s", chỉnh ssCol thành sCol
Mã:
Function PhanBoSoLuong(ByVal maxPhut#, ByVal Ngay, ByVal SoLuong, _
            Chung As Range, DinhMuc As Range, May As Range, Rng As Range) As Variant
  Dim sRow&, sCol&, i&, j&
  Dim tMay$, tDinhMuc#, tSoLuong As Variant
  Dim tmpChung$, tmpPhut#

  sRow = Rng.Rows.Count: sCol = Rng.Columns.Count
  tMay = May(sRow, 1).Offset(1).Value
  tDinhMuc = DinhMuc(sRow, 1).Offset(1).Value
  If Rng(1, sCol) < Ngay Then PhanBoSoLuong = "X": Exit Function
  For j = 2 To sCol - 1
     tSoLuong = Rng(sRow, j).Offset(1).Value
    If IsNumeric(tSoLuong) Then SoLuong = SoLuong - tSoLuong
  Next j
  For i = 2 To sRow
    If IsNumeric(Rng(i, sCol)) Then
      If May(i, 1) = tMay Then
        If Chung(i, 1) = Empty Then
          maxPhut = maxPhut - Rng(i, sCol) * DinhMuc(i, 1)
        Else
          If tmpChung <> Chung(i, 1) Then
            tmpChung = Chung(i, 1)
            tmpPhut = 0
          End If
          If tmpPhut < Rng(i, sCol) * DinhMuc(i, 1) Then
            tmpPhut = Rng(i, sCol) * DinhMuc(i, 1)
          End If
          If tmpChung <> Chung(i, 1).Offset(1) Then
            maxPhut = maxPhut - tmpPhut
          End If
        End If
      End If
    End If
  Next i
  tSoLuong = maxPhut / tDinhMuc
  If SoLuong > tSoLuong Then
    PhanBoSoLuong = Round(tSoLuong, 6)
  Else
    PhanBoSoLuong = Round(SoLuong, 6)
  End If
End Function
Em cảm ơn anh nhiều,
 
Mắt mờ :p nhập dư 1 "s", chỉnh ssCol thành sCol
Mã:
Function PhanBoSoLuong(ByVal maxPhut#, ByVal Ngay, ByVal SoLuong, _
            Chung As Range, DinhMuc As Range, May As Range, Rng As Range) As Variant
  Dim sRow&, sCol&, i&, j&
  Dim tMay$, tDinhMuc#, tSoLuong As Variant
  Dim tmpChung$, tmpPhut#

  sRow = Rng.Rows.Count: sCol = Rng.Columns.Count
  tMay = May(sRow, 1).Offset(1).Value
  tDinhMuc = DinhMuc(sRow, 1).Offset(1).Value
  If Rng(1, sCol) < Ngay Then PhanBoSoLuong = "X": Exit Function
  For j = 2 To sCol - 1
     tSoLuong = Rng(sRow, j).Offset(1).Value
    If IsNumeric(tSoLuong) Then SoLuong = SoLuong - tSoLuong
  Next j
  For i = 2 To sRow
    If IsNumeric(Rng(i, sCol)) Then
      If May(i, 1) = tMay Then
        If Chung(i, 1) = Empty Then
          maxPhut = maxPhut - Rng(i, sCol) * DinhMuc(i, 1)
        Else
          If tmpChung <> Chung(i, 1) Then
            tmpChung = Chung(i, 1)
            tmpPhut = 0
          End If
          If tmpPhut < Rng(i, sCol) * DinhMuc(i, 1) Then
            tmpPhut = Rng(i, sCol) * DinhMuc(i, 1)
          End If
          If tmpChung <> Chung(i, 1).Offset(1) Then
            maxPhut = maxPhut - tmpPhut
          End If
        End If
      End If
    End If
  Next i
  tSoLuong = maxPhut / tDinhMuc
  If SoLuong > tSoLuong Then
    PhanBoSoLuong = Round(tSoLuong, 6)
  Else
    PhanBoSoLuong = Round(SoLuong, 6)
  End If
End Function
Công thức em làm đại, chắc còn thiếu nhiều, lười quá anh ạ:
Mã:
=IF(M$3>=$H4,IF(AND(L4="X",OR($B4="",$B4<>$B3)),1-M3/L3,1)*MAX(0,MIN(1380/$E4,$C4-SUM($L4:L4))),"X")
 

File đính kèm

  • Ví dụ 1 22.1.2021_test.xlsb
    23.6 KB · Đọc: 4
Lần chỉnh sửa cuối:
Công thức em làm đại, chắc còn thiếu nhiều, lười quá anh ạ:
Mã:
=IF(M$3>=$H4,IF(AND(L4="X",OR($B4="",$B4<>$B3)),1-M3/L3,1)*MAX(0,MIN(1380/$E4,$C4-SUM($L4:L4))),"X")
Bài nầy dùng công thức quá khó, rối ở chổ tính Max của những "Chung nhau" giống nhau, mình thử đủ cách mà không được
Mình tóm lại yêu cầu theo ví dụ trong file
 

File đính kèm

  • Ví dụ 1 22.1.2021_test.xlsb
    35.1 KB · Đọc: 8
Bài nầy dùng công thức quá khó, rối ở chổ tính Max của những "Chung nhau" giống nhau, mình thử đủ cách mà không được
Mình tóm lại yêu cầu theo ví dụ trong file
Không hiểu sao file của anh em xem bị lỗi name, trong khi file cũ hơn (cái file anh nói nhầm công thức á) thì không bị lỗi ?
Tính max là sao anh nhỉ, em nghĩ nó cứ chạy bình thường thôi chứ @@
Làm lại công thức xong không hiểu mình làm gì :eek::eek::eek:
Mã:
=IF(M$3>=$H4,IF((L4="X")*OR($B4="",$B4<>$B3),1-IFERROR(LOOKUP(,0/FREQUENCY(1,1/TEXT($C$3:$C3,"0;;;\2")+($B$3:$B3=$B3)),M$3:M3/L$3:L3),M3/1380*$E3),1)*MAX(0,MIN(1380/$E4,$C4-SUM($L4:L4))),"X")
 

File đính kèm

  • Ví dụ 1 22.1.2021_test.xlsb
    29.3 KB · Đọc: 3
Lần chỉnh sửa cuối:
Không hiểu sao file của anh em xem bị lỗi name, trong khi file cũ hơn (cái file anh nói nhầm công thức á) thì không bị lỗi ?
Tính max là sao anh nhỉ, em nghĩ nó cứ chạy bình thường thôi chứ @@
Làm lại công thức xong không hiểu mình làm gì :eek::eek::eek:
Mã:
=IF(M$3>=$H4,IF(AND(L4="X",OR($B4="",$B4<>$B3)),1-IFERROR(LOOKUP(,0/FREQUENCY(1,1/TEXT($C$3:$C3,"0;;;\2")+($B$3:$B3=$B3)),M$3:M3/L$3:L3),M3/L3),1)*MAX(0,MIN(1380/$E4,$C4-SUM($L4:L4))),"X")
Bạn xem giải thích điều kiện "Chung nhau" trong file
 

File đính kèm

  • Ví dụ 1 22.1.2021_test (1).xlsb
    31 KB · Đọc: 4
Bạn xem giải thích điều kiện "Chung nhau" trong file
Anh điền cho em xem kết quả mẫu với, lấy lớn nhất thì dựa vào cái gì lớn nhất, số sản phẩm lớn nhất hay số lượng sản phẩm sản xuất trong ngày lớn nhât.
Tuy là chung nhau nhưng trong 1 ngày thì vẫn bị ảnh hưởng của sản phẩm trước thì sao có thể ra đủ 1380 được.
 
Anh điền cho em xem kết quả mẫu với, lấy lớn nhất thì dựa vào cái gì lớn nhất, số sản phẩm lớn nhất hay số lượng sản phẩm sản xuất trong ngày lớn nhât.
Tuy là chung nhau nhưng trong 1 ngày thì vẫn bị ảnh hưởng của sản phẩm trước thì sao có thể ra đủ 1380 được.
Bạn xem công thức tạm và kết quả mẩu trong file
 

File đính kèm

  • Ví dụ 1 22.1.2021_test.xlsb
    40.9 KB · Đọc: 6
Bạn xem công thức tạm và kết quả mẩu trong file
Làm đại, hiện tại công thức còn nhiều lỗ hỏng,
Ví dụ như chưa vị trí của máy làm chung sản phẩm là cố định chưa linh hoạt:
Mã:
=IF(M$3<$H4,"X",MIN($C4-SUM($L4:L4),IF(L4="X",IFERROR((1380-SUM(MOD(SMALL(IFERROR(($B$3:$B3=TRANSPOSE($B$3:$B3))*(M$3:M3*$E$3:$E3),0)+TRANSPOSE(ROW($B$3:$B3)*10^6),(ROW($B$3:$B3)-ROW($B$2))*ROWS($B$3:$B3)),10^6)/COUNTIFS($B$3:$B3,$B$3:$B3,$B$3:$B3,"<>")))/$E4,(1-M3/1380*N($E3))*1380/$E4),1380/$E4)))
 
Lần chỉnh sửa cuối:
Làm đại, hiện tại công thức còn nhiều lỗ hỏng,
Ví dụ như chưa vị trí của máy làm chung sản phẩm là cố định chưa linh hoạt:
Mã:
=IF(M$3<$H4,"X",MIN($C4-SUM($L4:L4),IF(L4="X",IFERROR((1380-SUM(MOD(SMALL(IFERROR(($B$3:$B3=TRANSPOSE($B$3:$B3))*(M$3:M3*$E$3:$E3),0)+TRANSPOSE(ROW($B$3:$B3)*10^6),(ROW($B$3:$B3)-ROW($B$2))*ROWS($B$3:$B3)),10^6)/COUNTIFS($B$3:$B3,$B$3:$B3,$B$3:$B3,"<>")))/$E4,(1-M3/1380*N($E3))*1380/$E4),1380/$E4)))
Làm được như vậy là giỏi lắm rồi, Chúc bạn tối vui và an lành /-*+/ /-*+/ /-*+/
 
Làm được như vậy là giỏi lắm rồi, Chúc bạn tối vui và an lành /-*+/ /-*+/ /-*+/
Anh xem thử còn sai chỗ nào không:
Mã:
=IF(M$3<$H4,"X",MIN($C4-SUM($L4:L4),(1380-($F4=$F3)*($B4="")*IF($B3="",N(M3)*$E3,SUM(MOD(SMALL(IFERROR(($B$3:$B3=TRANSPOSE($B$3:$B3))*(M$3:M3*$E$3:$E3),0)+TRANSPOSE(ROW($B$3:$B3)*10^6),(ROW($B$3:$B3)-ROW($B$2))*ROWS($B$3:$B3)),10^6)/TEXT(COUNTIF($B$3:$B3,$B$3:$B3),"0;0;1")*($B$3:$B3<>""))))/$E4))
 
Lần chỉnh sửa cuối:
Anh xem thử còn sai chỗ nào không:
Mã:
=IF(M$3<$H4,"X",MIN($C4-SUM($L4:L4),(1380-($F4=$F3)*($B4="")*IF($B3="",N(M3)*$E3,SUM(MOD(SMALL(IFERROR(($B$3:$B3=TRANSPOSE($B$3:$B3))*(M$3:M3*$E$3:$E3),0)+TRANSPOSE(ROW($B$3:$B3)*10^6),(ROW($B$3:$B3)-ROW($B$2))*ROWS($B$3:$B3)),10^6)/TEXT(COUNTIF($B$3:$B3,$B$3:$B3),"0;0;1")*($B$3:$B3<>""))))/$E4))
Mình thử các trường hợp đơn giản hơn kết quả chưa chuẩn :p
 

File đính kèm

  • Ví dụ 1 22.1.2021_test.xlsb
    40.3 KB · Đọc: 6
Bạn xem công thức tạm và kết quả mẩu trong file
Xem file bạn mãi mới hiểu được, dạng tìm max, min từng đoạn tôi có làm nhiều trên đây, lâu không đụng vào hàm mảng làm loay hoay mãi,tôi sửa lại công thức của bạn dùng ở M5,dòng 4 xem như đã tính sẵn
Tôi thử 1 trường hợp cho 3 máy chung nhau SP1,SP3,SP5 thì kết quả công thức và code khác nhau, tôi nghĩ là 3 máy này sẽ kêt quả ở ngày 25, tôi đã tô đỏ, công thức tôi viết các máy chung nhau không cần phải sort

Mã:
=MAX(MIN($C5-SUM($L5:L5),(1380-SUM(MOD(LOOKUP(ROW(OFFSET($B$1,,,ROW(A1)))+1-10^-10,SMALL(CHOOSE({1,2},IFERROR(MATCH($B$4:$B4,$B$4:$B4,),ROW(OFFSET($B$1,,,ROW(A1))))+$E$4:$E4*M$4:M4*($F$4:$F4=$F5)*(IF($B5="",1,$B$4:$B4<>$B5))/10^6,ROW(OFFSET($B$1,,,ROW(A1)))),ROW(OFFSET($B$1,,,ROW(A1)*2)))),1)*10^6))/$E5))
 

File đính kèm

  • Ví dụ 1 22.1.2021_test.xlsb
    41.6 KB · Đọc: 13
Lần chỉnh sửa cuối:
Xem file bạn mãi mới hiểu được, dạng tìm max, min từng đoạn tôi có làm nhiều trên đây, lâu không đụng vào hàm mảng làm loay hoay mãi,tôi sửa lại công thức của bạn dùng ở M5,dòng 4 xem như đã tính sẵn


Mã:
=MAX(MIN($C5-SUM($L5:L5),(1380-SUM(MOD(LOOKUP(ROW(OFFSET($B$1,,,ROW(A1)))+1-10^-10,SMALL(CHOOSE({1,2},IFERROR(MATCH($B$4:$B4,$B$4:$B4,),ROW(OFFSET($B$1,,,ROW(A1))))+$E$4:$E4*M$4:M4*($F$4:$F4=$F5)*(IF($B5="",1,$B$4:$B4<>$B5))/10^6,ROW(OFFSET($B$1,,,ROW(A1)))),ROW(OFFSET($B$1,,,ROW(A1)*2)))),1)*10^6))/$E5))
Công thức quá siêu, đã kiểm tra tất cả đều đúng /-*+/ /-*+/ /-*+/
 
Công thức quá siêu, đã kiểm tra tất cả đều đúng /-*+/ /-*+/ /-*+/
Bạn xem lại file tôi gửi ở trên , có trường hợp vẫn chưa đúng giữa 2 cách không biết cách nào sai, không biết code bạn viết có cần yêu cầu phải sort cột mã chung hay không?
 
Bạn xem lại file tôi gửi ở trên , có trường hợp vẫn chưa đúng giữa 2 cách không biết cách nào sai, không biết code bạn viết có cần yêu cầu phải sort cột mã chung hay không?
"Chung nhau 1" là các sản phẩm sản xuất đồng thời trên 1 máy, có thể hoàn thành trước sau nhưng tất cả "Chung nhau 1" hoàn thành mới chạy sản phẩm khác, nên phải nằm liên tục không có sản phẩm khác chen vào giữa. Code của mình viết theo qui ước trên nên chưa tính tới tình huống trong file :p
 
Web KT

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

Back
Top Bottom