Monday, January 2, 2012

Formula Forensics 006. Palindromes

Chandoo wrote a post in August 2011 where he looked at determining if a cell contained a palindrome.


Chandoo presented a formula for determining if a cell; C1; contains a palindrome:


=IF(SUMPRODUCT((MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)=MID(C1,LEN(C1)-ROW( OFFSET($A$1,,, LEN(C1) )) +1, 1))+0)=LEN(C1),"It’s a Palindrome","Nah!")


And then Chandoo challenged everyone:


How does this formula work?


Well, that is your weekend homework.


So today we’re going to complete our homework and pull apart the above formula and see what makes it tick.


Download the example file so you can follow along with a worked example, Excel 97-2010.


In a blank worksheet enter


C1: “Chandoo” without the brackets


D1: =IF(SUMPRODUCT((MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)=MID(C1,LEN(C1)-ROW( OFFSET($A$1 ,,, LEN(C1)))+1,1))+0)=LEN(C1),"It’s a Palindrome","Nah!")


In the example below we will work on two words:


Firstly, “Chandoo” which is clearly not a Palindrome


and Secondly, “Radar” which is a Palindrome


The main structure of this formula is that it is a simple If () function.


The Excel If() function is defined by 3 parts


=If(Condition, Value if True, Value if False)


Our Formula is


=IF( SUMPRODUCT(( MID(C1, ROW( OFFSET( $A$1,,,LEN(C1))), 1) = MID(C1, LEN(C1) - ROW( OFFSET( $A$1,,,LEN(C1))) + 1, 1)) + 0) = LEN(C1), "It’s a Palindrome", "Nah!")


Condition:                 SUMPRODUCT((MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1) = MID(C1, LEN(C1) - ROW(OFFSET($A$1,,,LEN(C1)))+1,1))+0)=LEN(C1)


Value if True: "It’s a Palindrome"


Value if False: "Nah!”


Lets not waste time on the two Values if True/False as they are purely a message to the user, the real work happens in the Condition part of the If() function.


The Condition does all the work: SUMPRODUCT((MID(C1,ROW( OFFSET($A$1,,, LEN(C1))),1) = MID(C1, LEN(C1)-ROW( OFFSET($A$1,,,LEN(C1)))+1,1))+0)=LEN(C1)


Is a Sumproduct and a Len


That is the formula is doing a calculation of the sumproduct of some inner calculations and comparing the answer to the length of the contents of cell: C1 in the example of "Chandoo" = Len(C1) = 7


SUMPRODUCT(( MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)= MID(C1, LEN(C1)-ROW( OFFSET($A$1,,, LEN(C1)))+1,1))+0)=LEN(C1)


Lets now look at the two inner calculations:


MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)


Copy this calculation into E7


= MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1) Don’t press Enter, press F9


(If using the example file goto cell E9, Press F2 and then F9)


Excel will return {"C";"h";"a";"n";"d";"o";"o"} Don’t press Enter, press Esc when ready


It is an Array of the letters in the cell C1


Now do the same for the second part of the equation:


Copy this calculation into E8


= MID(C1, LEN(C1)-ROW(OFFSET($A$1,,,LEN(C1)))+1,1) Don’t press Enter, press F9


Excel will return {“o”;”o”;”d”;”n”;”a”;”h”;”C”}


You will notice that this array is the reverse of the word in C1


We will come back to how these two equations work in a minute or two


But note that we now have


Sumproduct(({"C";"h";"a";"n";"d";"o";"o"}={“o”;”o”;”d”;”n”;”a”;”h”;”C”})+0)


We can evaluate the inner part of this to see what happens


Copy this calculation into E10


={"C";"h";"a";"n";"d";"o";"o"}={“o”;”o”;”d”;”n”;”a”;”h”;”C”} Don’t press Enter, press F9


Excel will return an Array {FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE}


This means that only the 4th letter or “n” in Chandoo is the same forward and backwards.


Looking at the next bit


Copy this calculation into E12


=({"C";"h";"a";"n";"d";"o";"o"}={“o”;”o”;”d”;”n”;”a”;”h”;”C”})+0 Don’t press Enter, press F9


