Share via

Excel formulas in Microsoft 365 being converted to CSE array formula

Anonymous
2020-07-29T18:10:38+00:00

In Excel, in Microsoft 365, I'm using a number of INDIRECT formulas to create indirect references so the worksheet will maintain its cell relationships even if other users delete or insert rows.  One example of a formula is =INDIRECT(ADDRESS(ROW($B40)+1,COLUMN($B40)))

However, when I run a compatibility check on the file, it says that formula "that has spilled or may spill in the future. These formulas will be converted to array formulas...in older versions of Excel."  The formula is not an array and should not be converted to a CSE array in older versions.  If I save the file and send it to a user running Office 2016, when the Office 2016 user opens the file, all of the INDIRECT formulas have been converted to CSE arrays and are blank .  The formula =ADDRESS(ROW($B40)+1,COLUMN($B40)) does not show up as a compatibility issue, but when the INDIRECT( ) portion is added, it becomes a compatibility issue.  Is there any remedy to prevent Excel from converting to a CSE array other than uninstalling Microsoft 365 and using an earlier Office version?

Microsoft 365 and Office | Excel | For home | Windows

Locked Question. This question was migrated from the Microsoft Support Community. You can vote on whether it's helpful, but you can't add comments or replies or follow the question.

0 comments No comments

4 answers

Sort by: Most helpful
  1. Anonymous
    2020-08-13T18:18:51+00:00

    Here's the solution folks for anybody else having this issue.  Just add an @ before the formula.  It has to do with what Excel thinks are dynamic arrays and legacy CSE arrays.

    Description:

    https://support.microsoft.com/en-us/office/dynamic-array-formulas-in-non-dynamic-aware-excel-696e164e-306b-4282-ae9d-aa88f5502fa2?ui=en-us&rs=en-us&ad=us

    Solution:

    https://support.microsoft.com/en-us/office/excel-functions-that-return-ranges-or-arrays-7d1970e2-cbaa-4279-b59c-b9dd3900fc69?ui=en-us&rs=en-us&ad=us

    The solution article lists formulas Microsoft has identified that will cause this problem.  Basically if you enter an @ before your formula it will prevent it from adding the CSE curly brackets {} in previous versions and causing your formulas to not work when somebody using an earlier version of Excel opens your file.

    It looks like this has come up before but not really solved.

    https://techcommunity.microsoft.com/t5/excel/dynamic-aware-excel-incorrectly-flagging-our-custom-xll/m-p/291362

    Adding the @ is just a workaround, Excel is still incorrectly identifying formulas as dynamic arrays. :(

    Was this answer helpful?

    5 people found this answer helpful.
    0 comments No comments
  2. Anonymous
    2020-07-31T01:51:39+00:00

    You are correct, it is the same, and using OFFSET does solve the compatibility problem for cells only looking at an adjacent cell.  But there's still something funky going on.

    This is showing with the same "SPILL" compatibility issue:

    v1=INDEX(INDIRECT(CONCATENATE(SUBSTITUTE(ADDRESS(1,COLUMN($C$35)),"$1",""),ROW($C$35),":",SUBSTITUTE(ADDRESS(1,COLUMN($N$35)),"$1",""),ROW($N$35)+1000)),MATCH($J39,INDIRECT(CONCATENATE(SUBSTITUTE(ADDRESS(1,COLUMN($C$35)),"$1",""),ROW($C$35),":",SUBSTITUTE(ADDRESS(1,COLUMN($C$35)),"$1",""),ROW($C$35)+1000)),0),COLUMNS($C$35:$E$35))

    Simplified, it's also flagged with the compatibility issue:

    v2=INDEX($C$35:$N$1035,MATCH($J39,$C$35:$C$1035,0),COLUMNS($C$35:$E$35))

    Simplified more it's still flagged with the compatibility issue:

    v3=INDEX($C$35:$N$1035,3,COLUMNS($C$35:$E$35))

    This version is not flagged as a compatibility issue:

    v4=INDEX($C$35:$N$1035,MATCH($J39,$C$35:$C$1035,0),3)

    The most simple version is also not an issue:

    v5=INDEX($C$35:$N$1035,3,3)

    But the question is, if each of these are in effect the same formula, why are the first 3 a problem and the last two not?  It seems INDIRECT isn't the cause of the issue so I'll edit the header if I can.  But it also doesn't seem to be an issue when an array is entered since versions 4 & 5 above have arrays but are not issues.  I realize if I make the bottom half of the index array low enough I don't really need the complicated formula like in v1.  But I do need to keep the COLUMNS portion to maintain the formula if columns are inserted.  Oddly enough, if I use

    =VLOOKUP($J39,$C$35:$E$1035,COLUMNS($C$35:$E$35),FALSE)

    that does not show as a compatibility issue.  So I dunno what it is that's causing the hit or miss problem with compatibility.  Seems like it may be an issue with how Excel is checking for the new SPILL errors.

    Was this answer helpful?

    0 comments No comments
  3. Anonymous
    2020-07-30T13:31:33+00:00

    Maybe I'm missing something, but your example formula is exactly the same as just using

    =$B41

    If it is because you insert rows/cells at B41 and always want to reference the new row or cell, then just use

    =OFFSET($B40,1,0)

    Was this answer helpful?

    0 comments No comments
  4. Deleted

    This answer has been deleted due to a violation of our Code of Conduct. The answer was manually reported or identified through automated detection before action was taken. Please refer to our Code of Conduct for more information.


    Comments have been turned off. Learn more