Dec 06 2017
01:35 AM
- last edited on
Jul 25 2018
10:32 AM
by
TechCommunityAP
Dec 06 2017
01:35 AM
- last edited on
Jul 25 2018
10:32 AM
by
TechCommunityAP
Using two different versions of 32-bit Excel 2016 (16.0.4549.1000 at home and 16.0.8201.2207 at work) on Win 10,
I have a table with headers starting at A1 that retrieves data from an sql database.
I select the table body rows, say A2:C5 and apply conditional formatting to color cells with =(A1=A2), so a cell is highlighted whenever it matches the cell above.
All works great as I refresh the query, unless the query result is ever empty -- then the conditional formatting breaks in one of two ways: the A1 reference become #REF! or becomes A1048574.
How do I prevent this, or fix it without manually repairing the conditional formatting each time?
(VBA workarounds would be fine.)
To reproduce, you can make a query to an Excel file:
Make a small table in excel, save as tmp.xlsx. Then Data>Get External>From Other>Microsoft Query, select Excel Files. In the picker, check Read only and point to tmp.xlsx. Options>check systems tables so you can select Sheet1$ as the input table, click * to get all data, and File>Return to Excel, and choose to put the table at A1. You now have a query table that retrieves its data from tmp.xlsx
Select the table body (not the headers) and add conditional formatting rule to fill cells with =(A1=A2), i.e., if it matches the cell above.
Delete the table rows, then right click in the table and select Refresh.
The conditional format rule now reads =(A1048574=A2)
Fix it, then delete the data lines in tmp.xlsx, leaving the headers, and save. Refresh the query table and the conditional formatting rule reads =(#REF!=A2). Add data back and refresh again, and it remains broken.
Dec 14 2017 09:49 AM
SolutionHi Jack,
With resulting table use structured references for the conditional formatting. It doesn't work with them directly, the workaround is to use INDIRECT. If the name of your resulting table is Tbl and table column name is "a" when like
=INDIRECT("Tbl[@a]")=OFFSET(INDIRECT("Tbl[@a]"),1,0)
instead of =A1=A2
Dec 14 2017 10:03 AM
Jun 25 2019 06:59 AM
Dec 14 2017 09:49 AM
SolutionHi Jack,
With resulting table use structured references for the conditional formatting. It doesn't work with them directly, the workaround is to use INDIRECT. If the name of your resulting table is Tbl and table column name is "a" when like
=INDIRECT("Tbl[@a]")=OFFSET(INDIRECT("Tbl[@a]"),1,0)
instead of =A1=A2