Excel will return {0;0;0;1;0;0;0}


Excel has converted the false/True array above into an array of 0's and 1's


Finally in E14 evaluate:


=Sumproduct({0;0;0;1;0;0;0})


Is evaluated and Excel adds up all the numbers returning a 1 as the answer.


So the original equation :


=IF(SUMPRODUCT((MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)=MID(C1,LEN(C1)- ROW( OFFSET($A$1,,, LEN(C1))) +1,1)) +0 )=LEN(C1),"It’s a Palindrome","Nah!")


Is simplified as


=IF( 1 = LEN(C1),"It’s a Palindrome","Nah!")


Now C1 has the Word “Chandoo “ in it which is 7 letters long


=IF( 1 = 7,"It’s a Palindrome","Nah!")


So the If() function returns the False answer of “Nah!”


If we place a Palindrome such as “Radar” in C1 and skip backwards to the


SUMPRODUCT(( MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)= MID(C1, LEN(C1)-ROW(OFFSET($A$1,,,LEN(C1)))+1,1))+0)=LEN(C1)


Section , Evaluating each part again we see


E21: MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)


Evaluates to {"R";"a";"d";"a";"r"}


And


MID(C1, LEN(C1)-ROW(OFFSET($A$1,,,LEN(C1)))+1,1)


Evaluates to: {"r";"a";"d";"a";"R"}


And


( MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)= MID(C1, LEN(C1)-ROW(OFFSET($A$1,,,LEN(C1)))+1,1))


Evaluates to: {TRUE;TRUE;TRUE;TRUE;TRUE}


With


SUMPRODUCT(( MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)= MID(C1, LEN(C1)-ROW(OFFSET($A$1,,,LEN(C1)))+1,1))+0)


Evaluating to: 5


Which is clearly equal to the length of the word “Radar” and so the If() function returns “It’s a Palindrome”


But how do the middle bits


MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)


and


MID(C1, LEN(C1)-ROW(OFFSET($A$1,,,LEN(C1)))+1,1)


Work?


The two equations are effectively the same


The first works left to right and extracts each letter one at a time


The second works right to left and extracts each letter one at a time


How Does


=MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1) F9


Evaluate to {"C";"h";"a";"n";"d";"o";"o"}


=MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1) F9


Is a simple Mid() function which takes the 1 Character at position ROW(OFFSET($A$1,,,LEN(C1))) from the contents of C1


What is ROW(OFFSET($A$1,,,LEN(C1)))


Is used to return an array of numbers from 1 to Len(C1) in this case 7


eg: {1;2;3;4;5;6;7}


So in E16 enter =ROW(OFFSET($A$1,,,LEN(C1))) and press F9


Excel evaluates it to {1;2;3;4;5;6;7}


So the function =MID(C1,ROW(OFFSET($A$1,,,LEN(C1))),1)


Returns the 1st, 2nd. 3rd, 4th, 5th, 6th & 7th characters from C1 as an Array


=ROW(OFFSET($A$1,,,LEN(C1)))


Takes the Row of the range defined by the Offset Function


Note that OFFSET($A$1,,,LEN(C1)) is a simple Offset that sets up a range


The excel Offset Function is defined as


=Offset(Reference, Rows, Columns, [Height], [Width])


In our example


=OFFSET($A$1,,,LEN(C1))


Will return a Range which is referenced to A1, has no Row or Column offset and is the length of cell the contents of Cell C1


Effectively returning a range A1:A7


Because this is all in an Sumproduct formula, Excel evaluates this formula for each value in the Range


And so


=ROW(OFFSET($A$1,,,LEN(C1)))


evaluates it to


{1;2;3;4;5;6;7}


Which is then used extract the characters from the word in C1 into an Array as {"C";"h";"a";"n";"d";"o";"o"}


A similar process applies to the second half of the two equations


MID(C1, LEN(C1)-ROW(OFFSET($A$1,,,LEN(C1)))+1,1)


Except that it is evaluated from the Right to Left of the Word in C1 by use of the


LEN(C1)-ROW(OFFSET($A$1,,,LEN(C1)))+1


In the Mid Equation


