excel
44506 TopicsAdvanced Excel Formula discussion - Problem with dynamic range
Let's assume I want to rent a house. For each house, if the landlord has an agent, I'll contact the agent; If not, I contact the landlord directly. As below: Landlord Agent House Landlord James Mary W James Linda Michael X David Y Linda Z James Column F: =IFERROR(XLOOKUP(E2:E5,A:A,B:B,E2:E5),E2:E5) This is correct Column G: =XLOOKUP(E2:E5,A:A,B:B,E2:E5) #VALUE! for X-David Column H: =XLOOKUP(E2:E5,A:A,B:B,CHOOSECOLS(E2:E5,1)) Wrong value for X-David, because it returned the first value in range of XLOOKUP([if_not_found]) field My question is: the only difference between G and H is CHOOSECOLS(). If I put =CHOOSECOLS(E2:E5,1) or =E2:E5 in a separate cell, it gives me same result. However, in XLOOKUP, they are recognized differently. What is the logic behind this? Thank you for spending time on reading this.140Views0likes6CommentsTOCOL/TOROW Treat Thunks as Errors
I just reported a bug to Excel in which the TOROW and TOCOL functions, if asked to delete errors, will also delete valid thunks. ISERROR returns FALSE when presented with a thunk, so, arguably, TOCOL shouldn't treat it as an error either. I'm running Office 365 on Windows 11 on a Samsung Yoga laptop. Steps to reproduce: Paste this into a single cell in a spreadsheet: =LET(th, VSTACK(LAMBDA(4)), (@TOCOL(th,2))()) Expected behavior: should return 4. (Delete the ",2" and it does exactly that.) Actual behavior: #CALC error Impact: Breaks workflows for SCAN, MAP, BYCOL, and BYROW Workaround: Use FILTER and ISERROR Details: An Excel "thunk" is a degenerate LAMBDA with no parameters. So if we used LET to make f equal to LAMBDA(4), then f() would always return 4. If a thunk is the final result of a function, it generates a #CALC error, but it's fine for intermediate results. This seems useless, but it's the only way to get functions like SCAN, MAP, and BYROW/COL to return anything but a scalar. For example, I have a piece of code where I need to repeatedly square a large matrix and save the values for further processing. If I get a zero value, I can save a lot of processing by "aborting" the operation. Since you can't abort a SCAN, I just return #NA. Then I'd like to use TOCOL(result, 2) to strip off the unnecessary values. But TOCOL discards everything. I can work around this by using a combination of ISERROR and FILTER, but I shouldn't have to.23Views2likes0CommentsReturn of the Corkscrew with Spilled Arrays
I'm starting a new topic but do want to refer to PeterBartholomew1 post on accumulators here https://techcommunity.microsoft.com/t5/excel/ways-of-performing-accumulation-with-dynamic-arrays/m-p/2329035 This post was in 2021 and things have or may have moved on since then and I'm wondering if there is an easier way to achieve the following. The Corkscrew. I have seen a number of addins and other 5G functions which do far more than I want. I'm basically looking for a way to break the circularity in a corkscrew and it seems that if I can calculate the top row ie typically the opening balance without referring to the closing balance then all would be good. To add complexity I’m trying to fuse the actuals and forecasts in this single function. I have flags to determine the actuals and can use NOT actuals to get the forecasts (same flags) and can pic up the actual opening balance from the source data easily. As I will calculate all time periods for both I can then just add them (as actuals will be multiplied by the Actual flag and thus zero for forecast periods and vice versa for the forecasts. So I just need to calculate the forecast period which will be the same for the entire array block. The key is. getting the previous value. (for the inflows and outflows as they are already calculated I can just shift their arrays forward I col but adding a column in front to get the previous value so that is easy. I can then get the closing balance by adding the inflows and outflows that would fall in the middle of the corkscrew to this previous value to simulate an opening balance. The inflows and outflows can then be added easily and the closing balance simply summed. So all the clever work would go in the opening balance. The added complexity I have is that I am doing a multi row version. ie there are ‘currently’ 3 entities all with opening balances, all with inflows and outflows and closing balances. I want to calculate these in blocks of these entities – 1 row per entity but in a single dynamic array. But the corkscrew will be made up of 4 dynamic arrays – opening bal, inflows, outflows and closing. If someone has a better logic here then do let me know. I saw Jeff Robsons one from a few years back using sumifs for the middle bit. But again, I want to do these in separate blocks which does add a layer of complexity. The reason is that I can ( have) modelled with multiple entities together rather than separately which means one just needs to extend the blocks (VBA to the rescue as there will be a good number of them) as required and inputs can just be assigned to the respective entity (often locations around the world might just be a tiny rep office with hardly anything going on so no need for a fully blown model but can be detailed separately. I also have the ability to enable or disable entities so they are included or excluded from the calcs. SO back to the problem, Model attached. Blue cells mark the dynamic array function for the block. The inflows and outflows will come from other dynamic arrays. But this idea means that one can expand the middle if the top/bottom are taken care of with regard to the circularity. I’m trying to get something easy to implement ideally in a single function (with or without LET)Solved1.9KViews0likes30Comments- 192Views1like6Comments
Issues With PowerQuery Using 2 Tables with different Data Sets
Im having issues using power query when I try to use 2 tables to make a pivot table. I am using a sheet that pulls information from a system I use for maintenance. The first screenshot is a subset that breaks down sub items for a main "work order". The next 2 screenshots are from a separate table that show the main "work order" and has an "Equipment Pool" that shows who owns the vehicle in question. When trying to create a pivot table, a lot of information shows as blank. (see bottom screenshot) I am wondering what I am doing wrong for it not to be able to pull the "Equipment Pool" when it aligns to the "Asset ID". Any help is appreciated. (For security reasons I have not put all information from the tables, only the relevant ones)46Views0likes1Comment"Getting Name" bug on my worksheet
One of the cells in my worksheet has a "Getting Name" bug on my worksheet - I have no idea what this is referring to - I've never seen this in my 40-years of using Excel - there are no Range Names nor Links in this workbook. What is it and how do I get rid of it?235Views1like10CommentsHow should I write this Process?
I am not sure how to do this in function for without going through a long chain of manual brute force steps and hope I'm in the right discussion group for this. I have hunted the help hits on my search engine, but I'm not even sure if I am asking the right question so I am getting frustrated. The picture below shows where I am now. I want to set up a Function the will roll a d100 x number of times (with individual rolls reported, not added together) with x equaling the row's Chances cell (an assigned value). The 1 and 47 are the established Red/Blue cut offs for a different cell to process (outside this question, but will take suggestions if you have them). Ideally they would display as "81, 28, 42" etc. but I am interested in the function lay out. When it comes to Functions, my knowledge is limited the very basic ones and I am using baby talk when I do use them, so please be kind. Is this even possible or I am I just being crazy/unrealistic?149Views0likes6CommentsFormula help
I have the following formula that partially works. It processes this formula and returns the 1st match based on the formula criteria. =IFERROR( LET( KeyTypes,FILTER('Key Log'!$F$4:$F$309,(TRIM('Key Log'!$A$4:$A$309)=TRIM($D$6))*(TRIM('Key Log'!$C$4:$C$309)=TRIM($K$15))), KeyNums,FILTER('Key Log'!$K$4:$K$309,(TRIM('Key Log'!$A$4:$A$309)=TRIM($D$6))*(TRIM('Key Log'!$C$4:$C$309)=TRIM($K$15))), IF(INDEX(KeyTypes,ROW(A1))="Hard Key","V"&INDEX(KeyNums,ROW(A1)),INDEX(KeyNums,ROW(A1))) ),"") This formula resides in cells A8:A18 which is designed to return a key number, whether the key be a swipe key or a hard key. Cells B8:B18 are for descriptions of the key identified in cells A8:A18. This formula is supposed to find the 1st match on the key log and then find any other matches and place them in cells A8:A18. There is another formula for defining the description based on criteria. I need this formula to search out all transactions on the key log that match the ID number on the Key Issue Form in cell D6 with the cells in column A on the ID number and to also match the room number from K15 on the Key Issue Form with the room number in column C on the key log. There is something missing from this formula that is not allowing the other transactions to be found and listed on the Key Issue Form. Can anyone help me complete this formula? This is the formula for B8:B18 =IF(A8="","", LET( FilteredRows,FILTER(SEQUENCE(ROWS('Key Log'!$A$4:$A$309)),('Key Log'!$A$4:$A$309=$D$6)*('Key Log'!$C$4:$C$309=$K$15)), RowNum,INDEX(FilteredRows,ROW(A1)), Room,INDEX('Key Log'!$C$4:$C$309,RowNum), Status,INDEX('Key Log'!$E$4:$E$309,RowNum), Type,INDEX('Key Log'!$F$4:$F$309,RowNum), DateVal,INDEX('Key Log'!$D$4:$D$309,RowNum), IsAB,OR(RIGHT(Room,1)="A",RIGHT(Room,1)="B"), DoorDesc,IF(IsAB,"Combined Main & Room Door","Main Door"), KeyDesc,IF(Type="Swipe Key","Swipe Key","Hard Key"), DoorDesc & " " Can someone help me figure this out? Carl235Views0likes7CommentsLearning Macro Control Buttons
My goal is to embed two control buttons that pop up when a certain range of cells is selected. I have two columns (C:D) that have numeric entries for quantities of items. I want to be able to select a cell in this range and have two buttons appear next to active cell, one to add by an input value and one to subtract by an input value. I was able to create Form Control Buttons that can do the task but I can't figure out how to align them to the active cell and hide them if the active cell is outside of the desired range. Any suggestions? Do I need to use ActiveX buttons instead of Form Control?88Views1like1Comment