It’s absolutely fair to blame excel. It obfuscates the code in favor of displaying the calculated values - it’s designed to hide the code - which, along with a number of other design decisions, makes it really hard to build an error free spreadsheet beyond trivial sized cases.
Further, its design makes reproducible data practices difficult - in contrast to R or Python which do a lot to separate code from data - and let you re-run the same code on new/updated data. Python and R (and other non-spreadsheet tools) encourage practices that make keeping raw data pristine with work being done on copies of the data. In contrast, it’s really easy to make mistakes with Excel in ways you’ll never catch. Sorting within filtered columns is a good example. Did you add another column after creating the auto filter? Surprise, data in that column won’t sort with all the other data when you use re-sort one of the original columns. Just like that, poof, silent data corruption with no easy way of reverting if the error isn’t caught quickly.
I almost cracked the org-mode code. Almost. Used it for some sheets but now I only use it for my journalling. Hopefully it will keep the embers hot until I decide to pick it up for real again.
Further, its design makes reproducible data practices difficult - in contrast to R or Python which do a lot to separate code from data - and let you re-run the same code on new/updated data. Python and R (and other non-spreadsheet tools) encourage practices that make keeping raw data pristine with work being done on copies of the data. In contrast, it’s really easy to make mistakes with Excel in ways you’ll never catch. Sorting within filtered columns is a good example. Did you add another column after creating the auto filter? Surprise, data in that column won’t sort with all the other data when you use re-sort one of the original columns. Just like that, poof, silent data corruption with no easy way of reverting if the error isn’t caught quickly.