So in summary we use Sumproduct to compare two Arrays, which contain the word and the word reversed, to each other. The Sumproduct counts the number of common matches and then this is compared to the length of the word.


If the two match the word is a Palindrome.


You can download a copy of the above file and follow along, Download Here.


You can learn more about how to pull Excel Formulas apart in the following posts which are all included in the Formula Forensic Series:


I am running out of ideas for Formula Forensics and so I need your help.


If you have a neat formula that you would like to share and explain, try putting pen to paper and draft up a Post as Luke did in Formula Forensics 003 or like above.


If you have a formula that you would like explained but don’t want to write a post also send it in to Chandoo or Hui.



RSS feed for comments on this post. TrackBack URI



View the original article here

Sunday, January 1, 2012

The Excel part of mail merge

Hey, the holidays are fast approaching, which means you've got to get your cards signed, sealed, and delivered! This post goes out to those of you who keep your address list in Excel and need to figure out how to use it to create mailing labels in Word.


Creating labels can be intimidating, mainly because there are a number of intricate steps to follow and you're typically working with different programs—in this case, Excel and Word. And if you create labels infrequently, it's hard to remember what to do and what to watch out for.


Learning how to make your Excel address list magically show up on your sheets of labels boils down to five basic steps:


Overview of five-step process for creating labels


This post is about that first step—the one where you prepare your address list in Excel so that you can use it in Word. If you get this part of the process right, things will run more smoothly when you're setting up your labels in Word.


The key thing to understand is that your column headers, or categories, in Excel will become merge fields (placeholders) in Word. Each merge field corresponds to a piece of the address on the label—first name, last name, street address, and so on. Word pulls out the information in your Excel columns and plugs it into the corresponding merge fields, with an end result that looks something like this:


Data from Excel columns appearing on label


When setting up your address list in Excel, consider the following tips:

Use "friendly" column headers such as First Name, Last Name, Address, and City instead of Column 1, Column 2, Column 3, and Column 4.Set up your address list so that each column represents the smallest possible piece of information. For example, use separate columns for First Name and Last Name rather than just a Name column. This practice gives you more flexibility if you end up creating cards or letters in addition to labels.Avoid blank rows and columns in your address list. During the mail merge, these blanks can trick Word into thinking that it has reached the end of the address list, when in fact there is more information after the blanks. To make it easier to pick the address list you want Word to use, give it an easily recognized name in Excel. To do this, select the range of cells that make up your address list. Then, in the Name box next to the formula bar, type a name like Holiday_Cards and click OK.Postal codes can be tricky. If you have a column containing postal codes, make sure you format that column as Text. Otherwise, Excel will strip out any zeros from the front of the postal code. If you're creating a new address list from scratch, be sure to format your column as text before you type the postal codes. If you're importing addreses into Excel from a .txt file, use the Text Import Wizard to format the appropriate columns as Text (as opposed to leaving them in the General format or in another number format that might mess up the mail merge).

By the way, if you want to create labels from your Outlook contacts, you can do that without first importing the contacts into Excel. Word can access your contacts directly from Outlook during the mail merge process. For the details, download this Mail Merge Made Easy guide. It will tell you exactly what to do, based on where you keep your contacts (Excel, Outlook, or another email program) and where you plan to print your labels (Word or Publisher).


Once everything is set up in Excel, you'll need to open Word and start your mail merge (Mailings tab | Start Mail Merge group | Start Mail Merge). The following articles do a good job of walking you through that process.


I know darn well you do! Please feel free to leave them in a comment.


View the original article here

Saturday, December 31, 2011

Data’s got a brand new bag: PowerPivot for Excel (video)

I liked the heads up but was expecting a little more from the video. For instance a quick example how you linked up your sheets in the way you showed.


Still, thanks for the heads up but my data amounts are hardly enough to expand on it like this. But having said that, a small side-step if I may...  Since beginning this week I started using Outlook 2010 (was using SeaMonkey's mail). Part of this decision was triggered by the 'Business Contact Management' extension; that critter is outrageous for small businesses like I represent.


I'm slowly, but steadily, starting to become -very- impressed with the way you can inter-exchange data between Office applications. A bit comparable like you showed here; one sheet easily connected to the other. In my case; accessing Outlook data (contacts) from Word (using VBA obviously).


Alas, thanks for sharing but..  - no offense - but I am looking forward to one of your "casual" example video's. Those really rock, I'm even actively (carefully) spreading them with some of my customers :-)


