Sum unordered data across multiple sheets - vba

I think sumproduct sumifs indirect is what I need but I fail to see how to construct it;(
I have a workbook for logging volunteer hours.
I'm summing up the monthly hours (12 sheets/tables) to FY Totals sheet/table with hours by volunteer. So the sheet/table that I want to use the formula in is FY TOTALS
The workbook consists of 14 sheets:
sheet(VOLUNTEERS) has a table(tbl_volunteers) It contains data about the volunteer and the 1st 3 columns are duplicated on all 13 sheets (12 monthly and 1 FY totals)
A5[Status] B5[LastName] C5[Firstname]
The Month sheets have the above fields followed by 5 categories with hours per category for each volunteer
The sheet/table FY Totals is identical to Monthly, but I want the categories to sum all 12 months for each volunteer.
So I need to match criteria of [LastName][FirstName] and sum values in [category]D:I
I can send a copy of the file, but not load images here;(

You could use multiple consolidated ranges.
Notice that I have four different ranges. These could have been in different worksheets and the names aren't necessarily in the same order. A pivot table has been created that sums the hours worked for each person as requested. In this example, they just happen to be the same.
How?
Press Alt+D+P (windows) or cmd+alt+P (mac)
Select multiple consolidated ranges, then Next
Select Create a single page field for me, then Next
Add each of your ranges one by one, then Finish
Update
There's so much more you can do with PivotTables, as per your comments -- you can separate out data by creating your own page fields. Do this instead of step 3 above
Select I will create the page fields, then Next
For each range you select and add, click '1' page field and type the description of that data, for example 2016 Data, or 2017 Data
(Optional) Your fields will automatically be put into the report filter field. You might want to drag it into Row Labels field (below Row) to get the view below
You can then see the split of the different fields you used in your PivotTable - in yellow I have my 2016 data and you can see it's been split out in the PivotTable.

Related

Index and Match Excel

I'm creating a vacation tracker in Excel. The first sheet pulls the data from SharePoint which has Start Date, End Date and a Date Difference calculation.
Sheet1
A2=12/16/2015
B2=12/20/2015
C2=5
The second sheet is the visualization of the data. It starts with cell B1 and goes out for 90 days. Is is a word representation of the date. Here is the formula I'm using =UPPER(TEXT(B2,"DDD"))
Sheet2
B1=WED
C1=THU
D1=FRI
E1=SAT
F1=SUN
The next row always B2 has a formula which is always today's date. From there I add one date to increment the dates out to 90 days. B2=Today() and the other cells =B2+1 and so forth
B2=16
C2=17
D2=18
E2=19
F2=20
The problem I'm running to is that our boss can have 3 calendar entries consisting of different dates. So when I perform a SharePoint pull I have 3 different rows of vacation dates. I'm experimenting with an Index and Match example, however the data match it is placed in a new row. How do I place the data on the same row?
I'm not convinced this has much to do with VBA. Seems enough detail of final design but rather light on the data gathering process. However when I perform a SharePoint pull I have 3 different rows of vacation dates hints at a use for Subtotal. Three rows may be 'converted' into one:
where the unshaded part (some cells with Xs) is assumed to be a representation of the current SharePoint data extract. Subtotal is able to add the rows shown lightly filled, which might then be used to =VLOOKUP("Boss"&" Count",A:F,n,0) where n represent the choice of column label.

Exception from HRESULT: 0x800A03EC in VB.net writing to excel

I'm aware there are other questions similar to this, but I haven't found an answer that works for me. I have a program that writes an excel report for sales by month. It works fine when given a date range less than three years, but when I input a date range larger I get this error. Using breakpoints I discovered the error occurs in this portion of code
For iColl = (iReportCollumns + 2) To MaxY
xlApp.Cells(x, iColl) = "=SUM(" & GetColumnName(iColl) & (x + 1) & ":" & GetColumnName(iColl) & (x + iRowsPerRecord) & ")"
Next iColl
Since this is for work, I'm not able to reveal a lot of the code so I'll try to explain in good enough detail what's going on here. If you need more code, let me know and I'll see what I can release. The report has locations which each have multiple (but the same) sale types. For each sale type the report displays by month the total sales.
So sales are grouped at the highest level into locations, with sub groups for each sale type, these are displayed as separate rows of the spreadsheet. The months are the columns of the spreadsheet. iReportCollumns + 2 represents basic information that is displayed for each location, so that the sales data starts in the columns after this. iColl represents the current column, iRowsPerRecord represents the number of sale types. In my test case there are three rows per record, five years for a total of 60 months, and iReportCollumns = 9, so there are a total of 71 columns per row. MaxY represents the number of columns per row, so 71 in this case. This bit of code creates a totals row for each location. I have two locations in my test case so that there are 6 rows of data and 2 rows of totals. The totals rows come before the data rows for each location.
Stepping through this for loop, I discovered that it stops when iColl = 52 while it is still working on the first totals row. So it is not even getting to the data rows before I get this error. However it does insert the column names for all of the columns, but it breaks once it tries to write the sum formulas. Is there some limit to how many columns I can insert into an excel sheet?
My alternative solution is to just limit it to only show a maximum of 24 months per report, which works for other similar reports. That solution is okay, but I'd rather allow the user to choose a larger date range if they so please.

Formula help to extract rows meeting multiple criteria

I have a spreadsheet with over 600k rows. I need to extract data based on multiple criteria and grab only the latest change numbers of each.
So an item number may have multiple entries based on quarter start dates and desc codes because it's been revised several times in that quarter but I just want the most recent one (highest change number) and that row returned or marked in a new column to then filter out.
Hope that makes sense.
I have the following columns. Column A (Desc Code) which has 12 different codes in it, then Column B (Item Number several thousand), Column C (Period Begin, Start of the quarters dating back to 1998) and then a Column H (Change Number). I need to basically pull "Each" row containing the highest change number, for each Item Number in each Period it was available for each code.
So basically The change numbers vary depending on how many changes the Item Number had in the quarter.
And each time there was a change there is a change number for each Item Number for Each Desc Code (12 rows for each).
Thanks.
You lost me somewhere near paragraph 4 but let's simplify things. If you just had two columns -- Item Number and Change Number -- and you had a record for each change, you could just use Excel's subtotal feature: at each change in Item Number, show the MAX of Change Number.
Use the same logic for your situation. Create a new column that combines your "category" criteria (item & desc, or item & period, or whatever), sort by it, then subtotal against that new column and return MAX of Change Number.
Edit:
Item Period Change
100 1 1
100 1 2
100 1 3
100 2 1
100 2 2
I'm not sure if this is how your data looks but let's use it as an example (and's lets forget about Desc Code for now). If you want to find the latest change by item and period, create a new column by combining the Item and Period columns. For example, insert a column (C) and use the formula: =A2&"_"&B2. Now your data looks like this:
Item Period I&P Change
100 1 100_1 1
100 1 100_1 2
100 1 100_1 3
100 2 100_2 1
100 2 100_2 2
Now use Excel's subtotal feature (in the Data menu/ribbon, not the worksheet formula). Here's an example of what this looks like:
In your scenario, for the "At each change in" box, pick your new column (C), since that uniquely identifies the category you trying to identify (item AND period). "Use function" = Max. "Add subtotal to" = your Change Number column.
Click [OK] and Excel will add a new row with the maximum Change Number for each.

Excel Formula to calculate number of user hits in a system everyday

This is the continuation of my previous questions and I have included my global aim with project.
Excel Link:
https://drive.google.com/file/d/0B5W4CgZKsARFSmhqV0ZSM1lBSkE/view?usp=sharing
Task:
The task is to collect the "number hits" of a user in an application "on each day". I can collect a log from the system which will give me the name of the users and their last hit date and total number of hits.(This total number of hits in not on daily basis, but sum of all days). and I need to make a formula to segregate these on daily basis
Screenshot:
To understand in better way I have created few screenshot, which I am looking to implement.
The excel has two tabs raw_data and value_capture. I will use raw_data to paste my raw data collecting from system log and value_capture to generate day by day hit statistics
Raw_data tab:
It has three details, 1. date. 2. name and 3 totals hits(This total hits are overall hits of that user on all days)
value_capture:
This has all user names and all dates to mark each day and a column to display all hits.
Now, considering an example of date 20141120, all users hits are 0.
raw_data shows 0 against all users
so value_capture are has to be updated with same
Now on next day 20141121, there is some hits against some users. (Note : if there is no hit against a user, it will only the previous date ie,date will update only if there is a hit on that day)
value_capture updated with that details
On 20141122, there are some more hits against the users
value_capture updated with the details. since the raw_data will show total number of hits against a user, the way of calculating on a particular will be total hits- previous date hit
I am stuck at a way to develop the excel formula here.Looking for an idea to implement this.
Note :
Users name will be fixed on both tabs, but that may come in different order in raw_data tab.
UPDATE
My raw_data sheet will be updated everyday and I want my formula results be fixed in the value_capture sheet after the values are updated (removed) from sheet raw_data
So as i mentioned in my answer to your previous question, the only way to save the results of a formula after deleting/removing its reference cells, is to use a macro.
First of all
you need a proper formula to pull the data from the raw_data sheet and then calculate the difference between that particular cell where the formula resides and the sum of previous cells in that row.
we need two formulas:one for the column B of your value_capture sheet. and the second one for the rest of your table. why? because in the first column you don't calculate the difference between itself and the previous cells, because there aren't any. So there is a little difference in the formula.
FORMULA ONE:(paste in B3 and drag and fill down)
=SUMIFS(raw_data!$C:$C;raw_data!$B:$B;$A3;raw_data!$A:$A;B$2)
FORMULA TWO:(paste in C3 and drag and fill down and to the right)
=IF(SUMIFS(raw_data!$C:$C;raw_data!$B:$B;$A3;raw_data!$A:$A;C$2)-IF(ISNUMBER(B3);SUM($B3:B3);0)>0;SUMIFS(raw_data!$C:$C;raw_data!$B:$B;$A3;raw_data!$A:$A;C$2)-IF(ISNUMBER(B3);SUM($B3:B3);0);0)
As you see in my screenshot for user in cell A3, we have value of 4 for the date 20141120 and the next day the value is 14 but the cell gets the difference, that is 10, and then then next day, the value increases to 16, so the cell value for D3 becomes 2 which is the different of 16 for that day and the sum of previous ones. This continues until today's value which is 24 so the cell gets 7 because the sum of previous ones is 17.
Now that you have your values captured correctly, with respect to the difference with the sum of previous days, it is time to make them fixed and eternal.
For this you need a macro:
Sub saveMyData()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("B3:L18").Copy
ws.Range("B3").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
So obviously you need to update this range "B3:L18" this is what I have in the example sheet only.
Now this macro, copies and pastes all the values from that range onto itself, so you lose your formulas.So each day, you need to go to *line 21** of the same sheet and get the formula from C21 and paste it on somewhere on row 3 from where you want to continue capturing the new day's data. (you won't need the first formula, because it is only used once in the first column, the first day.)
This was the only way to capture the values using formulas and then save the results of the formulas in their place and go and fetch new data. I couldn't think of any other strategy to make it more automatic, except for writing mova VBA and letting excel go and find where you left the day before and paste the formulas in their right place and repeat the task.
all these formulas are array formulas, so press ctrl+shift+enter to calculate the formulas.
Remember to adjust the formulas to your regional settings, i suppose, by replacing the ";" with ",".
here is the example sheet downloadable from this link
Tell me if you have problems anywhere and don't forget to answer my question in the comments about the way you update your dates in row 2 of value_capture.
The formula that you are looking for is SUMIFS
=SUMIFS([SUM RANGE],[RANGE 1],[VALUE 1],[RANGE 2],[VALUE 2])
SUM RANGE is the column of values that you want to SUM so that is your column C. For Range 1 you want to select the range of IDs. The VALUE 1 will be equal to the value in Column A Row X. For RANGE 2 it will be the Date column. For VALUE 2 it will be the value in the column header.
Put this together and you have something akin to:
=SUMIFS(raw_data!$C:$C,raw_data!$B:$B,$A3,raw_data!$A:$A,B$2)
This would be in cell B3 and you could fill the other cells from there.
If total hits for a day is a rolling count of ALL hits ever then at the end of your equation you need to subtract the sum of the prior days.
For example:
=SUM(B3:B4)
This would only need to be added to subsequent columns (not the first).
So the equation in C3 would be
=SUMIFS(raw_data!$C:$C,raw_data!$B:$B,$A3,raw_data!$A:$A,C$2)-SUM(B$3:C3)
Then in D3 it becomes
=SUMIFS(raw_data!$C:$C,raw_data!$B:$B,$A3,raw_data!$A:$A,D$2)-SUM(B$3:D3)
Try Sumifs formula
=SUMIFS(raw_data!$C:$C,raw_data!$B:$B,$A3,raw_data!$A:$A,B$2)-IF(ISNUMBER(A3),A3,0)

Need to populate master list from many different sheets in excel

So lets say I have 3 different sheets each with information on them like this:
Sheet 1 Sheet2 Sheet 3
item1|2 item2|7 item1|4
item3|5 item3|6 item6|2
item9|7 item8|4 item7|8
The first part (code#) is a code for an item. The second number is the quantity of that item. What I need to do, is to be able to populate a master list which will pull the quantity of each item and sum them up. In the above case, the master list would look like this:
item1|6
item2|7
item3|11
item4|0
item5|0
item6|2
item7|8
item8|4
item9|7
I'm sorry if this is confusing but I really need some help!
Elaborating on #Skip Intro's solution:
Ensure all three sheets have the same labels (say Item and Qty), preferably in Row1.
Alt+D then P, select Multiple consolidation ranges and PivotTable, Next, Next.
Select your range from Sheet1 (say A:B), Add, repeat for Sheet2 and Sheet3, Finish.
Change Count of Value to Sum of Value, if required and might as well select PivotTable, PivotTable Options, Totals & Filters, untick (if necessary) Show grand totals for rows.
If you don't want (blank) to show either filter it out or restrict the data ranges (at the start) to less than whole columns.