Got a version of Excel that uses the menu interface (Excel 97, Excel 2000, Excel 2002, or Excel 2003)? This site is for you! If you use a later version of Excel, visit our ExcelTips site focusing on the ribbon interface.
With more than 50 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He is president of Sharon Parq Associates, a computer and publishing services company.
Learn more about Allen...
Blair has a worksheet divided into two areas: data entry and data verification. The data verification area consists of formulas that check entries using IF statements. If a problem is located, a text message is displayed in a cell in the verification area, otherwise the formula returns a blank. The following is a typical verification formula:
=IF(A1<>5,"Value in A1 is not 5")
The problem is that the data verification area can be quite large, which means it is easy to miss one of the text messages. Blair wondered if there was a way to create a formula that examined the data verification area and returned a single message if there were any other messages in the area.
There are a number of different ways that this problem can be approached. If the data verification area is contiguous, then a simple array formula will do the trick. Enter the following in any empty cell on the worksheet:
Make sure that ValRange is replaced with the range of cells in the data validation area. Also, make sure you enter the formula by pressing Shift+Ctrl+Enter (to denote it is an array formula). The formula returns a value that indicates how many cells in the range have a length that is greater than 0. In other words, it counts the number of cells that have messages visible.
If you prefer to not use an array formula, you can accomplish the same result by using the following regular formula:
The result, again, is the number of cells that have a length greater than 0. Another approach is to use some of the COUNT functions provided by Excel:
=COUNTA(ValRange) - COUNTBLANK(ValRange)
This formula counts the number of cells in the range, and then subtracts the number of blank cells in the range. The result is the number of cells that are non-blank, or those that are displaying messages. A different formulaic approach can be used to determine a simple yes/no response:
=IF(COUNTIF(ValRange,"?*"),"","No ") & "Verification Messages"
If there are no messages in the ValRange, the formula returns "No Verification Messages." If there are messages, it strips the "No" and simply returns "Verification Messages."
It would also be a good idea to apply conditional formatting to your data verification area. While the formulas discussed so far will tell you if there are messages, it won't highlight where those messages are—conditional formatting can pinpoint each message. Select all the cells in the area that contain formulas, and then use conditional formatting to check the length of those cells. If the length is greater than 0, the cell could be formatted to show a red background. This will make any messages in the data verification area much harder to miss when scrolling through the worksheet.
If you are in the mood to completely redesign your worksheet, a more powerful approach would be to do away with the data verification area. You can achieve the same results (checking what is in the data entry area) by using data validation for each of the entry cells. Set up properly, data validation would make sure that the user entered acceptable values into each cell, removing the need for much of the data validation area.
ExcelTips is your source for cost-effective Microsoft Excel training. This tip (2772) applies to Microsoft Excel 97, 2000, 2002, and 2003.
Program Successfully in Excel! John Walkenbach's name is synonymous with excellence in deciphering complex technical topics. With this comprehensive guide, "Mr. Spreadsheet" shows how to maximize your Excel experience using professional spreadsheet application development tips from his own personal bookshelf. Check out Excel 2013 Power Programming with VBA today!