View the original article here

Remembering Nathan (Nate) Oliver

thank you for your tribute to Nate


I am so sad that I will not see Nate or talk to him again.  He was gifted in many ways.  His brilliant mind and physical skills were tempered by his passion for people and being helpful.  I love what everybody has written, even those who are just starting to learn who Nate was through his legacy of posts, blogs, pictures, and more.  I took many pictures of Nate over the years.  They are here:


skydrive.live.com


Goodbye my friend and colleague.  We had great times and I always learned something from you.  Even though you are gone, your code lives on,  thank you


To Nate's family and friends, I give my most sincere condolences


Warm Regards,


Crystal


Microsoft MVP, Access


www.accessmvp.com/strive4peace


View the original article here

Friday, December 30, 2011

Tracking small projects in Excel

Hi Anneliese,


If you ask any project manager what's the worst thing that he can do to manage his project's, he'll tell you "using Excel to schedule and manage the project".


MS Project is way better at that and Excel is really not made to manage projects. Problems with Excel will start one you have change requests, how can you handle them?


I'm a contributor to PM Hut and one of the common things that project managers tell us is how Excel "ruined" the project (of course, you might think that they're blaming the tool, but when you start hearing the same thing over and over again, you will start wondering).


PS: Glenna's work is perfect, and I'm not criticizing it in any way (as she tried her best to make Excel work as a PM software), but again, and in my opinion (and the opinion of many other project managers), Excel is just not made for project management.


View the original article here

Thursday, December 29, 2011

Introduction to Spreadsheet Risk Management

This series of articles will give you an overview of how to manage spreadsheet risk. These articles are written by Myles Arnott from Excel Audit

Part 1: An Introduction to managing spreadsheet riskPart 2: How companies can manage their spreadsheet riskPart 3: Excel’s auditing functionsPart 4: Using external software packages to manage your spreadsheet risk

Introduction to Spreadsheet Risk Management


The potential impact of spreadsheet error hit the UK business news recently after a mistake in a spreadsheet resulted in outsourcing specialist Mouchel issuing a major profits warning and sparked the resignation of its chief executive.


See the full news article here: http://www.express.co.uk/posts/view/276053/Mouchel-profits-blow


Over the next few weeks we will look at the risk spreadsheets can introduce to an organisation and the steps that can be taken to minimise this risk.


Because we all love Excel, right? True certainly, but the main reason is that it is intuitive, flexible, cost effective and provides quick solutions to high priority day to day problems.


And what is the alternative? The IT department. The simple fact is that end user developed spreadsheets often fill the gap between the current business requirements and formally managed IT systems.


Unfortunately this reliance on spreadsheets, rather than robust, well governed IT solutions can add significant risk to an organisation if it is not properly managed.


Spreadsheet risk is the risk that a business could lose revenue and profit, fail to comply with regulators or find its reputation damaged as a result of spreadsheet error (be it fraudulent or unintentional).


Poorly structured spreadsheets can also lead to a loss of productivity and increased audit costs, further damaging the bottom line.


A recent study of typical enterprise spreadsheets by the Tuck School of Business at Dartmouth found that 94% of spreadsheets and 5% of all formulae within spreadsheets contain errors.


The European Spreadsheet Risk Interest Group (EuSPrIG) are the voice of best practice spreadsheet development and the management of spreadsheet risk.


Below are a couple of examples of what can go wrong from the EuSPrIG website:


C&C Group admit to mistake in revenue results


Shares in C&C fell 15 per cent after it said total revenue in the four months to end-June had not risen 3 per cent as reported, but had dropped 5 per cent. C&C said cider revenues in the UK had fallen 12 per cent, not 1 per cent, while cider revenues in Ireland were flat instead of up 7 per cent as reported last week.


C&C’s group finance director and COO said the error in last week’s announcement occurred after data were incorrectly transferred from an accounting system used for internal guidance to a spreadsheet used to produce the trading statement. “It was basically human error… there’s nothing wrong with our accounting systems,”


