Excel IRR: Can I use range reference inside IRR with math inside {}? - arrays

Good morning. In post "Excel IRR: can I use it referencing a combination of cells and fixed numbers? IRR({-10,11+A2})" is said we can math inside {} using CHOOSE function. But if I have first payment (investment) in B1, 100, and rest of income in a range, B2:B6, (10,10,10,10,70), then, when I try
=IRR(CHOOSE({1,2};-B1,E2:E6))
I receive a #¡VALUE! result with ENTER or CSE. I use an spanish version of Excel 2013, where separator is ";" instead ",". I have try
=IRR(CHOOSE({1,2};(-B1,E2:E6)))
without success. Ideally I would like make some additional calculations in first cell, for example -B1+cell1+cell2 ...
Thank in advance

Related

How to make Vlookup ignore blank cells while still checking to see if the ones with a value inside are correct

I am currently making a tardy counter system for my principal as of right now I am having issues with trying to make it so that whenever a new entry is put into the Datasheet it references to the ID sheet and checks to see if it's correct and if it is the cell next to it is blank if it is incorrect it should say error but every time when I try =IF(A2:A="","",ARRAYFORMULA(if(VLOOKUP(A2:A, ID!A1:A,1,FALSE)=A2:A, "", "error")))
it correctly checks but if any are wrong it outputs N/A I'm fine with that on the ones with a value in it but I need to get rid of the "N/A" corresponding to the blank cells
in summary, I need it to count the values that don't match the ID sheet as wrong rather than the blank cells as wrong
I tried multiple if functions but had no good results
also here is a copy
try:
=ARRAYFORMULA(IF(A2:A="","",IFNA(IF(VLOOKUP(A2:A,ID!A:A,1,)=A2:A,),"error")))
Have you tried the ISBLANK() function. Ex. IF(ISBLANK($A2),...
I got this working in google sheets, try it out:
=IF(isblank($A2),"", IF(IFERROR(VLOOKUP($A2, ID!A:A,1,FALSE)=$A2), "", "error"))

Can you copy down a formula in a column using ArrayFormula that has SUBSTITUTE/LEN/RIGHT functions nested in it?

My Google Sheet has a formula that takes the following URL (as an example)
https://info.example.com/page-one/
and strips it down to the last part. Like this
page-one
It then decides if the keyword in a separate column is used in the naming convention of this page (Yes or No)
What I would like for this formula to do is automatically expand the functions to all the rows that have data. I've been doing this with the ArrayFormula but have not been able to replicate it with these functions.
=IF(ISBLANK(B2),"",IF(LOWER(CONCATENATE(SUBSTITUTE(SUBSTITUTE(TRIM(B2),"&","and")," ","-")))=SUBSTITUTE(RIGHT(A2,LEN(A2)-FIND("#",SUBSTITUTE(A2,"/","#",LEN(A2)-LEN(SUBSTITUTE(A2,"/",""))-1))), "/", ""),"Yes","No"))
Here is a link to the working Google Sheet: https://docs.google.com/spreadsheets/d/1iHkU-rNtNhoOKvW_CWY7WU5OLsMFVqEFNRZlx_R-7RY/edit#gid=1497887942
try:
={"header"; INDEX(IF(B2:B="",,
IF(REGEXMATCH(A2:A, SUBSTITUTE(B2:B, " ", "-")), "Yes", "No")))}
Try =ARRAYFORMULA(IFERROR(SUBSTITUTE(RIGHT(A2:A,LEN(A2:A)-FIND("#",SUBSTITUTE(A2:A,"/","#",LEN(A2:A)-LEN(SUBSTITUTE(A2:A,"/",""))-1))), "/", "")))

Excel array keeps adding ' symbol at begining of problem

I'm trying to create an array for a simple linear regression problem in Excel and find the b1, b0 coefficient. My teacher gave us a worksheet with all the computation and used the following formula:
{=LINEST(SLRData!B2:B15, SLRData!A2:A15, TRUE, TRUE)}
(SLRData being the example worksheet with all the data on it).
However, when I try to implement it in a problem as
{=LINEST(B2:B20, A2:A20, TRUE, TRUE)}
(my problem has 20 variables in each column) it adds a ' to the beginning of the function so it does not compute. Also when I try to copy the {=LINEST(SLRData!B2:B15, SLRData!A2:A15, TRUE, TRUE)} from the example worksheet the "{}" disappears. Is there some specific way you implement this?
If I run the problem without the brackets it gives me a spelling error.
These are so-called array formulas and have a different input method: Ctrl+Shift+Enter
After pressing those keys, in the input field the curly brackets ("{}") appear around the formula.
For further research click here.

Get value of same cell from multiple sheets

I'd like to get the value of cell A1 from multiple tabs in my sheet. I attempted to use INDIRECT, only to be reminded that it wouldn't work in an ARRAYFORMULA. Is there some sort of "makeshifty" formula that would do the same thing?
This is what I originally attempted:
=ArrayFormula(IF(LEN(A2:A),INDIRECT(A2:A&"!A1"),))
Column A is a select list of the tab names in my sheet. So the first instance works, but of course, it doesn't populate down the column as I had hoped. I realize I can just copy the formula down the column, but some type of an ARRAYFORMULA would be ideal as I add rows to the list.
I found this answer, but don't see how I could apply it to my situation.
I also found this answer, but thought since it's 2.5 years old, maybe someone has discovered a clever way to avoid the drag of copying.
Answer:
You need to do this with a script or by using the drag method - INDIRECT uses a string reference and so can't be used with an array.
More Information:
Unfortunately for the user of INDIRECT with ARRAYFORMULA, a discovery of a clever method isn't the issue - the limitation of what can be done with only formulae that is the root of this problem.
Setting up a custom function:
From the Tools > Script editor menu item, you can create scripts. An example custom formula that you could use would be as follows:
function ARRAYINDIRECT(input) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
return input.reduce(function(array, el) {
if (el[0]) array.push(el[0])
return array;
}, []).map(x => ss.getSheetByName(x).getRange("A1").getValue());
}
Make sure to then save the script with the save icon.
In your Sheet you can then call this custom formula as so:
=ARRAYINDIRECT(A2:A)
Rundown of the function:
Takes the input range from where the formula is called - in this case A2:A
Reduces the input to remove all cells that are empty
Maps the name of the sheet which is stored in the cell to the value in A1 of the sheet it references
Returns an array to output
References:
JavaScript Array reduce() Method
INDIRECT - Docs Editors Help
ARRAYFORMULA - Docs Editors Help

