If I understand you correctly then the below amendment should do it:
This could also be done with a formula if using Excel 365:Function Equilibrium(rng As Range, z As Integer) Dim buyVar As Variant, priceVar As Variant, sellVar As Variant Dim kumBuyVar As Variant, kumSellVar As Variant, minVar As Variant Dim x As Long, rtb As Double, rts As Double Dim mPrice() As Double, mMin() As Double, naqVar() As Double, y As Long buyVar = Application.Index(rng, , 1) priceVar = Application.Index(rng, , 2) sellVar = Application.Index(rng, , 3) ReDim kumBuyVar(1 To UBound(buyVar)) For x = 1 To UBound(buyVar) rtb = rtb + buyVar(x, 1) kumBuyVar(x) = rtb Next x ReDim kumSellVar(1 To UBound(buyVar)) For x = UBound(buyVar) To 1 Step -1 rts = rts + sellVar(x, 1) kumSellVar(x) = rts Next x ReDim minVar(1 To UBound(buyVar)) For x = 1 To UBound(buyVar) minVar(x) = Application.Min(kumBuyVar(x), kumSellVar(x)) Next x For x = 1 To UBound(buyVar) If minVar(x) = Application.Max(minVar) Then ReDim Preserve mPrice(y): mPrice(y) = priceVar(x, 1) ReDim Preserve mMin(y): mMin(y) = minVar(x) ReDim Preserve naqVar(y): naqVar(y) = Application.Max(kumBuyVar(x), kumSellVar(x)) - mMin(y) y = y + 1 End If Next x For x = 0 To UBound(mPrice) If naqVar(x) = Application.Min(naqVar) Then If z = 1 Then Equilibrium = mPrice(x) ElseIf z = 2 Then Equilibrium = mMin(x) End If Exit Function End If Next x End Function
File attached with both formula and updated code.=LET(rng,B2:D21, kb,SCAN(0,INDEX(rng,,1),LAMBDA(a,b,a+b)), kst,SORT(HSTACK(ROW(rng),INDEX(rng,,3)),1,-1), ks,SORTBY(SCAN(0,INDEX(kst,,2),LAMBDA(a,b,a+b)),INDEX(kst,,1),1), aq,BYROW(kb&","&ks,LAMBDA(x,MIN(--TEXTBEFORE(x,","),--TEXTAFTER(x,",")))), naq,BYROW(kb&","&ks,LAMBDA(x,MAX(--TEXTBEFORE(x,","),--TEXTAFTER(x,",")))), tbl,HSTACK(rng,aq,naq-aq), ftbl,FILTER(tbl,(INDEX(tbl,,4)=MAX(INDEX(tbl,,4)))*(INDEX(tbl,,5)=MIN(INDEX(tbl,,5)))), TRANSPOSE(CHOOSECOLS(ftbl,2,4)))




Reply With Quote