FSA fines Credit Suisse £5.6m


The FSA decided to impose a financial penalty of £5.6 million on the UK operations of Credit Suisse in respect of a breach of Principles 2 and 3 of the FSA’s Principles for Business:

Principle 2 states that “A firm must conduct its business with due skill, care and diligence.”Whilst Principle 3 requires that “A firm must take reasonable care to organise and control its affairs responsibly and effectively, with adequate risk management systems.”

More specifically, section “2.33.3. The booking structure relied upon by the UK operations of Credit Suisse for the CDO trading business was complex and overly reliant on large spreadsheets with multiple entries. This resulted in a lack of transparency and inhibited the effective supervision, risk management and control of the SCG {Structured Credit Group}”


Excel is, and is likely to remain, the first choice for businesses when developing financial models and analysing data. The risk that this introduces to businesses if unmanaged is real and potentially material.


In the next article we will look at ways that companies can manage their spreadsheet risk.


In my brief usage of Excel, I have experienced several risky situations. Sometimes it just a mild data loss, other times, there was a potential of revenue loss or customer annoyance. Due to the economic slowdown many large and small corporations are employing spreadsheet based solutions. And if you do not understand the risk & manage it, then your risk being featured on EuSPrIG’s horror stories page.


Do you know (or experienced) a spreadsheet horror story? Please share your ideas and best practices with us using comments.


Many thanks to Myles for writing this series. Your experience in this area is invaluable. I am really keen to learn about the best practices and adopt them in my business. If you enjoy this series, drop a note of thanks to Myles thru comments. You can also reach him at Excel Audit or his linkedin profile.



RSS feed for comments on this post. TrackBack URI



View the original article here

Wednesday, December 28, 2011

Formula Forensics No. 005 – Zebras and Checker-Boards

This week in Formula Forensics we’ll look at, Zebra Stripes and Checker-board Conditional Formatting.


This idea is inspired by a number of posts over the past few years asking about zebra stripes but specifically BobR who in in June 2011, also asked about Checkerboards in the post: Want to be an excel conditional-formatting Rock Star, Comment No. 154.


I got the conditional format for alternating row and column colors,


Is there a conditional format to make it a checkerboard whereas the cell A2 will remove either the conditional for the row or column and then alternately to A4, B1, B3 etc?


Chandoo responded fairly quickly with this Conditional Formatting formula:


=IF(MOD(ROW(),2)=1,MOD((ROW()-1)*8+COLUMN(),2)=0,MOD((ROW()-1)*8+COLUMN(),2)=1)


Unbeknownst to Chandoo I posted this about a minute later:


=ISODD(ROW()+COLUMN())


Both formula correctly answer BobR’s question.


So today we’re going to pull apart Zebra Stripes and Checker Boards and see what makes them tick.


As always you can follow along in a download file here: Download File.


Zebra Stripes as Conditional Formatting is simply applied using a simple formula within Conditional Formatting.


=MOD(ROW(),2)=0


Conditional Formatting requires a formula that returns a boolean “True” to apply a format or a Boolean “False” to not Apply a format.


So the formula is better read as: If MOD(ROW(),2)=0


And  If MOD(ROW(),2)=0, the formula will evaluate as True


This is best evaluated as 3 columns on a worksheet.



In cells


B5:B10 The formula =Row() returns the Row Number


C5:C10 The formula =Mod(Row() ,2) returns the Mod of Row Number, divided by 2


The Mod function returns the remainder of the division of the Row Number divided by 2,


So in Row 5, Mod(Row(),2) = Mod(5, 2) = 5/2 = 2 Remainder 1 = 1


and in Row 6, Mod(Row(),2) = Mod(6, 2) = 6/2 = 3 Remainder 0 = 0


D5:D10 The formula =Mod(Row() ,2)=0 checks the remainder against the value 0


This is what evaluates to either True or False depending on the Row number.


Where the Values are True the Format will be applied (Even Rows)



The Conditional Formatting can be applied to Odd Rows If the Formula is slightly altered


=Mod(Row() ,2)=1



Similarly the formatting can be applied to Columns using