Array constant in a formula with non-adjacent cell references

I need to add an array of non-adjacent cells to my array formula. I have tried all of the following array constant-like ways and they all give me a "There is a problem with this formula error".
'Chart Data'!{A12:A14,D3:D11}
{'Chart Data'!A12:A14,'Chart Data'!D3:D11}
'Chart Data'!{A12,A13,A14,D3:D11}
{'Chart Data'!A12,'Chart Data'!A13,'Chart Data'!A14,'Chart Data'!D3:D11}
'Chart Data'!{A12,A13,A14,D3,D4,D5,D6,D7,D8,D9,D10,D11}
{'Chart Data'!A12,'Chart Data'!A13,'Chart Data'!A14,'Chart Data'!D3,'Chart Data'!D4,'Chart Data'!D5,'Chart Data'!D6,'Chart Data'!D7,'Chart Data'!D8,'Chart Data'!D9,'Chart Data'!D10,'Chart Data'!D11}
Entire formula (the array constant goes where the {#####} is):
{=SUM(((1-References!M1:M12)*({#####}*(G3:G14+F3:F14-0.11)))+((References!M1:M12)*('Chart Data'!A12:A23*(G3:G14+F3:F14-0.11)))+((H2:H13*X3:X14)+(H3:H14*Y3:Y14)+(I2:I13*(V3:V14-X3:X14))+(I3:I14*(W3:W14-Y3:Y14))))}
I am 100% positive that it is this particular array constant that is causing the problem. I can't move the cells I'm referencing to put them in line. Is it even possible to reference a non-adjacent range in an array formula? If it's possible, what am I doing wrong?
There are several ways to do this. The following is very simple and pretty direct so my favorite.
EITHER choose a cell to build your string for your non-contiguous array in OR create a Named Range to do it. I'll show the first as it seems nicest for being able to use the mouse freely, but in both of them you can actually be creative using about how you build the string that will become your array. The main advantage of creating it in a Named Range is no helper cell lying about anywhere.
So, you create that string and then make it an array. Say you have a non-contiguous array needed using cells A12:A14 and C3:C11. You use joining and TEXTJOIN() like so:
="{"&TEXTJOIN(",",FALSE,B12:B14,C3:C11)&"}"
to create a text string of the values in those cells wrapped with the curly braces ({}) just as if you'd typed it in ("hardcoded it"). It will look like this with the right values in those cells:
{1,2,3,1,2,3,4,5,6,7,8,9}
but is ain't an array yet.
Now the magic in THIS method. Create a Named Range, perhaps called String2Array, and give it a formula of:
=EVALUATE(A1)
(or whatever cell you used for the above formula creating the text string that you want to be an array). Make the reference absolute. ($A$1... which it will do for you, just don't edit it to be relative. If you use this for similar work, but need it relative, that will work fine, but it just isn't what is needed here.)
Now replace your placeholder in the formula with the Named Range's name (perhaps you DID use String2Array). And you're done.
A couple other methods use INDEX() or CHOOSE() and you can force things to be arrays using the functions DOLLARDE() and IMREAL() (I found on a helpsite in a 2014 post) and some others do the same kind of thing. In those days, one had to use {CSE} too, but SPILL takes care of that now (with those two weird-seeming friendlies and at least two others). The poster was someone I've seen on this site, EXCELXOR was the name for the site, XOR LX was the name of the member here though the functions were mentioned in a comment by a Lori. Since he covers, it seems, aspects not usually covered in helpsites, looking up some of his work here, or elsewhere too, might be worthwhile to some folks.
But this method is very direct and therefore easy to maintain. And personally, I love the idea that EVALUATE() (must be used IN the Named Range functionality, not cell-side) is the gift that keeps on giving, one wonderfully helpful thing after another.
So many ways. You could even literally build the array in a helper column/row somewhere and reference THAT instead of the non-contiguous addresses. I like the joining+TEXTJOIN() approach best because I can use the mouse to easily get all the blocks into the formula since it is a LIVE formula. But you can type out a string fairly easily too and add the {}'s. Or perhaps a user would type a string of addresses and you'd add them like the formula does above. And you can insert actual values (constants) into the string you are building as well if that is appropriate. And you could build it formulaicly... I wouldn't pick that workload first thing off the pile of choices, but if you were going to do it anyway already, then... or if it's a small build.

Resources