Essentially, the source data is a set of characteristics about an item, most are numeric and a few are text. The data is downloaded from an external source that delivers the data in a fixed format which is cut-pasted into a "Raw Data" sheet in the workbook.
The purpose of the "Presentation" sheet is to clean up the data in a variety of ways and make it more user friendly. For example, for some reason one column of percentages comes through as 5645 (for example) instead of 56.45%. So, the formula has to divide by 1000 to get it in the proper context. And, as I mentioned, any data point that does not have a value has a "-" in the source data.
In the "Presentation" sheet, column B houses the item codes and the rest of the columns bring in the individual data points (in a different order than the source data). So the core of the formula in every cell is similar to:
=IF(ISNA(MATCH($B8,'Raw Data'!$A$3:$A$5000,0)),"",
IF(OFFSET('Raw Data'!$A$2,MATCH($B8,'Raw Data'!$A$3:$A$5000,0),15)="-","",
OFFSET('Raw Data'!$A$2,MATCH($B8,'Raw Data'!$A$3:$A$5000,0),15)))
In this example, the MATCH checks the item code to see if it exists in the source data and if so, it then checks to see if the data in the 15th column of that matching row is "-". If so, it returns "" otherwise it returns the data. Each column in the "Presentation" sheet links to a specific column of the "Raw Data" sheet. This is a pain too since the order of the "Raw Data" has been known to change causing me to have to adjust every formula.
Since all of the columns in the "Presentation" sheet refer to the same MATCH formula, I've placed that in a hidden column to simplify all the formulas. I'm just wondering if there is a way to avoid evaluating the OFFSET twice across the entire sheet - perhaps CPU cycles are so fast it doesn't matter and this brute force method is fine.
I'm an old programmer and the solution in a programming language is simple. Set a variable = OFFSET(); =IF(variable = "-","",variable). This is essentially what xanksx proposed earlier, but I'm simply wondering if there is a formulaic way to avoid the double evaluation. Thanks again.