=MOD(COLUMN(),2)=0/1



RobR received two responses to his Checker-Board Conditional Formatting request.


=IF(MOD(ROW(),2)=1,MOD((ROW()-1)*8+COLUMN(),2)=0,MOD((ROW()-1)*8+COLUMN(),2)=1)


and


=ISODD(ROW()+COLUMN())


Lest see what’s inside these two formula.


This is a simple If Formula with 3 components


=IF(MOD(ROW(),2)=1,MOD((ROW()-1)*8+COLUMN(),2)=0,MOD((ROW()-1)*8+COLUMN(),2)=1)


If Condition        MOD(ROW(),2)=1


Value if True:     MOD((ROW()-1)*8+COLUMN(),2)=0


Value if False:    MOD((ROW()-1)*8+COLUMN(),2)=1


The If Condition is already known to us, as it’s the same formula used in the Zebra Stripes above.


It evaluates to True when it is on an Odd Row.


So when it is an Odd numbered Row Excel will look at MOD((ROW()-1)*8+COLUMN(),2)=0


And when it is an Even numbered Row Excel will look at MOD((ROW()-1)*8+COLUMN(),2)=1


We can notice that these are the same formulas which have a different ending of =0 and =1


MOD((ROW()-1)*8+COLUMN(),2)=0


This section Takes each Row subtracts 1 and then multiplies this number by 8. This can be expressed as simply as saying multiply the Row * 8.


This will always return an Even Number and could have been simplified to Row()*2


MOD((ROW()-1)*8+COLUMN(),2)=0


The next bit adds the column number to the previous Even Number.


So now this part will be Odd when the column is Odd and Even when the column is Even.


MOD((ROW()-1)*8+COLUMN(),2)=0


The remainder of the formula is the same as the Zebra Stripes formula.


An Odd Number (Odd Columns) in the section above will return a 1 as the result of =Mod(Odd,2)


An Even Number (Even Columns) in the section above will return a 0 as the result of =Mod(Odd,2)


When evaluated against 0 will return True for Even Columns and False for Odd Columns.


Now the exact same happens in the False section of the If formula except that it is evaluated against 1.


I tackled this problem from a different direction to Chandoo.


Knowing that Even + Even = Even and Even + Odd = Odd and that the row and Column Numbers increase in each direction by 1 each Row/Column, it was simply a matter of adding the Row and Column numbers together and checking if it was Odd or Even


The Excel function IsOdd() and IsEven() both return a Boolean “True” if the contents are Odd or “Even” respectively. This negates an external truth check as described above.


This is easily shown by adding a formula to the Checker area


=Row()+Column()



Excel 2003: The above formula won’t work in Excel 2003.


Try this instead =Mod(Row()+Column(),2)=1


If the alternate shading is required a switch to


=ISEVEN(ROW()+COLUMN())


Does the trick.



Excel 2003: The above formula won’t work in Excel 2003.


Try this instead =Mod(Row()+Column(),2)=0


http://chandoo.org/wp/2009/03/13/excel-conditional-formatting-basics/


and


http://chandoo.org/wp/2008/03/13/want-to-be-an-excel-conditional-formatting-rock-star-read-this/


and


http://chandoo.org/wp/2008/10/14/more-than-3-conditional-formats-in-excel/


You can download a copy of the above file and follow along, Download Here.


You can learn more about how to pull Excel Formulas apart in the following posts


Formula Forensics 001 – Tarun’s Problem


Formula Forensics 002 – Joyce’s Question


Formula Forensics 003 – Lukes Reward


Formula Forensics 004 – Freds Problem


If you have a neat formula that you would like to share and explain, try putting pen to paper and draft up a Post as Luke did in Formula Forensics 003. or this post.


If you have a formula that you don’t understand and would like explained but don’t want to write a post also send it in to Chandoo or Hui.


Spread some love,
It makes you awesome!


Posts & Navigation


Tags: Check-Board, column(), if(), iseven(), IsOdd(), Learn Excel, Microsoft Excel Conditional Formatting, Microsoft Excel Formulas, MOD(), row(), Zebra Stripes



RSS feed for comments on this post. TrackBack URI



View the original article here