After having solved the initial programming question by using the following calculation...
=IF(OR(AND($D11="Long",$M11>=$N11),AND($D11="Short",$M11<=$N11)),"Win","Loss")
The secondary question relates to when D11 is blank. I have tried a number of ways including using ISBLANK in tring to include this in the calculation.
The calculation will reside in R11. So written out... IF D11 is blank then blank otherwise the above calculation will take place. Not sure how to place this within the above calculation to make it work. My efforts have been incorrect.
You can just add that first, in this generic form
=IF($D11="","",your_formula)
so specifically that becomes:
=IF($D11="","",IF(OR(AND($D11="Long",$M11>=$N11),AND($D11="Short",$M11<=$N11)), "Win","Loss"))
see screenshot
Related
Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 6 months ago.
Improve this question
Use Case: Golf irrigation valve assembly ordering. My boss said:
Hey [piratecheese13], I don't want this part summary to include blanks between [dynamic arrays] and I want to add and remove things to the [precedent to the array]
I have suggested inserting and deleting rows as needed. This is not a solution. She wants to get my list, add and remove rows from the precedent to the array, and send it to a vendor for ordering. Any work she does beyond that, is work she'd rather I do before it gets to her.
I have a neat little Dynamic Array function =FILTER(PartsAndQuantities1,(Parts1<>"")*(IF(Quantities1=0,"",Quantities1)<>""))and it works flawlessly to summarize while removing 0 counts and blank rows. The next step is to insert the same exact formula for a different range without risking a spill if a row is added or a blank if a row is removed
Here's that function in green working as intended with a 2nd function in red manually typed below
Here's what happens if my boss decides to remove a fitting from F9. She sees a blank in the summary a half hour later and assumes there was an error. Again, easily solved by removing a row but that's not an option.
Here's what happens if my boss decides to add a fitting to F12. She sees #Spill! and knows there is an error Again, easily solved by inserting rows but that's not an option.
Things I Have Attempted:
Just stick an & Between 2 functions. I really thought this would work but
this results in F7&F18 and G7&G18 etc as & appears to do work on every line instead of starting after the first FILTER() completes. adding parentheticals around each filter changes nothing. Using + results in value error. Nesting the function within AND() only ever results in Booleans TRUE & FALSE
I've also tried this tutorial on CHOOSE() which handles multiple arrays but only one column and seems like it wouldn't fit
Note: my boss doesn't want to insert lines to solve spill errors, she REALY doesn't want to deal with macro enabled workbooks
Thanks to Scott Craner this was exactly what I needed!
=VSTACK(FILTER(F7:G15,(F7:F15<>"")*(IF(G7:G15=0,"",G7:G15)<>"")),FILTER(F17:G23,(F17:F23<>"")*(IF(G17:G23=0,"",G17:G23)<>"")))
I am trying to fill the sell price column in an Excel spreadsheet with the increased values in colors based on the round up columns value (1 to 50 green, 50 to 100 blue, 100 to 150 yellow, 150+ pink).
I've opted for the percentage table because some items can be sold for a lot more than what I have purchased them for, so that's just for my benefit. I am open to any other suggestions and I am new to this whole business thing.
I was using IF in my formula which would work great for using one percentage increase in the formula:
=IF($E27<50,ROUNDUP(I$27,-1))
If I try to enter a second argument like
=IF(OR($E28<50,ROUNDUP(I$28,-1)OR($E28>50,<100,ROUNDUP(J$28,-1))))
I will get an error.
I'm probably using the formulas wrong, I've tried "AND" and a couple other formulas, but I can't find anyone else trying to achieve the same or similar.
So something like this:
=IF($E28<50,ROUNDUP(I$28,-1),IF($E28>50,ROUNDUP(J$28,-1),"Error"))
But not sure what the <100 was for.
Although the problem is not completely clear, I understand that you want to add a formula with nested if statements.
I will recommend you to try nested ifs in parts.
=IF($E27<50,ROUNDUP(I$27,-1),"First if condition is false")
If everything is working as per the requirement then edit that text in the formula to add another if statement.
=IF($E27<50,ROUNDUP(I$27,-1),IF(OR(condition 1, condition 2,more conditions),"value if true","value if false"))
In the second argument provided by you, the arguments of the OR function has not been properly provided. Ensure that all the arguments of an OR function are conditions separated by a comma.
$E28<50 This is a condition so it's ok.
But other arguments are not making sense.
Also, using OR multiple times inside the first OR arguments is not clear.
It would be beneficial if you could provide the basic table and mention the requirement clearly.
I've got another one that is really kicking my butt.
I know why the error is occurring. I just don't know how to fix it. There are a lot of IF statements so I'm thinking maybe they are arranged in a way that is causing the error. I'm sure there is a much cleaner way to write them.
Whenever I try to input data into D7 or E7 I get the circular reference error.
These are my current formulas for all relevant cells:
F7: =IF(C7<0,"FAIL",IF(OR(ISBLANK(B7),ISBLANK(C7))," ",IF(ABS(F8)<=30,"PASS","FAIL")))
G7: =IF(D7<0,"FAIL",IF(OR(ISBLANK(B7),ISBLANK(D7))," ",IF(ABS(G8)<=30,"PASS","FAIL")))
H7: =IF(E7<0,"FAIL",IF(OR(ISBLANK(B7),ISBLANK(E7))," ",IF(ABS(H8)<=30,"PASS","FAIL")))
F8: =IF(B7<0,"",IF(C7<0,"",IF(D7<0,"",IF(E7<0,"",IF(G7="FAIL","",IF(H7="FAIL","",IF(ISBLANK(B7),IF(ISBLANK(C7),"","input Lw_Lw"),IF(ISBLANK(C7),"input Lw_Up",SUM(C7-B7)))))))))
G8: =IF(B7<0,"",IF(C7<0,"",IF(D7<0,"",IF(E7<0,"",IF(F7="FAIL","",IF(H7="FAIL","",IF(ISBLANK(B7),IF(ISBLANK(D7),"","input Lw_Lw"),IF(ISBLANK(D7),"input Up_Lw",SUM(D7-B7)))))))))
H8: =IF(B7<0,"",IF(C7<0,"",IF(D7<0,"",IF(E7<0,"",IF(G7="FAIL","",IF(F7="FAIL","",IF(ISBLANK(B7),IF(ISBLANK(E7),"","input Lw_Lw"),IF(ISBLANK(E7),"input Up_Up",SUM(E7-B7)))))))))
Snip of Excel table
Any help would be much appreciated!
I worked out the following two formulas for you. Please try them.
[F7] =IF(IFERROR(ABS(F8)<=30,FALSE),"PASS","FAIL")
[F8] ==IF(ISBLANK(C7),"input "&F$3,IF(OR(COUNT($B7:$E7)<4,COUNTIF($B7:$E7,"<0")>0),"",SUM(C7-$B7)))
Copy them from F7:F8 to G7:H8.
The basic principle I applied in order to avoid a circular reference is to do all testing in row 8 with the outcome that F8 will either hold a blank or a number. Therefore "Pass" or "Fail" in row 7 can be decided based on the number: If the number is within range it's a PASS, else it's failed. Note that Abs("") will cause an error. Therefore IFERROR(ABS(F8)<=30,FALSE) will return False in case F8 = "". Effectively, this is the reverse of what I wrote in my comment above.
I looked for shorter expressions for other tests as well. Count() will only count cells with numbers in them. Therefore I use this function instead of a series of ISBLANK() queries. Similarly for COUNTIF($B7:$E7,"<0").
I used mixed absolute and relative addressing to enable copying formulas to other columns and referred to the column captions in place of repeating the same texts in the formulas.
I didn't fully test my solution. However, with my above explanation as a guide you should be able to take possession and eliminate any errors I might have left behind.
I am currently trying to optimize a VBA code with extreme execution time (56 hours and more on high end PC). The main problem is nested loops (up to 8) due to complicated iterative calculations and referencing ranges in formulas.
I have two questions:
1)
What loops are most preferred in VBA (based on their hardware strain for lack of better word)
2)
Is there a way to reference variable range of cells in a formula? For example in formula:
=AGGREGATE(15,6,SQRT((R2C10:R500000C10-RC[10])^2+(R2C11:R500000C11-RC[11])^2+(R2C12:R500000C12-RC[12])^2),1)
I am referencing relative cell: "R500000C10". There are two main issues: For one, the half milion cells might not capture all data - though in most cases there is less active cells than that, in same cases that might be an issue. Second, it takes forever to scan through so many cells (same reference is used in multiple of VLOOKUPs).
The first issue could be solved by referencing the whole column, but that makes the second problem worst.
I would like to reference it in a similar way that xlDown works:
Range().End(xlDown).Select
The problem there is I would need to reference it within the Active.Cell.FormulaR1C1. Is there a way to do that?
Thanks!
Well you wrote that you have a code with 8 loops and try to optimize it maybe you can edit and put part of that code, because your description is very general, however, with information that you put i speculate that about your point
1)it depend what do you want to do? because each "loop" have their own use for specifyc scenaries
2)there are tricks to do that but all depend what are you trying to do and why you want to use .formulaR1C1
again im speculating but you can try tu separate your loops in indenpendent function, and maybe you are putting a formula inside cells, and question is why? you can create functoins and Sub in your VBA code and do your "extrem execution" without use xtra "resours"
Hey guys, so I need to follow the instructions on the left side of the screen and implement them into the 'Total' column on the right. (From the 'Total sales' column)
As you can see I've put an IF statement there just to test and it's very broken as I'm unsure how to begin.
I need some sort of long IF statement that incorporates those rules.
EG:=IF (E3 >= 3000 AND <= 4999.99, print(E3 *1.25), IF etc etc more rules here.
However it's very wrong and I'm sure its impossible to stack IF statements like that.
The method is not to stack the conditional statements, but to nest them!
An if statement is built in the following format:
=IF(CONDITION, RESULT-IF-TRUE, RESULT-IF-FALSE)
If you were to put another if statement if the first case is false, you could achieve your goal.
For example:
=IF(SALES<3000, BONUS=0, IF(SALES>=3000 AND SALES<5000, BONUS=0.025, IF(...)))
This is a Lookup task.
Since you seem to want to embed the targets and %'s in the formula, you could do if like this
=E3*INDEX({0;0.025;0.075;0.1},MATCH(E3,{0;3000;5000;8000},1))
or if you have a version of Excel that supprts XLookup
=E3*XLOOKUP(E3,{0;3000;5000;8000},{0;0.025;0.075;0.1},,-1,1)
More typically, you'd put the Targets and %'s in a range and lookup into that range