The only thing I can think of is to write a custom Incremental IRR function that takes the loan periods, loan repayment amounts, and loan amounts to find the desired IRR

Please see the following where you enter the periods of two loans as 12 and 120. The loan repayment amounts of 9.03 and 10.61 and the loan amounts of -100 and -1000

The IncRATE function finds the IRR of 5.12%

You may enter other values in arrays for nper, pmt and pv to find the desired IRR for all your loans

Code:Sample Output --------------------------------------------------------------------------------- nper = [12,120] pmt = [9.03,10.61] pv = [-100,-1000] fv = 0 type = 1 compounding = 1 guess = 0.05 tadRATE(nper[], pmt[], pv[], fv, type, compounding, guess) = 0.004270800653174929 Annual Rate = 0.004270800653174929 * 12 Annual Rate = 0.05124960783809915 Annual Rate = 5.12% ---------------------------------------------------------------------------------

Code:<script type="text/javascript"> var nper = [12,120]; var pmt = [9.03,10.61]; var pv = [-100,-1000]; var fv = 0; var atype = 1; var compounding = 1; var guess = 0.05; document.write("<p>nper = [12,120]"+"<br/>"); document.write("pmt = [9.03,10.61]"+"<br/>"); document.write("pv = [-100,-1000]"+"<br/>"); document.write("fv = "+fv+"<br/>"); document.write("type = "+atype+"<br/>"); document.write("compounding = "+compounding+"<br/>"); document.write("guess = "+guess+"</p>"); r = tadIncRATE(nper,pmt,pv,fv,atype,compounding,guess); ar = r * 12; arp = Math.round(ar * 10000)/100; document.write( "<p>tadRATE(nper[], pmt[], pv[], fv, type, compounding, guess) = " + r +"<br/>"); document.write( "Annual Rate = " + r + " * 12" +"<br/>"); document.write( "Annual Rate = " + ar +"<br/>"); document.write( "Annual Rate = " + arp +"%</p>"); function tadAEY(r, c) { if (r==0.0) return 0.0; if (c==0.0) return Math.exp(r) - 1; else return Math.pow(1.0+r*c, 1/c) - 1; } function tadPVIF(r, n, c) { c = (typeof c !== "undefined") ? c : 1; if (r==0.0) return 1.0; if (n==0.0) return 1.0; return Math.pow(1.0+tadAEY(r,c),-n); } function tadPVIFbar(r, n, c) { c = (typeof c !== "undefined") ? c : 1; if (r==0.0) return -n; if (n==0.0) return 0.0; return -n * tadPVIF(r,n+c,c); } function tadPVIFA(r, n, c) { c = (typeof c !== "undefined") ? c : 1; if (r==0.0) return 1.0; if (n==0.0) return 0.0; return (1.0-tadPVIF(r,n,c))/r; } function tadPVIFAbar(r, n, c) { c = (typeof c !== "undefined") ? c : 1; if (r==0.0) return 1.0; if (n==0.0) return 0.0; return (r * (1.0-tadPVIFbar(r,n,c)) - (1.0-tadPVIF(r,n,c)) )/(r*r); } function tadIncRATE( nper, pmt, pv, fv, atype, c, guess) { guess = (typeof guess === "undefined") ? 0.10 : guess; fv = (typeof fv !== "undefined") ? fv : 0; c = (typeof c !== "undefined") ? c : 1; atype = (typeof atype !== "undefined") ? atype : 0; var i; var x = 0.0; var x0 = guess; var f; var fbar; for (i=0; i<100; i++) { f = 0; fbar = 0; for (j=0; j<nper.length; j++) { f += pv[j] + pmt[j] * tadPVIFA(x0, nper[j],c) + fv * tadPVIF(x0, nper[j],c); fbar += pmt[j] * tadPVIFAbar(x0, nper[j],c) + fv * tadPVIFbar(x0, nper[j],c); } if (fbar == 0.0) return null; else x = x0 - f/fbar; if ( Math.abs(x-x0) < 0.000001 ) return x; x0 = x; } return null; } </script>