In excel, I have a column of about 30,000 entries. I want to take that column and create a new one where the first entry will be the average of the first 4 entries in the original column. The 2 entry in the new column will be the average of the next 4 entries of the original column (from 5-8), so on and so forth. The new column then will therefore have 1/4 of the the size of the original column. How can you do this with excel?
In the image you see the N column from where I want to calculate the averages. In the Q column you see the average of the first 4 values of the N column. I want to extend the Q column so the second entry would be the average of the next 4 values (from 5th to 8th values) and so on and so forth for the remainder of the N column. As said, the Q column will therefore have at the end 1/4 of the size of the N column.
Try below formula.
=SUM(INDIRECT("N" & ROW()*4-3 & ":N" & ROW()*4))/4
ROW()*4 this will multiply every row by 4 means will create a series like 4, 8, 12 ... Now ROW()*4-3 will generate 1, 5, 9 ...
So, by this part of formula "N" & ROW()*4-3 & ":N" & ROW()*4 we will get N1:N4, N5:N8, N9:N12 and so on. INDIRECT() formula will redirect those ranges for SUM() formula and SUM formula will give you summation of of every 4 row data. Finally dividing by 4 will give you average.
#harun24hr has probably posted the right answer, but an alternative solution could be to do the following:
Merge 4 cells in the column you wnat to show the average and then calculate the average eg:
=AVERAGE(A1:A4)
Related
I want to sum a row like
A B C D E
2 4 3 5 5
I want the formula to sum from A1 to some column number like It can be up to column 4 (D1) or up to column 5 (E1). I can retrieve column number but how to add up to that column number is what I am asking for.
Start of sum is fixed A1 but end is dynamic (not fixed)
Any solution will be highly appreciated
Say we want to sum up part of the first row.
Place the first column number in A2 and the last column number in A3. Then:
=SUM(INDEX(1:1,A2):INDEX(1:1,A3))
In your posted example, you would put 1 in A2.
It's probably easiest to sum up the entire row =SUM(2:2) (to sum the values in row 2) or if you have some other data at the beginning (or you want the sum to show up at the beginning) you can do something like =SUM(B2:XFD2)
I got that last column name here: https://www.quora.com/What-is-the-last-column-name-in-an-Excel-file
and checked it was the same as newer versions here: https://support.office.com/en-us/article/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3#ID0EBABAAA=Newer_versions
I have a row of 200 cells. I have to add/average first five cells (A:E), and then take a break of 5 cells and then add/average second five cells (K:O) and so on till the end of the row. How can I do this?
I have tried doing it manually. Actually, I can do this manually but wanted to know if I can do this automatically.
I did a test making some faking data like this:
It's just a bunch of numbers from A1 to CB1. 80 numbers in total. 5 first numbers are 1, then next 5 are 2, next 5 numbers are again 1, then next 5 numbers are again 2, and so on.
This mean that there are 80 numbers, where 40 are 1 and 40 are 2. I want to get the average of first five cells (A:E), and then take a break of 5 cells and then average second five cells (K:O) and so on till the end of the row. In other words, I want to get the average of the 40 cells that contains a 1 value, and it should return a 1.
For this, I've used an array formula:
=AVERAGE(IF(VALUE(RIGHT(COLUMN(A1:CB1);1))<6;IF(VALUE(RIGHT(COLUMN(A1:CB1);1))>0;A1:CB1)))
NOTE: Because this is an array formula, it must be inserted pressing ENTER+CTRL+SHIFT instead of
only ENTER, or it won't work!
How this works?
You want to sum/average only values that are in columns where last digit of column number is 1 to 5, this means columns 1,2,3,4,5,11,12,13,14,15,21,22,23,24,25, and so on. So this works this way:
The part that says COLUMN(A1:CB1) will get an array of column numbers.
RIGHT(COLUMN(A1:CB1);1) will get last digit of each column number, but as text
VALUE(RIGHT(COLUMN(A1:CB1);1)) will convert that last digit into a number.
Then with both IFS, we get an array of only those values where last digit of column number is >0 and <6, and we get the average. I get as result of my average 1 and it's true, because the average of 40 times 1 is equal to 1.
Hope this works for you. You can adapt this easily to make it work with 200 cells.
For example:
In A2 put:
=IF(MOD(COLUMN(),10)=1,AVERAGE(INDEX(1:1,,COLUMN()):INDEX(1:1,,COLUMN()+4)),"")
Drag right.
You can use SUMPRODUCT to add the amounts in the columns and divide by 100:
=SUMPRODUCT(--ISEVEN(INT((COLUMN(A1:GR1)-1)/5)),A1:GR1)/100
if you do not always have 200 numbers you can make the 100 more dynamic with another SUMPRODUCT:
=SUMPRODUCT(--ISEVEN(INT((COLUMN(A1:GR1)-1)/5)),A1:GR1)/SUMPRODUCT(ISEVEN(INT((COLUMN(A1:GR1)-1)/5))*(ISNUMBER(A1:GR1)))
this function have CTRL+SHift+Enter and drag this function until your last data IF(OR((RIGHT(COLUMN(A5),1)+0)={1,2,3,4,5}),A5,--FALSE)
You Find The Columns only which end (1,2,3,4,5) , in last. You use Sum function For Add.
I have a column of wins, "Yes" or "NO" in each cell. I want to Count the number of "yes" in the last 10 rows.
One issue is that not every row has an answer yet but I want the blank row that has other data to be counted for the last 10. So I'm using another column that has data as the count reference. I'm not super formula savvy but have learned a lot lately. This is the formula I'm trying to use but It does not give me the desired result.
=COUNTIF(OFFSET(M1,COUNT(L:L)-10,0),"Yes")
OFFSET is Volatile use INDEX(MATCH())
MATCH(1E+99,L:L)
Will find the last row with a number in it. Then point that at column M in the index:
INDEX(M:M,MATCH(1E+99,L:L))
Which now returns the last row in Column M where there is a number in column L
to get the starting cell we subtract 9:
INDEX(M:M,MATCH(1E+99,L:L)-9)
then it just a mater of treating them like the beginning and end of a range:
INDEX(M:M,MATCH(1E+99,L:L)-9):INDEX(M:M,MATCH(1E+99,L:L))
Then wrap that in the COUNTIF:
=COUNTIF(INDEX(M:M,MATCH(1E+99,L:L)-9):INDEX(M:M,MATCH(1E+99,L:L)),"Yes")
You're really close! I think you want =COUNTIF(OFFSET(M1,COUNT(L:L)-1,0,-10),"Yes")
Row offset: If you have 25 rows of data, COUNT(L:L) will give you 25. You want to offset by 24, since we're starting from M1, so subtract 1.
Column offset: 0
Row span: We want to span backwards 10 rows, so -10
Source: https://exceljet.net/formula/average-last-5-values
I've got a table in excel with 10 rows and 10 columns.
The table contains 100 different values between 1 and 3.
I want to find the highest sum of 10 values using only 1 value from each row and 1 from each column.
Do u guys know a function that finds the highest sum? - I've tried to do i manually, but there are to many combinations!
Hope it makes sense.
Thanks in advance:)
My solution builds on what I wrote in the comment, i.e. you first take the maximum value in the 10x10 array, then the maximum in the 9x9 array (excluding the row/column of the first maximum), etc. My solution tries not to do everything in one formula, but I add a few helper columns, and a bit more helper rows (it is fast and dirty, but it works and is easily audited/understandable). You always can do this on a separate worksheet which you could hide if needed.
The screenshot above goes from cell A1 till Y31.
The key formulas:
3.55 is the result of =MAX(B2:K11)
The first gray cell is =IFNA(MATCH($M12;B2:B11;0);""), and you drag this 9 cells to the left. This tries to find a match with the max result in each column of the table;
The 10 left of the 3.55 is =MATCH(TRUE;INDEX(ISNUMBER(P12:Y12);0);0) , and gives the column number of the max value.
The 2 next to the 10 is =INDEX(P12:Y12;N12) and gives the row number of the max value.
The 1 in cell B12 is =IF(OR(B$1=$N12;$A12=$O12);0;1), and creates a 10x10 matrix with a row and column with zeroes where the previous max value was found.
Then you multiply this with the preceding matrix and create a new 10x10 matrix below (enter {=B2:K11*B12:K21} array formula (ctrl+shift+enter) in B22-K31
You then copy/paste rows 12 till 31 9 times below
The 23.02 is the total sum =SUM($M$12:$M$211) from all 10 maximum values and is the result you are looking for. The 10 is just a check with =COUNT($M$12:$M$211)
I need to find the average of 8 last (rightmost, from right to left) numeric cell values in a row that meet simple criteria of >= 0, ie. zero or positive numbers from rows that contain a mix of zeroes, and negative and positive values. In other words, I need to find the 8th cell reference from all cells containing 0 or higher counting from the end of the row backwards.
Example row:
1.6425 0.6233 5.2899 4.4372 2.0356 3.9796 1.5306 3.8344 0 -1 -1 3.8294 -1 3.0957 0 3.7572 -1
Expected result:
2.50
(3.7572 + 0 + 3.0957 + 3.8294 + 0 + 3.8344 + 1.5306 + 3.9796) / 8
I solved this cleanly using AVERAGEIFS and adding only one supplementary row A2:Q2 to mark just the 8 cells required. This extra row counts backwards from the end of the row, iterating by one from the previous count (next cell to the right) only if the cell above in row 1 is not less than 0, with the formula =IF(A1<0,B2,B2+1) copied throughout row A2:Q2. This then acts as criteria2 for the main formula i.e. use the first 8 cells from the right with a value >=0.
Then it's a simple =AVERAGEIFS(A1:Q1, A1:Q1, ">=0", A2:Q2, "<9") in cell C4 to get the result. C5 is a simple manual test against the calculated result.
Here's the Excel file: https://dl.dropbox.com/u/4974539/averageifs_tweak.xlsx - and a screen shot:
I solved your problem but with plenty of auxiliary columns. In the following I assume you have your data in columns A to Q, starting in row 2
On the first row, put letters A to J in columns T to AC
On the first data row
2.1 Put the forumula =ROW() in column S
2.2 Put array formula (press Shift + Ctrl + Enter when entering it) =SUM(IF(INDIRECT(T$1 & $S2 & ":Q" & $S2,TRUE)>=0,1,0)) to column T and copy it right all the way to column AC
2.3 Enter array formula =INDEX($T$1:$AC$1,MATCH(8,T2:AC2,0)) in column AD
2.4 Finally, put array formula =SUM(IF(INDIRECT(AD2 & S2 & ":Q" & S2) >= 0, INDIRECT(AD2 & S2 & ":Q" & S2), 0))/8 to column AE, this is the result you want
You can copy the row with formulas down to every row with data
This is how it looks in my Excel:
What it does:
in column S is the current row -- we need it for the INDIRECT function, because ROW() does not work in INDIRECT in array functions.
in columns T - AC we count the number of columns in the right side of the current row of data that are positive or zero, starting in different columns -- their letters are on the first row. The rightmost column where we can start is J, otherwise there would not be
8 values.
in column AD we match number 8 and from the first row we get the column where we have to start the range for averaging
finally, in column AE we use INDIRECT to create the reference to the range we want, sum all the numbers that are >= 0 and divide by 8