<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Nate Oliver's blog</title><link>http://msmvps.com/blogs/nateoliver/default.aspx</link><description>My Excel-related musings.</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Reversing Excel Cell Contents</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/09/09/reversing-excel-cell-contents.aspx</link><pubDate>Wed, 09 Sep 2009 22:43:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1722173</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1722173</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1722173</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/09/09/reversing-excel-cell-contents.aspx#comments</comments><description>&lt;p&gt;This is a bit of a tricky subject, in that it depends what you mean by reversing. This particular entry will explore reversing blocks of a String, versus an exact reverse of everything.&lt;/p&gt;
&lt;p&gt;So, here&amp;#39;s an example, how do I get from this:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;4189 &amp;gt; 3743 &amp;gt; 2040 &amp;gt; 949 &amp;gt; 195 &amp;gt; 5&lt;/p&gt;
&lt;p&gt;To this:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;5 &amp;gt; 195 &amp;gt; 949 &amp;gt; 2040 &amp;gt; 3743 &amp;gt; 4189&lt;/p&gt;
&lt;p&gt;There&amp;#39;s no way to do this natively, in Excel, that I can think of. At least, not without really working your tail off. So, we&amp;#39;ll, naturally, roll our own.&lt;/p&gt;
&lt;p&gt;We&amp;#39;ll make this a two-step process, a UDF to accept the data, and a Sub Routine to sort it. That would appear as the following:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;br /&gt;Public Function stringReverse(ByRef strIn As String) As String&lt;br /&gt;Dim tmpArr() As String&lt;br /&gt;tmpArr = Split(strIn)&lt;br /&gt;Call Reverse(tmpArr)&lt;br /&gt;stringReverse = Join(tmpArr, &amp;quot; &amp;quot;)&lt;br /&gt;End Function&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;Public Sub Reverse(ByRef lParams() As String)&lt;br /&gt;Dim i As Long, tmp As String&lt;br /&gt;For i = 0 To UBound(lParams) / 2 - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp = lParams(i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lParams(i) = lParams(UBound(lParams) - i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lParams(UBound(lParams) - i) = tmp&lt;br /&gt;Next i&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;A couple of things to note.&lt;/p&gt;
&lt;p&gt;1) This requires a VBA environment greater than Excel 97, as it uses String Functions that were introduced in VB6.&lt;br /&gt;2) This is a fairly efficient process, you might note that the processing Sub Routine reduces the iteration against the array by 2.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s a few different ways to implement this. The first is with VBA, e.g.,&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;br /&gt;Sub foo()&lt;br /&gt;MsgBox stringReverse(&amp;quot;4189 &amp;gt; 3743 &amp;gt; 2040 &amp;gt; 949 &amp;gt; 195 &amp;gt; 5&amp;quot;)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;And you might be wondering at this point, why not use VBA&amp;#39;s native strReverse() function? E.g.,&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;br /&gt;Sub bar()&lt;br /&gt;MsgBox strReverse(&amp;quot;4189 &amp;gt; 3743 &amp;gt; 2040 &amp;gt; 949 &amp;gt; 195 &amp;gt; 5&amp;quot;)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Well, strReverse() reverses everything a little too well. Notice what happens with 4189, for example - it becomes 9184 - not quite what we&amp;#39;re after.&lt;/p&gt;
&lt;p&gt;The other manner in which to use this, which is why we created a UDF as the initial call, is as a Worksheet User Defined Function call, e..g,&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;=stringreverse(A1)&lt;/p&gt;
&lt;p&gt;In addition to the text examples in this blog post, I&amp;#39;m attaching a working example. It includes VBA and is attached with no assurances or warranties - open it at your own risk. Otherwise, have a nice evening.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1722173" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.01.72.21.73/String_5F00_Reversal.xls" length="23552" type="application/vnd.ms-excel" /></item><item><title>Monthly and Annual IRR Values</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/09/07/monthly-and-annual-irr-values.aspx</link><pubDate>Mon, 07 Sep 2009 23:41:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1721466</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1721466</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1721466</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/09/07/monthly-and-annual-irr-values.aspx#comments</comments><description>&lt;p&gt;This entry is based on a thread I responded to, here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mrexcel.com/forum/showthread.php?t=76494"&gt;http://www.mrexcel.com/forum/showthread.php?t=76494&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Occasionally the question comes up as to how to derive Monthly Internal Rate of Return (IRR) values. The answer is, well,&amp;nbsp;that would&amp;nbsp;depend what format your data is in, in terms of timing.&lt;/p&gt;
&lt;p&gt;If your Spreadsheet houses monthly data, IRR() will naturally do this. XIRR() will not, it wil annualize your data.&lt;/p&gt;
&lt;p&gt;However, see the attached, it shows examples of flipping back and forth (with both), considering different data constructs. There&amp;#39;s no VBA, this is a pure-play exercise in Worksheet Functions.&lt;/p&gt;
&lt;p&gt;The 2nd example (Worksheet) is required to be array-entered as Transpose() won&amp;#39;t fire, effectively, otherwise.&lt;/p&gt;
&lt;p&gt;Also note that multiplying by 12 might serve as a decent gut-check, but won&amp;#39;t be accurate, as you&amp;#39;re looking at compounding growth, by month - a different mathematical paradigm, it&amp;#39;s not linear growth.&lt;/p&gt;
&lt;p&gt;Lastly, there&amp;#39;s another important concept baked into the first Worksheet - tie your numbers out via different means, until you&amp;#39;re really comfortable with various Excel functions and visualizing them.&lt;/p&gt;
&lt;p&gt;Hope you had a good, long weekend (for those that had one)!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1721466" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.01.72.14.66/Monthly_5F00_Annual_5F00_IRR.xls" length="19968" type="application/vnd.ms-excel" /></item><item><title>Back Solve Cash Flows to a Target IRR</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/09/06/back-solve-cash-flows-to-a-target-irr.aspx</link><pubDate>Sun, 06 Sep 2009 17:54:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1721202</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1721202</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1721202</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/09/06/back-solve-cash-flows-to-a-target-irr.aspx#comments</comments><description>&lt;p&gt;Today&amp;#39;s Blog entry comes from a real-World experience I once had, while purchasing a large asset on a deferred payment schedule. The asset&amp;#39;s price, like many large assets, wasn&amp;#39;t fixed, but negotiable. So, prior to heading into negotiations, our team wanted to understand what various cash flows would look like if we altered the payment schedule to match a targeted Internal Rate of Return (IRR).&lt;/p&gt;
&lt;p&gt;In order to expedite this process, I used an Excel-native&amp;nbsp;utility known as Goal Seek. In fact, in order to further expedite the process, I used Goal Seek in a VBA procedure. To find Goal Seek, pends on your Excel version. Pre Excel 2007, it can be found in the &amp;#39;Tools&amp;#39; area. Post Excel 2007, you&amp;#39;ll want to click into the &amp;#39;Data&amp;#39; tab, and explore the &amp;#39;What If Analysis&amp;#39; button.&lt;/p&gt;
&lt;p&gt;Goal Seek, Solver&amp;#39;s younger brother, is pretty slick. It allows you to change a cell&amp;#39;s value based on a calculated value, elsewhere. There is a trick to implementing Goal Seek when you&amp;#39;re dealing with small numbers, like percentages. You want to change your calculation options to enable iteration, as desribed here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://office.microsoft.com/en-us/excel/HP100541491033.aspx#Change%20the%20number%20of%20times%20Microsoft%20Excel%20iterates%20a%20formula"&gt;Office Online Link&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Maximize the number of iterations, to 32767, as mentioned, here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://office.microsoft.com/en-us/excel/HP051992911033.aspx"&gt;Office Online Link #2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And crank your max change way down, to a very small number. As the first link notes, this will slow Goal Seek down a little bit, but your results will be much better. I.e., there&amp;#39;s not much point in getting the wrong result, faster.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m attaching a simplified example of my construct. It contains a simple VBA procedure, and it is provided with no assurances or warranties - if you chose to open it, you do so at your own risk. That VBA procedure is as follows:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;br /&gt;Sub BackSolve()&lt;br /&gt;Range(&amp;quot;B6&amp;quot;).GoalSeek _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Goal:=Range(&amp;quot;B8&amp;quot;).Value, ChangingCell:=Range(&amp;quot;G2&amp;quot;)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;This procedure allows us to bypass the Goal Seek UI dialog, and simply process our request. What does it do? It modifies the year 5 cash payment (outflow), in Range G2, by changing to our targeted IRR in Range B8, which is an input cell (yellow). You&amp;#39;ll note as you run this that your calculated&amp;nbsp;IRR, in Range B6, will update to match our request, due to our cash outflows adjusting. This is another good trick to modeling - tieing out your results.&lt;/p&gt;
&lt;p&gt;While the example is a simplified one, it can be implemented in&amp;nbsp;larger, more&amp;nbsp;sophisticated models. And with that, Happy Labor Day Weekend!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1721202" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.01.72.12.02/Back-Solve-CFs.xls" length="20992" type="application/octet-stream" /></item><item><title>Fantasy Football Draft Board Tracking</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/08/31/fantasy-football-draft-board-tracking.aspx</link><pubDate>Mon, 31 Aug 2009 18:41:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1719723</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1719723</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1719723</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/08/31/fantasy-football-draft-board-tracking.aspx#comments</comments><description>&lt;p&gt;People use Excel for a lot of different things, accounting, engineering, statistical work, etc... Yesterday, a friend asked for help with formatting projected player stats to manage her fantasy draft. I&amp;#39;m attaching the file, there is no VBA.&lt;/p&gt;
&lt;p&gt;This file isn&amp;#39;t extremely refined, as I only spent a few minutes on it. But what it allows you to do is scratch players off the main board, and then quickly scan who remains, by position. And of course you can add Worksheets to compile your draft, add comments, etc.. The projections aren&amp;#39;t mine, they come from:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.fftoolbox.com/index.cfm"&gt;http://www.fftoolbox.com/index.cfm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, obviously feel free to disagree with them. Go into the Overall Worksheet, change the Drafted Column (I), there&amp;#39;s a drop-down. Notice the formatting flow to other Worksheets.&lt;/p&gt;
&lt;p&gt;You might notice my SumProduct() function appears to be working harder than it should. When I received the data, the trailing spaces in the players names on the main board did not always match the individual Worksheets, and it was easier for me to approach that problem as such versus cleansing the data.&lt;/p&gt;
&lt;p&gt;So, perhaps this will help you manage your FF draft. And as huge football fan, enjoy the season! Oh, and go Vikings!!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1719723" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.01.71.97.23/FantasyFootball2009.xlsx" length="34168" type="application/vnd.openxmlformats-officedocument.spre" /></item><item><title>Interesting question - How to learn Excel?</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/07/18/interesting-question-how-to-learn-excel.aspx</link><pubDate>Sat, 18 Jul 2009 19:27:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1702856</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1702856</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1702856</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/07/18/interesting-question-how-to-learn-excel.aspx#comments</comments><description>&lt;p&gt;I received an email from a nice fellow, from a very large Minneapolis-based organization, yesterday, asking how a coworker could learn to use Excel.&lt;/p&gt;
&lt;p&gt;This is a pretty good question, for mature individuals in the workforce, or potential hobbyists who might think they&amp;#39;ll have a need for the software, at some point.&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s my advice, based on my experience.&lt;/p&gt;
&lt;p&gt;I would not start on your own - the realm of possibilities are too vast and while it&amp;#39;s easy enough to say &amp;quot;read the manual&amp;quot;, you won&amp;#39;t know what you&amp;#39;re looking for.&lt;/p&gt;
&lt;p&gt;A primer is in order. I would scour local Community Colleges for primer courses, e.g., if you were in the Twin Cities, Normandale Community College offers a beginner Excel course, on the weekends, for $99:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://normandale.augusoft.net/index.cfm?method=ClassInfo.ClassInformation&amp;amp;int_class_id=6235&amp;amp;int_category_id=5&amp;amp;int_sub_category_id=26&amp;amp;int_catalog_id=0"&gt;http://normandale.augusoft.net/index.cfm?method=ClassInfo.ClassInformation&amp;amp;int_class_id=6235&amp;amp;int_category_id=5&amp;amp;int_sub_category_id=26&amp;amp;int_catalog_id=0&lt;/a&gt;#&lt;/p&gt;
&lt;p&gt;The point in doing this is two-fold:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Friendly price-point&lt;/li&gt;
&lt;li&gt;Establish a base understanding of Excel with hands-on assistance&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I don&amp;#39;t necessarily recommend that particular course or institution, as I haven&amp;#39;t attended either, but it&amp;#39;s an example of the concept. And they offer more advanced courses, too.&lt;/p&gt;
&lt;p&gt;Once you have a good working base knowledge of Excel, and remember, we&amp;#39;re learning to crawl before we walk, and walk before run, then I recommend to self-study.&lt;/p&gt;
&lt;p&gt;Microsoft Excel MVP, Tom Urtis, has a write-up on this very subject, layering on additional Excel insight, in the following link:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.atlaspm.com/faqxllearnmore.html#104"&gt;http://www.atlaspm.com/faqxllearnmore.html#104&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And I agree with this, as this is how I approach learning how to use Excel.&lt;/p&gt;
&lt;p&gt;A few additional comments. You&amp;#39;re not Neo, and this isn&amp;#39;t &amp;#39;The Matrix&amp;#39;, you can&amp;#39;t download an understanding of Excel directly into your brain. If you want to learn how to effectively use&amp;nbsp;Excel, you&amp;#39;ve got to want it, and study it quite a bit, to the point where you feel your working knowledge is adequate.&lt;/p&gt;
&lt;p&gt;I really believe that self-study and experimentation on Spreadsheets, that are mission-critical to you, are imperative for learning how to use Excel, versus contrived academic work. Have you ever been in a car that you&amp;#39;re driving to a location you&amp;#39;ve never been, and you can recall how to get there, next time? But, while being a passenger, none of the voyage is retained?&lt;/p&gt;
&lt;p&gt;In my experience, Excel is very much like this. It&amp;#39;s easier to learn and retain if you&amp;#39;re piloting, and what you&amp;#39;re practicing is important to you.&lt;/p&gt;
&lt;p&gt;With that, good hunting!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1702856" width="1" height="1"&gt;</description></item><item><title>Excel on a Mac - My Experience</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/07/05/excel-on-mac-my-experience.aspx</link><pubDate>Sun, 05 Jul 2009 17:43:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1698243</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1698243</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1698243</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/07/05/excel-on-mac-my-experience.aspx#comments</comments><description>&lt;p&gt;Okay, let&amp;#39;s take Excel 2008 off the table, it ships VBA-less; this is a deal-breaker for me.&amp;nbsp;Note, this is&amp;nbsp;simply my thoughts based on my brief experience, i.e., if you enjoy using Excel on your Mac, more power to you. And this&amp;nbsp;is my take on an out-of-the-box&amp;nbsp;interface, itself, not attempting to set up Jet Connections, etc...&lt;/p&gt;
&lt;p&gt;I conducted a poll at MrExcel.com, to see if people with PC vs. Mac Excel experience preferred one to the other. The turn-out was underwhelming, but the majority does appear to favor the PC, and can be found, here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mrexcel.com/forum/showthread.php?t=353557"&gt;http://www.mrexcel.com/forum/showthread.php?t=353557&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I had never worked with Excel on a Mac, until recently. I do pro bono consulting for the Women&amp;#39;s Professional Billiards Association (WPBA), and my contact, on their Board of Directors, uses a Mac. Right, so I was off to North Carolina to provide training and some non-trivial project-work, on a Mac.&lt;/p&gt;
&lt;p&gt;Nice enough looking machine; however, there were a couple of things that were driving me batty while trying to simply work with Excel on a Mac.&lt;/p&gt;
&lt;p&gt;No right-click. I knew before I even jumped on this thing that it&amp;#39;s not available, but that didn&amp;#39;t stop me, it&amp;#39;s engrained in my brain. Perhaps I didn&amp;#39;t realize just how much I right-click? Quick sort? Quickly set some Column Widths? Paste Special? Forget about it, you&amp;#39;re going to the menu. I can&amp;#39;t recall why I was attempting to right-click so much, but I must have done it 10 times in an hour. This being&amp;nbsp;the working definition of insanity - attempting the same thing over and over again while expecting different results.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s probably a simple fix for this, a key combination perhaps, but we didn&amp;#39;t know it: the F-keys don&amp;#39;t work? I like my F-keys too, apparently. I know I tried to use F2 and F9 while auditing some Worksheet Functions, and nothing. The one F-key combination that did work was Alt-F11, more on this in a moment.&lt;/p&gt;
&lt;p&gt;I found myself missing normal keyboard keys. There is no Delete key, there is, but it functions like a Backspace. The Mac&amp;#39;s keyboard is missing other keys, too, like End? Someone help me out here (I only did this for 2 hours). It&amp;#39;s missing a key that I use a lot for scrolling, must be End...&lt;/p&gt;
&lt;p&gt;And for my favorite drain-bamager... Like I said, Alt-F11 works, nice. So I get back into the Project, add a Module, I am ready to rip. When I write a lot of code that interacts with complex Worksheet data I tend to jump back and forth between the front and back end of Excel quite a bit; here&amp;#39;s where the fun really begins.&lt;/p&gt;
&lt;p&gt;So I flip back to the Worksheet, look my data, flip back to the Project. The Project&amp;#39;s still open, but the Module&amp;#39;s gone. Where did that thing go? At this point, I feel like I&amp;#39;m watching Eddie Murphy&amp;#39;s &amp;#39;&lt;span class="goog-spellcheck-word"&gt;Delirious&lt;/span&gt;&amp;#39;, where Eddie&amp;#39;s old man calls the family dog,&amp;nbsp;Cocoa, and that dog is outta there. Where the&amp;nbsp;[bleep] is that dog going?! &amp;quot;The dog is stupid, Eddie!&amp;quot;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m messing around in the Project Explorer, I can&amp;#39;t get this thing to maximize? Fine, I kill the VBE, and step into the procedure from the front-end. Again, more working definition of insanity, I repeat said view flip; it&amp;#39;s gone again. My contact says, &amp;quot;I bet I know where it is.&amp;quot; She cursors over to the left side of the screen, in the VBE,&amp;nbsp;and this magical, vertical task bar appears from out of nowhere. If you cursor down to the very lower-left of the screen, at this point, there&amp;#39;s your Module. I would have never found that thing!&lt;/p&gt;
&lt;p&gt;Performance was fine, other than an issue with Variant Arrays, but the interface almost drove me insane - or, maybe it did. Not quite like a fish being out of water, but it was just different enough where every few minutes or so I found myself wondering &amp;quot;Wait a second, here. What?&amp;quot;&lt;/p&gt;
&lt;p&gt;Granted, I&amp;#39;m very new to that interface, so I was probably guilty of some Mac-Newb gaffers.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1698243" width="1" height="1"&gt;</description></item><item><title>Some Pretty Bizarre Excel Behavior (Mac-based)</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/07/04/some-very-bizarre-excel-behavior-mac-based.aspx</link><pubDate>Sun, 05 Jul 2009 00:32:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1698072</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1698072</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1698072</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/07/04/some-very-bizarre-excel-behavior-mac-based.aspx#comments</comments><description>&lt;p&gt;Macs are the rage, right? Stable, intuitive, splashy looking? Unless you&amp;#39;re me - I don&amp;#39;t use them - perhaps a subject for another day. But, I do have friends who do, and while I give them an ear-load for doing so, so be it. &lt;/p&gt;
&lt;p&gt;I recently received a fairly strange email from a friend of mine, using Excel, in an Office 2004 environment:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;I have an excel file open with multiple tabs, but all of the tab titles are blank with the exception of the one on the screen.&amp;nbsp; It happened after I copied one of them, and now all excel files I open with multiple tabs have the same issue.&amp;quot;&lt;/p&gt;
&lt;p&gt;Ce qui? Having never seen anything quite like this, I figured, either someone had a long night out on the town, or something freakish happened. My advice? Reboot your machine and try that again.&lt;/p&gt;
&lt;p&gt;No good - to my surprise, not only did the issue persist, I actually got a screen-shot of it, here:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;img src="http://i34.photobucket.com/albums/d142/NathanOliver/foo/Excel_Mac_Issue.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve blurred out the cells&amp;#39; text to protect the innocent, but I didn&amp;#39;t play games with Worksheets 2-4 tab names. Notice how they have no names, what-so-ever? Another issue with this Workbook is that the cell-formatting isn&amp;#39;t correct in the Worksheets, either.&lt;/p&gt;
&lt;p&gt;This is strange stuff. I&amp;#39;ve heard the song about having dessert on a horse with no name, but snacking while staring at a Worksheet with no name? This is new to me and, apparently, for real.&lt;/p&gt;
&lt;p&gt;Not having a Mac close-by, where I could even attempt to replicate this strange phenomenon, I decided to scour the WWW. Oddly enough, while limited, I did get some pings, e.g.,&lt;/p&gt;
&lt;p&gt;&lt;a href="http://forum.soft32.com/mac/thread-sheet-tabs-ftopict82279.html"&gt;http://forum.soft32.com/mac/thread-sheet-tabs-ftopict82279.html&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;I now noticed that if the file is double clicked to start Excel the blank sheet tabs (not really blank, just white text) will appear as with all subsequent files opened.&amp;quot;&lt;/p&gt;
&lt;p&gt;And the big one:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://forum.soft32.com/mac/Text-disappears-worksheet-tabs-ftopict82593.html"&gt;http://forum.soft32.com/mac/Text-disappears-worksheet-tabs-ftopict82593.html&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;I discovered that it was due to a conflich with Acrobat&amp;#39;s PDF Maker plug-in which was in the Excel startup folder. Once I removed it, the problem disappeared.&amp;quot;&lt;/p&gt;
&lt;p&gt;Spelling and terminology aside, it turns out that the Acrobat Distiller Add-in was the issue, in this case. Once she unloaded that, everything works as expected. Two thoughts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;This only appears to be a problem with specific Excel files, although it can daisy-chain to other files in the same Excel instance&lt;/li&gt;
&lt;li&gt;This isn&amp;#39;t to say all Add-ins are bad news, but some might cause problems&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Part of me wonders how this Add-in managed to create this scenario? It&amp;#39;s not normal, to say the least&amp;nbsp;- is it a neat trick? I&amp;#39;ve never seen this on a PC, so I assume most readers will never run into this, and your chances of seeing this are probably slim on a Mac, as well. &lt;/p&gt;
&lt;p&gt;This is on my top-5 of weird, unexpected, things seen in Excel, before.&lt;/p&gt;
&lt;p&gt;Happy 4th of July!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1698072" width="1" height="1"&gt;</description></item><item><title>XL 2007 Pivot Table Book Giveaway (on Facebook)</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/06/27/xl-2007-pivot-table-book-giveaway-on-facebook.aspx</link><pubDate>Sat, 27 Jun 2009 21:01:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1696872</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1696872</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1696872</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/06/27/xl-2007-pivot-table-book-giveaway-on-facebook.aspx#comments</comments><description>&lt;p&gt;If you&amp;#39;re a member of Facebook (who isn&amp;#39;t? - don&amp;#39;t answer that), there&amp;#39;s a free draw for a book on Excel 2007 Pivot Tables.&lt;/p&gt;
&lt;p&gt;And here&amp;#39;s where it gets good: it&amp;#39;s not written by just anyone, but Debra Dalgleish, undisputed heavyweight champion of Pivot Tables. &lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the offering:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.facebook.com/home.php?ref=home#/event.php?eid=109974158504"&gt;http://www.facebook.com/home.php?ref=home#/event.php?eid=109974158504&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As I mentioned in my free, online Excel resources blog entry:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/nateoliver/archive/2009/05/29/online-excel-resources.aspx"&gt;http://msmvps.com/blogs/nateoliver/archive/2009/05/29/online-excel-resources.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One can learn a lot about Pivot Tables by reading Debra&amp;#39;s insights, e.g.,&lt;/p&gt;
&lt;p&gt;&lt;a href="http://contextures.com/xlfaqPivot.html"&gt;http://contextures.com/xlfaqPivot.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While I haven&amp;#39;t had the chance to read this offering, yet, myself, I can only expect it to be much more comprehensive than her [great] website.&lt;/p&gt;
&lt;p&gt;So, if you&amp;#39;re a Facebook member, and are feeling lucky, sign up. This appears to end tomorrow, so don&amp;#39;t hesitate.&lt;/p&gt;
&lt;p&gt;Incidentally, Debra also does a great Jon Peltier impression.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1696872" width="1" height="1"&gt;</description></item><item><title>Introduction to Excel - Top-5 Functions</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/06/26/introduction-to-excel-top-5-functions.aspx</link><pubDate>Sat, 27 Jun 2009 00:03:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1696826</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1696826</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1696826</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/06/26/introduction-to-excel-top-5-functions.aspx#comments</comments><description>&lt;p class="MsoNormal" align="center"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;Top-5 Primer Worksheet Functions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Excel&amp;rsquo;s a robust and dynamic piece of software offering a variety of capabilities. Today we will discuss the most common use of Excel, an analytical tool with given data sets and 5 must-know, general usage Worksheet Functions to begin to work with Excel. These 5 Worksheet Functions include Sum(), Count(), SumIf(), CountIf() and VLookup().&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;Sum() &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="text-decoration:none;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Sum() allows one to add values in a variety of manners. The most common use would be to sum a given, contiguous range, e.g., =Sum(A1:D10), the result being every cell in A1 through D10 being added together.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Sum() also allows for arguments via the use of a comma, which allows for multiple, non-contiguous ranges to be added. Two differing examples would include both single-cell, non-contiguous ranges, e.g., =Sum(A1,D1,F1) and multi-cell, non-contiguous ranges, e.g., =Sum(A1:A5,C1:C5,E1:E5).&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;One thing to note with Sum() is that it does not ignore error values in your data, e.g., if you have 1,000 valid cells of data and a single cell in the calculation range contains an error (e.g., DIV/0 &amp;ndash; division by 0), Sum() will not return the sum of the range, but the error, DIV/0. This behavior is by design, to alert you that there is a potential issue with your data. However, later we will explore a simple work-around (see SumIf()).&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="font-size:14pt;"&gt;Count()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="text-decoration:none;"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Count() allows one to gather a count numeric data in their spreadsheet. As with the previously discussed Sum() function, Count() can work with single ranges, non-contiguous ranges and multi-cell ranges - the latter with comma-separated arguments.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;SumIf()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Sum() works great if you want to add everything in sight, but what if we want to add values based on a specific criteria?&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Enter SumIf(), which will sum a given range of values, if a given criteria is met. In pseudo code, SumIf() reads as =SumIf(Range of Criteria Values, Your Criteria, Range to be Summed). The last argument, separated by commas, is optional &amp;ndash; if omitted, the Range of Criteria Values is summed.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Note that SumIf() supports wildcard characters and mathematical operators, as mentioned &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;here:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://office.microsoft.com/en-us/excel/HP052092921033.aspx?pid=CH062528291033"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;http://office.microsoft.com/en-us/excel/HP052092921033.aspx?pid=CH062528291033&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;As promised, a quick and risk-free work-around to summing ranges that house error values within its cells. It&amp;rsquo;s not recommended that Excel users allow error values to flow through their spreadsheets; however, it is imaginable that an individual has a pressing engagement, say a tee-time, and needs to provide a colleague a sum of data that houses errors, much sooner than later.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;SumIf() allows one to do this by invoking a simple mathematical operator, which forces SumIf() to ignore all non-numeric data, of any sort, including error values. So, the following transaction is risk-free: =SUMIF(A1:A10,&amp;quot;&amp;lt;=9.99999999999999E+307&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;The reason that this transaction is risk-free is that 9.99999999999999E+307 is the largest number allowable in Excel (see the help file on &amp;ldquo;Limitations&amp;rdquo;), so all functional numbers in Excel must either equal or be less than this number, and only numeric cell entries will be considered at this point.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Be careful with 9.99999999999999E+307, there&amp;rsquo;s a reason I&amp;rsquo;m burying it in quotes, Excel can do strange things with numbers, due to its Data Types &amp;ndash; a subject for another day.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;CountIf()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="text-decoration:none;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Like SumIf(), CountIf() provides us with a manner of conditional counting. The slight variance is that it takes two arguments, the range you want to evaluate and the criteria to evaluate that range by, e.g., =CountIf(Range you want to count, Criteria&amp;nbsp;to be met).&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;CountIf() also supports wildcard characters and mathematical operators, as should be noted, here:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://office.microsoft.com/en-us/excel/HP052090291033.aspx?pid=CH062528311033"&gt;&lt;span style="font-family:Times New Roman;color:#0000ff;font-size:small;"&gt;http://office.microsoft.com/en-us/excel/HP052090291033.aspx?pid=CH062528311033&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;VLookup()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="text-decoration:none;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;VLookup() is an extremely useful worksheet function, in Excel, and chances are if you&amp;rsquo;re interviewing for a job that&amp;nbsp;requires somewhat advanced Excel experience, you will be asked about it. While we won&amp;rsquo;t cover the several underlying algorithms, let&amp;rsquo;s have a look at really understanding the implementation.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Most of Excel&amp;rsquo;s worksheet functions are designed with names that are memorable, in an English-sense, and VLookup() is no exception, in layman&amp;rsquo;s terms, it is short for &amp;ldquo;Vertical Lookup&amp;rdquo;. This function performs a search on a column of values, a column being vertical, and if said value is found, offsets a number of specified columns, and returns a corresponding value.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Before using, I recommend reviewing the help file for this function, as well:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://office.microsoft.com/en-us/excel/HP052093351033.aspx?pid=CH062528281033"&gt;&lt;span style="font-family:Times New Roman;color:#0000ff;font-size:small;"&gt;http://office.microsoft.com/en-us/excel/HP052093351033.aspx?pid=CH062528281033&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;So what does this mean? First of all, pretend you don&amp;rsquo;t know the last argument, for now, let&amp;rsquo;s stick with False. Here in pseudo code is what this means:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Times New Roman;"&gt;=VLOOKUP(Value to Find, Range of Values &amp;ndash; Including the Offset Range, Number of Columns to Offset from first Column, False - for now)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;The left-most column of the 2&lt;sup&gt;nd&lt;/sup&gt; argument refers to the column you&amp;rsquo;re actually searching, and the right-most isn&amp;rsquo;t what this is limited to, but is generally recommended to be - the farthest column you want to offset to, to return your value. So, if you want to return a value from column B, that is dependant on a match from column A, the example could look something like this:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;=VLOOKUP(&amp;quot;August&amp;quot;,A1:B12,2,FALSE)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Where 2 indicates to return a value in the 2&lt;sup&gt;nd&lt;/sup&gt; column of the specified Range of values.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;Returning to the 4&lt;sup&gt;th&lt;/sup&gt; argument of VLookup() and the True argument. This&amp;nbsp;can be more efficient due to the manner in which the underlying algorithm processes. But, as noted in the help file, your first column has to be sorted in ascending order for it to be trustworthy, due to a difference in the way it searches.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Times New Roman;font-size:small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="font-size:14pt;"&gt;&lt;span style="text-decoration:none;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Times New Roman;"&gt;There are quite a few of differing, very useful worksheet functions in Excel, and most of them are well documented. This is a quick-hit list of some that might prove to be more frequently used and useful for general purposes.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1696826" width="1" height="1"&gt;</description></item><item><title>Off-topic: CCleaner</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/06/16/off-topic-ccleaner.aspx</link><pubDate>Tue, 16 Jun 2009 15:11:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1695624</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1695624</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1695624</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/06/16/off-topic-ccleaner.aspx#comments</comments><description>&lt;p&gt;Chances are pretty good that if you&amp;#39;re reading this blog, you use your computer quite a bit. Today I wanted to mention a nice freeware utility to help you manage your resources, CCleaner:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ccleaner.com"&gt;http://www.ccleaner.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What is CCleaner? In their words:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;&amp;quot;CCleaner is a freeware system optimization, privacy and cleaning tool. It removes unused files from your system - allowing Windows to run faster and freeing up valuable hard disk space. It also cleans traces of your online activities such as your Internet history. Additionally it contains a fully featured registry cleaner. But the best part is that it&amp;#39;s fast (normally taking less than a second to run) and contains NO Spyware or Adware! :)&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;That&amp;#39;s a mouthful! Basically, it&amp;#39;s free software that removes junk that accumulates in your file space and registry. If you run CCleaner, you might be surprised how much of aforementioned junk accumulates. I ran CCleaner last Sunday and it removed 700 MBs of temporary junk.&lt;/p&gt;
&lt;p&gt;The registry cleaner is great, too. It&amp;#39;s not recommended that you play games with your registry without a utility like this, unless you have a very good&amp;nbsp;handle on what you&amp;#39;re doing - a false step in the registry could mean an OS reinstall. And some of the junk that accumulates in your registry is non-trivial. E.g., while upgrading Ad-Aware, the upgrade process left&amp;nbsp;an old Ad=Aware registry entry&amp;nbsp;in place, not only being unnecessary, but actually causing Ad-Aware to simply not work. Clean up the registry, and you&amp;#39;re in like Flynn.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s two other nice utilities, as well, an Application uninstaller, and a memory manager which allows you to control what on your system is loaded at start up. The latter&amp;#39;s nice, e.g., I want Windows Live on my PC, as an example, but I don&amp;#39;t want it to&amp;nbsp;launch on every start up. A lot of programs you want and install have a nasty habbit of doing this for you - problem solved.&lt;/p&gt;
&lt;p&gt;The GUI is intuitive and the program itself is small and has a light footprint in memory. Others seem to agree that this is nice software:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ccleaner.com/reviews"&gt;http://www.ccleaner.com/reviews&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, if interested, you can download, here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ccleaner.com/download"&gt;http://www.ccleaner.com/download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Personally, I can&amp;#39;t recall life before using CCleaner.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1695624" width="1" height="1"&gt;</description></item><item><title>The CAGR - Installment 2</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/06/08/the-cagr-installment-2.aspx</link><pubDate>Tue, 09 Jun 2009 00:24:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1694611</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1694611</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1694611</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/06/08/the-cagr-installment-2.aspx#comments</comments><description>&lt;p&gt;Now, it&amp;#39;s go-time. We had some fun considering the differences between various growth models, we know how to handle the compounding one, and why it&amp;#39;s of interest, i.e.,&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/nateoliver/archive/2009/06/06/the-cagr-installment-1.aspx"&gt;http://msmvps.com/blogs/nateoliver/archive/2009/06/06/the-cagr-installment-1.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, let&amp;#39;s handle it!&lt;/p&gt;
&lt;p&gt;I wish I was smart enough to have conceptualized this, but it comes from a question, from the University of Florida - I&amp;#39;m a Big 10 guy. And you can tell I&amp;#39;m not enthused, at first:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://www.mrexcel.com/forum/showpost.php?p=1583022"&gt;http://www.mrexcel.com/forum/showpost.php?p=1583022&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;&amp;quot;You&amp;#39;re talking compounding growth from 1985-1990? And you want to do that scenario for each state for every possible combination of years?&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;That would require a ton of iterations on each state. It&amp;#39;s doable, and my CAGR example is how you do it, but I didn&amp;#39;t set it up to easily do that. You&amp;#39;d need a pretty big table for each state (unless you did this with VBA) to accomplish this. I suppose I could do a UDF...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;She wants every single possibility where the CAGR, in any given year, exceeds her threshold. She&amp;#39;s not looking at preferred dividends, she&amp;#39;s looking at real, real estate price indexes. Real as in not nominal - inflation adjusted.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a cool problem, from an analytical standpoint - it won&amp;#39;t brew your morning coffee, but it will flag periods that might be worth reviewing and attempting to figure out why they grew at such strong rates.&lt;/p&gt;
&lt;p&gt;In order to solve this problem I took a night off. Sounds odd, right? I often don&amp;#39;t write my best code while looking at my computer. Here&amp;#39;s what I came up with:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Public Function CAGRThresh( _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ByRef rngYears As Range, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ByRef rngPrincipal As Range, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ByVal curThresh As Currency) As String&lt;br /&gt;Dim varYears() As Variant, varPrincipal() As Variant&lt;br /&gt;Dim strRet() As String&lt;br /&gt;Dim i As Long, j As Long, lngCount As Long&lt;br /&gt;Dim lngUpper As Long&lt;br /&gt;Dim curCAGR As Currency&lt;br /&gt;Let varYears = rngYears.Value&lt;br /&gt;Let varPrincipal = rngPrincipal.Value&lt;br /&gt;Let lngUpper = UBound(varPrincipal, 2)&lt;br /&gt;ReDim strRet(1 To (lngUpper ^ 2 * 0.5 + lngUpper * -0.5))&lt;br /&gt;For i = LBound(varPrincipal, 2) To lngUpper - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For j = i + 1 To lngUpper&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Let curCAGR = ((varPrincipal(1, j) / _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; varPrincipal(1, i)) ^ (1 / (j - i))) - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If curCAGR &amp;gt;= curThresh Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Let strRet(lngCount + 1) = varYears(1, i) &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;-&amp;quot; &amp;amp; varYears(1, j) &amp;amp; &amp;quot;: &amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Format$(curCAGR, &amp;quot;0.00%&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Let lngCount = lngCount + 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next j&lt;br /&gt;Next i&lt;br /&gt;If lngCount &amp;gt; 0 Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReDim Preserve strRet(1 To lngCount)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Let CAGRThresh = Join$(strRet, &amp;quot;, &amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else: Let CAGRThresh = &amp;quot;N/A&amp;quot;&lt;br /&gt;End If&lt;br /&gt;End Function&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;There&amp;#39;s a few things to note in all of this. As we&amp;#39;ve been discussing, this is a buffered Array:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;ReDim strRet(1 To (lngUpper ^ 2 * 0.5 + lngUpper * -0.5))&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;How did I come to this conclusion? I used multiple-regression - we&amp;#39;ll talk about this, soon.&lt;/p&gt;
&lt;p&gt;Your data needs to be cross-tabbed, or pivoted, whichever terminology you prefer. Your data can be anything given a compounding growth model, as long as you have items to the left and time periods across the top.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll upload an example, but note, it has two VBA UDFs, two Subroutines and an ActiveX control embedded in it. If you or your organization aren&amp;#39;t comfortable with this, I advise you to ignore said attachment - I provide it with no assurances, of any sort.&lt;/p&gt;
&lt;p&gt;The first Worksheet in question speaks to the CAGR example. The second speaks to arithmetic growth, and why it doesn&amp;#39;t work.&lt;/p&gt;
&lt;p&gt;The third worksheet speaks to why I picked such a wild return format, a String? You can quickly parse all of this with Text-to-Columns, given a careful construct.&lt;/p&gt;
&lt;p&gt;And, of course, that approach is limited in context, too. E.g., you could also stack an Array or disconnected Recordset.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1694611" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.01.69.46.11/OFEHO_5F00_State_5F00_Index.xls" length="562176" type="application/octet-stream" /></item><item><title>The CAGR - Installment 1</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/06/06/the-cagr-installment-1.aspx</link><pubDate>Sat, 06 Jun 2009 19:19:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1694380</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>17</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1694380</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1694380</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/06/06/the-cagr-installment-1.aspx#comments</comments><description>&lt;p&gt;I love saying &amp;quot;the CAGR!&amp;quot; It reminds me of the movie &amp;#39;Highlander&amp;#39;, and the Kurgan. There can be only one! I use a full-on Scottish accent when I say it, too.&lt;/p&gt;
&lt;p&gt;So, what is the CAGR? It&amp;#39;s a financial acronym, which is Compounding Annual Growth Rate. And it&amp;#39;s widely used, as the Motley Fool mentions here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.fool.com/workshop/2000/workshop000302.htm"&gt;http://www.fool.com/workshop/2000/workshop000302.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The term&amp;#39;s a little misleading, as it implies the periods have to be annual, and they don&amp;#39;t. The CAGR is to Financial Analysts what would be otherwise known as Geometric or Exponential Growth:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Exponential_growth"&gt;http://en.wikipedia.org/wiki/Exponential_growth&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This phenomenon occurs in many different walks of life, investment values hopefully grow at an exponential rate (the S&amp;amp;P 500 tends to), biological cell growth could show this, rabbit population tends to follow this pattern, etc... The other day, while discussing String Concatenation and performance degradation, we were looking at geometric decay.&lt;/p&gt;
&lt;p&gt;Why is the CAGR important? It shows trends. So, for an example, assuming resources are scarce, and you as a business planner&amp;nbsp;have various choices as to where to invest, how do you choose? The goal is to maximize, and your best bet could be the highest area of compounding growth - noting history is not necessarily an indicator of the future.&lt;/p&gt;
&lt;p&gt;Right, so how do we calculate the CAGR in Excel? There is no native way in Excel, that I know of, to calculate a CAGR in general, but a little arithmetic gets us there. E.g.,&lt;/p&gt;
&lt;p&gt;=((B9/B2)^(1/7))-1&lt;/p&gt;
&lt;p&gt;Or, in pseudo-speak:&lt;/p&gt;
&lt;p&gt;=((Last Value/First Value)^(1/Number of periods less 1))-1&lt;/p&gt;
&lt;p&gt;Make sure your time-periods are equally spaced with this logic.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m also&amp;nbsp;uploading an example Excel File&amp;nbsp;(w/ no VBA) - a fairly contrived one. With that, my next entry will explore a more extreme CAGR implementation. If you&amp;#39;re an analyst, looking at compounding growth patterns, you might enjoy this.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1694380" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.01.69.43.80/CAGR-Example.xls" length="16896" type="application/vnd.ms-excel" /></item><item><title>Cropping an .MP3 file - with Excel</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/06/03/cropping-an-mp3-file-with-excel.aspx</link><pubDate>Thu, 04 Jun 2009 02:21:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693767</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1693767</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1693767</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/06/03/cropping-an-mp3-file-with-excel.aspx#comments</comments><description>&lt;p&gt;This isn&amp;#39;t perfect, and it isn&amp;#39;t high-end A/V - but it&amp;#39;s a potential approach to snagging a segment of a song. Perhaps a party trick, literally.&lt;/p&gt;
&lt;p&gt;So, in the following we use Binary File Access and try to figure out where we are in terms of Bytes and Seconds within an existing song file and create a new file with the cropped song of our specifications:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Sub CropMp3s()&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Dim b() As Byte, i As Long&lt;br /&gt;Dim FileNum As Long&lt;br /&gt;Dim lngFileLength As Long&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;#39;File length variables&lt;br /&gt;Dim lngFileSeconds As Long&lt;br /&gt;Dim lngStart As Long&lt;br /&gt;Dim lngFinish As Long&lt;br /&gt;Dim lngTimeDiff As Long&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;#39;\\\\File Input\Output&lt;br /&gt;Const strFile As String = &amp;quot;c:\SongIn.mp3&amp;quot;&lt;br /&gt;Const strOutput As String = &amp;quot;c:\SongIn_cropped.mp3&amp;quot;&lt;br /&gt;&amp;#39;\\\\\&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;#39;\\\\Song Constants&lt;br /&gt;Const lngStartSeconds As Long = 20 &amp;#39;Starting seconds into song&lt;br /&gt;Const lngStartMinutes As Long = 4 &amp;#39;Starting minutes into song&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Const lngEndSeconds As Long = 21 &amp;#39;Ending seconds into song&lt;br /&gt;Const lngEndMinutes As Long = 5 &amp;#39;Ending minutes into song&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Const lngSongSeconds As Long = 9 &amp;#39;Song&amp;#39;s entire ending ending length in seconds&lt;br /&gt;Const lngSongMinutes As Long = 7 &amp;#39;Song&amp;#39;s entire ending ending length in minutes&lt;br /&gt;&amp;#39;\\\\&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Let lngFileLength = FileLen(strFile)&lt;br /&gt;Let lngFileSeconds = (TimeSerial(0, lngSongMinutes, lngSongSeconds) * 86400)&lt;br /&gt;Let lngStart = (TimeSerial(0, lngStartMinutes, lngStartSeconds) * 86400) * _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lngFileLength / lngFileSeconds&lt;br /&gt;Let lngFinish = (TimeSerial(0, lngEndMinutes, lngEndSeconds) * 86400) * _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lngFileLength / lngFileSeconds&lt;br /&gt;Let lngTimeDiff = lngFinish - lngStart&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;ReDim b(1 To lngTimeDiff)&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Let FileNum = FreeFile&lt;br /&gt;Open strFile For Binary As #FileNum&lt;br /&gt;For i = LBound(b) To UBound(b)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Get FileNum, i + lngStart, b(i)&lt;br /&gt;Next&lt;br /&gt;Close FileNum&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Let FileNum = FreeFile&lt;br /&gt;Open strOutput For Binary As #FileNum&lt;br /&gt;Put FileNum, , UBound(b)&lt;br /&gt;Put FileNum, , b&lt;br /&gt;Close FileNum&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;End Sub&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve set up a few constants that need to be changed, first the file names. Then,&amp;nbsp;the starting point you want, separately for both seconds and minutes, the ending point you want, again, separately for both seconds and minutes, and the the total length of the song, in seconds and minutes. I did not include hours into this, figuring that might be extreme...&lt;/p&gt;
&lt;p&gt;A few questions you might have. One, why would anyone do this?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;For the sake of doing it&lt;/li&gt;
&lt;li&gt;While there&amp;#39;s plenty of Freeware .exe&amp;#39;s out there to do this, I&amp;#39;m not crazy about downloading random .exe files - hard to say what&amp;#39;s in them&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Two, why doesn&amp;#39;t it work consistently?&lt;/p&gt;
&lt;p&gt;I haven&amp;#39;t accounted for a few potential Bytes on the front or tail-end of the file structure, which appear in the form of ID Tags, I&amp;#39;m not intimate with the .MP3 file structure. Otherwise, the ratios should work, in terms of kbps, and consequent file-size. It gets you pretty close, it&amp;#39;s a matter of tinkering...&lt;/p&gt;
&lt;p&gt;As I said, not really close to perfect, but a potential approach/start. If you&amp;#39;re interesting in Binary File Access, or File I/O in general, see the following:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa716281.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa716281.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sequential and Random File Access are worth reading up on, too.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693767" width="1" height="1"&gt;</description></item><item><title>Be Mindful of your Data Types - and TypeName()</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/06/02/be-mindful-of-your-data-types-and-typename.aspx</link><pubDate>Tue, 02 Jun 2009 21:37:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693666</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1693666</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1693666</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/06/02/be-mindful-of-your-data-types-and-typename.aspx#comments</comments><description>&lt;p&gt;As I was writing today&amp;#39;s blog entry, I realized I needed to bake in a little arithmetic. I could have done this in the front-end of Excel, but this is a VBA sample, and we&amp;#39;re in RAD-mode. So, I, without much thought, tried the following:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;Sub foo1()&lt;br /&gt;Debug.Print (24 * 3600)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Whoops - overflow error. Serves me right, eh? I should be doing this sort of thing in my head.&lt;/p&gt;
&lt;p&gt;VBA is treating these numbers as Integer Data Types and the result, which wants to also be an Integer, is out of the allowable range of this Data Type (in VBA/VB6). The range of numbers being documented in the Help File.&lt;/p&gt;
&lt;p&gt;How do we deal with this? There are two workarounds, both of which have come up recently. The first is to use a Type-Declaration Character as explained, here, to make sure we&amp;#39;re working with Long Values:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/s9cz43ek.aspx"&gt;http://msdn.microsoft.com/en-us/library/s9cz43ek.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And this works well, e.g.,&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;Sub foo2()&lt;br /&gt;Debug.Print (24&amp;amp; * 3600&amp;amp;)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Actually, you can make sure the first value in question, only, is a Long, and you&amp;#39;re fine from there, e.g.,&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;Sub foo3()&lt;br /&gt;Debug.Print (24&amp;amp; * 3600)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;The second approach is to use VBA&amp;#39;s explicit Type Conversion functions, that are mentioned at the end of the following article:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa716185.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa716185.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And an example would be as such:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;Sub foo4()&lt;br /&gt;Debug.Print (CLng(24) * 3600)&lt;br /&gt;Debug.Print TypeName((CLng(24) * 3600))&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;As you can see, I&amp;#39;ve introduced something different here - a call to TypeName(). TypeName(), is described here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa263394.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa263394.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TypeName() can be&amp;nbsp;a very useful function when in doubt as to what Data Type, and limitations, you&amp;#39;re working with. You can end up with a lot of funky Types in VBA, whether it&amp;#39;s due to you performing implicit Type conversion or under-the-hood workings that you didn&amp;#39;t intend - something to keep in mind. I know I&amp;#39;ve made some surprising calls to TypeName(), in the past...&lt;/p&gt;
&lt;p&gt;And, as a last example, we can see that the Type-Declaration character does indeed change our perspective on the matters at hand:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;Sub foo5()&lt;br /&gt;Debug.Print TypeName(24)&lt;br /&gt;Debug.Print TypeName(24&amp;amp;)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;This behavior&amp;#39;s a little quirky, seeing as it&amp;#39;s my understanding that 32-bit VBA wants a Long-integer vs. an Integer-integer, either way. But it&amp;#39;s what we have, so we&amp;#39;ll work with it. And, today&amp;#39;s entry will be deferred until tomorrow - until then.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693666" width="1" height="1"&gt;</description></item><item><title>Excel 2007 VBA - Watch your order of operations</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/05/31/excel-2007-vba-watch-your-order-of-operations.aspx</link><pubDate>Mon, 01 Jun 2009 00:39:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693500</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1693500</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1693500</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/05/31/excel-2007-vba-watch-your-order-of-operations.aspx#comments</comments><description>&lt;p&gt;This seems like pretty straight-forward advice, right? E.g., make sure the light is green before you enter the intersection. Generally, follow the standard arithmetic order of operations, unless you&amp;#39;re using Excel, which has its own order of&amp;nbsp;operations (documented in the help file). Structure your words in a manner that follow typical English rules, should you be speaking English, etc...&lt;/p&gt;
&lt;p&gt;Unless you&amp;#39;re Yoda, somehow he can violate all of this, and it seems to work... But, the force is really strong in that one...&lt;/p&gt;
&lt;p&gt;Back to topic, there can be issues with Excel 2007 VBA, if you violate its expected order of operations, in terms of unexpected behavior.&lt;/p&gt;
&lt;p&gt;Take the following example, which I pretty much recorded, in Excel 2002 (XP). The goal is to create a red, transparent (i.e., the cells contents are showing) oval around D2:F2:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;Sub foo()&lt;br /&gt;Dim shp As Shape&lt;br /&gt;Application.ScreenUpdating = False&lt;br /&gt;With Worksheets(1).Range(&amp;quot;D2&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set shp = .Parent.Shapes.AddShape(msoShapeOval, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Left, .Top - .RowHeight / 4, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Width * 3, .RowHeight * 1.5)&lt;br /&gt;End With &lt;br /&gt;With shp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; With .Fill&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Visible = msoFalse&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Transparency = 0#&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End With&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; With .Line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Weight = 1.25&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ForeColor.SchemeColor = 10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .BackColor.RGB = RGB(255, 255, 255)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End With&lt;br /&gt;End With&lt;br /&gt;Application.ScreenUpdating = True&lt;br /&gt;Set shp = Nothing&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;This works as expected in Excel 2002, it&amp;#39;s basically the syntax the Excel 2002 Macro recorder gives you, in that order. I admit, I tweaked the recorded Macro a little, but the order&amp;nbsp;in which the Property toggles&amp;nbsp;occur in is&amp;nbsp;essentially what the recorder gives you, or me...&lt;/p&gt;
&lt;p&gt;Try&amp;nbsp;that in Excel 2007. You find yourself with a red-outlined oval in the expected range, except, it&amp;#39;s not transparent; it&amp;#39;s filled and you can&amp;#39;t see the underlying cell contents - which was a&amp;nbsp;significant part of the point, in this case.&lt;/p&gt;
&lt;p&gt;After staring at this thing for a while and not quite following the problem (to put it mildly), I asked for an assist. I got a good one, J-Walk followed up and mentioned that my Transparency Property toggle wasn&amp;#39;t necessary and turned out to be the problem. He&amp;#39;s right, the following works fine in Excel 2007:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Sub foo()&lt;br /&gt;Dim shp As Shape &lt;br /&gt;Application.ScreenUpdating = False&lt;br /&gt;With Worksheets(1).Range(&amp;quot;D2&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set shp = .Parent.Shapes.AddShape(msoShapeOval, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Left, .Top - .RowHeight / 4, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Width * 3, .RowHeight * 1.5)&lt;br /&gt;End With&lt;br /&gt;With shp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; With .Fill&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Visible = msoFalse&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;.Transparency = 0#&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End With&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; With .Line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Weight = 1.25&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ForeColor.SchemeColor = 10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .BackColor.RGB = RGB(255, 255, 255)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End With&lt;br /&gt;End With &lt;br /&gt;Application.ScreenUpdating = True&lt;br /&gt;Set shp = Nothing&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Note the commented-out line of code - the Transparency Property. However, this is kind of strange, no? That should be a non-op. After playing with it, it appears to be an order of operations issue.&lt;/p&gt;
&lt;p&gt;Why wouldn&amp;#39;t Fill be able to&amp;nbsp;keep in mind&amp;nbsp;that it has several Properties, like Transparency and Visible, and remember them, irrespective of which order they were set to? The answer to that question? It should - but it doesn&amp;#39;t. While the Transparency Property isn&amp;#39;t really necessary, here, it can have the non-effect we want it to, if we change the order of operations, i.e., change:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;With .Fill&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Visible = msoFalse&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Transparency = 0#&lt;br /&gt;End With&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;To:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;With .Fill&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Transparency = 0#&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Visible = msoFalse&lt;br /&gt;End With&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;So even though toggling the Transparency Property might not make a lot of sense, here, it turns out to only be an issue if used later vs. sooner - it appears to cancel out the the Visible Property when toggled after.&amp;nbsp; With that in mind, the following works as expected in Excel 2007:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;Sub foo()&lt;br /&gt;Dim shp As Shape &lt;br /&gt;Application.ScreenUpdating = False&lt;br /&gt;With Worksheets(1).Range(&amp;quot;D2&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set shp = .Parent.Shapes.AddShape(msoShapeOval, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Left, .Top - .RowHeight / 4, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Width * 3, .RowHeight * 1.5)&lt;br /&gt;End With&lt;br /&gt;With shp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; With .Fill&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Transparency = 0#&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Visible = msoFalse&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End With&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; With .Line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Weight = 1.25&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ForeColor.SchemeColor = 10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .BackColor.RGB = RGB(255, 255, 255)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End With&lt;br /&gt;End With&lt;br /&gt;Application.ScreenUpdating = True&lt;br /&gt;Set shp = Nothing&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Which does include the Transparency Property toggle. In my opinion, this is a bug, the order of these particular operations probably shouldn&amp;#39;t matter, never have, but they do.&lt;/p&gt;
&lt;p&gt;Either way, that&amp;#39;s not really the point of the examples. The point is when you review code that doesn&amp;#39;t work as expected between one version of Excel to the next, there&amp;#39;s two things to consider:&lt;/p&gt;
&lt;p&gt;1) Test, test, test&lt;br /&gt;2) Consider the order of operations you&amp;#39;re proceeding with&lt;/p&gt;
&lt;p&gt;Well, there&amp;#39;s quite a few more things to consider than this, but these are two, amongst many.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693500" width="1" height="1"&gt;</description></item><item><title>Excel Q&amp;A and my Inbox</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/05/30/excel-q-amp-a-and-my-inbox.aspx</link><pubDate>Sat, 30 May 2009 18:25:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693453</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1693453</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1693453</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/05/30/excel-q-amp-a-and-my-inbox.aspx#comments</comments><description>&lt;p&gt;This might surprise some, but to be honest, I really don&amp;#39;t mind people contacting me via email, via this blog. The volume of email I&amp;#39;m likely to receive from this blog pales in comparison to the outrageous amount of inbox activity that Facebook generates... And if you want to say hello, well, I like friendly people.&lt;/p&gt;
&lt;p&gt;However, it&amp;#39;s not recommended that you send me random Excel questions in an offline format such as this for a few reasons:&lt;/p&gt;
&lt;p&gt;1) That&amp;#39;s not really the intent of this blog, nor my existence.&lt;br /&gt;2) I&amp;#39;m not always very good about responding to these, for a variety of reasons, e.g., I sleep, sometimes. Maybe I don&amp;#39;t know the answer? Well, that&amp;#39;s not likely. ;)&lt;/p&gt;
&lt;p&gt;What is recommended is that you find an Excel Q&amp;amp;A forum, preferably, for your sake, a free one, and post your question there. I personally recommend the following Excel Q&amp;amp;A forum:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mrexcel.com/forum/index.php"&gt;http://www.mrexcel.com/forum/index.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This particular Q&amp;amp;A forum is free and anonymous, should you choose a random handle. It is specifically designed to serve the very purpose of why you would be contacting me, in this case. It is the point of its existence.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s a few benefits to approaching your quandary in this manner. These forums function 24/7, there are always experts online and you&amp;#39;re likely to get a much, much (with emphasis on much) faster response than hitting my inbox. Who knows what I&amp;#39;m preoccupied with, going Byte Array to Byte Array?&lt;/p&gt;
&lt;p&gt;This isn&amp;#39;t to say there aren&amp;#39;t other high-quality, free Excel Q&amp;amp;A forums, there are. This is just a recommendation.&lt;/p&gt;
&lt;p&gt;However, do feel free to say hello, if so inclined.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693453" width="1" height="1"&gt;</description></item><item><title>Online Excel Resources</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/05/29/online-excel-resources.aspx</link><pubDate>Fri, 29 May 2009 20:26:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693417</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1693417</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1693417</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/05/29/online-excel-resources.aspx#comments</comments><description>&lt;p&gt;There was a recent blog entry that listed the top-10 online Excel resources:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.odesk.com/blog/2009/05/excel/"&gt;http://www.odesk.com/blog/2009/05/excel/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t necessarily agree with, nor endorse, this list or the order, etc... But I would like to take a moment to speak to several items that are&amp;nbsp;on the list, and some that aren&amp;#39;t on the list.&lt;/p&gt;
&lt;p&gt;When you make a list like this, given the vast amount of high-quality Excel resources on the Internet, you&amp;#39;re going to get it a little right, and probably a little wrong, as you can see by this thread:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mrexcel.com/forum/showthread.php?t=388373"&gt;http://www.mrexcel.com/forum/showthread.php?t=388373&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Such a list doesn&amp;#39;t go without controversy. In this particular blog entry, I&amp;#39;ll attempt to avoid dogging anything on said list, and look to augment its contents - it&amp;#39;s Friday - I&amp;#39;m in a good mood.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s start with MrExcel.com, which is owned and maintained by fellow Microsoft Excel MVP, Bill Jelen. I need to disclaim this a little bit, I&amp;#39;ve been active there since 2000ish, and am an Administrator for their forums - I&amp;#39;m what sports fans would call a &amp;quot;homer&amp;quot;. However, there are some interesting aspects to this site that I would like to highlight.&lt;/p&gt;
&lt;p&gt;The first are the 500+, free, Excel articles:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mrexcel.com/articles.shtml"&gt;http://www.mrexcel.com/articles.shtml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re into podcasts, Bill creates these, too:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mrexcel.com/podcast.shtml"&gt;http://www.mrexcel.com/podcast.shtml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The third are the web-based forums:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mrexcel.com/forum/index.php"&gt;http://www.mrexcel.com/forum/index.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;These are great forums, some of the best Excel-minds&amp;nbsp;on&amp;nbsp;Earth&amp;nbsp;stop by to take part in Q&amp;amp;A, for free. One particular sub-forum, within the forums, I&amp;#39;d like to highlight is the &amp;quot;Hall of Fame&amp;quot; forum:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mrexcel.com/forum/forumdisplay.php?f=17"&gt;http://www.mrexcel.com/forum/forumdisplay.php?f=17&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see, it&amp;#39;s fairly lean: There&amp;#39;s only 12 subjects&amp;nbsp;taken from &amp;nbsp;~2,000,000 forum posts. We take this area of the forums fairly seriously, only really dynamite posts need apply for this sub-forum.&lt;/p&gt;
&lt;p&gt;Experts-Exchange is a great site, I participate there from time-to-time, and there are a lot experts there, as implied. This is a little misleading, however:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;Suck it up and register for the site, answer a few questions for people that are more of a novice than you, and save yourself the monthly fee.&amp;quot;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s not just a matter of providing the answer, the Original Poster of said question needs to consider your answer the best, and there could be many. And, of course, that&amp;#39;s out of your hands.&lt;/p&gt;
&lt;p&gt;Office Online and MSDN can be great resources - if you want to learn how to use Excel from a novice to expert level, these are sites you should be reading. I find the following quote to be interesting:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;Yes, that&amp;rsquo;s right&amp;hellip;Microsoft actually provides some things for free.&amp;quot;&lt;/p&gt;
&lt;p&gt;Microsoft provides a ton of content, for free, and they actually continually look to improve both their content and delivery mechanisms - it&amp;#39;s a serious operation. How do I know this? I volunteered to assist with the Excel Content Partnership Council, which is, for the most part (myself not included), an internal group at Microsoft that&amp;#39;s committed to driving great Excel content.&lt;/p&gt;
&lt;p&gt;As a Microsoft [Excel] MVP, I have a non-disclosure agreement with Microsoft and can&amp;#39;t disclose the details of my involvement - in a nutshell, they put me under flood-lights and beat me up on their content. Just kidding, but Microsoft really does care about their content and is committed to helping their customers with their products. I was told my involvement was helpful, so if you notice their content improving with time - you&amp;#39;re welcome. ;)&lt;/p&gt;
&lt;p&gt;Jon Peltier&amp;#39;s site is mind-boggling excellent when it comes to Excel Charts. I recall spending a few hours creating a fairly complex chart, and when done, I thought &amp;quot;I bet Jon Peltier would be impressed&amp;quot;. Then I went to his site and noted he had already fully documented what I had done. I had bet incorrectly - whoops.&lt;/p&gt;
&lt;p&gt;Also, the following quote is technically incorrect:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;Currently, there are only 90 people ever granted the title of Excel MVP by Microsoft, so you can see how important of a designation it is.&amp;quot;&lt;/p&gt;
&lt;p&gt;Currently there are just over 100 Microsoft Excel MVPs, spread throughout the world. The word &amp;#39;ever&amp;#39; isn&amp;#39;t quite right, either, some of us are newer, and there have been several retired Excel MVPs. Still, a small number - I&amp;#39;m currently the only Microsoft Excel MVP residing in the state of Minnesota.&lt;/p&gt;
&lt;p&gt;The Excel Product Team blog is a great resource, and something to keep your eye on if you&amp;#39;re really interested in Excel. For a fairly obvious reason, you&amp;#39;re reading content directly from the people who make Excel, well, Excel.&lt;/p&gt;
&lt;p&gt;Good. Now let&amp;#39;s talk about some resources that aren&amp;#39;t included on the aforementioned&amp;nbsp;list, and some examples of why I like them.&lt;/p&gt;
&lt;p&gt;Chip Pearson&amp;#39;s site:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cpearson.com/Excel/MainPage.aspx"&gt;http://www.cpearson.com/Excel/MainPage.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Chip, a fellow Excel MVP, really knows his stuff, and his content is outstanding. E.g., if someone asks me about running a scheduled/timed procedure, I send them directly to Chip&amp;#39;s site (as a start), to review the OnTime Method:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cpearson.com/excel/OnTime.aspx"&gt;http://www.cpearson.com/excel/OnTime.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s such a well written article on the subject, it doesn&amp;#39;t make sense for me to reinvent that particular wheel.&lt;/p&gt;
&lt;p&gt;Mr. Spreadsheet, John Walkenbach&amp;#39;s (J-Walk), site:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://spreadsheetpage.com/"&gt;http://spreadsheetpage.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;John&amp;#39;s a fellow Excel MVP, and again, the content is outstanding and the variety ranges, quite a bit.&lt;/p&gt;
&lt;p&gt;I find Debra Dalgleish&amp;#39;s (Excel MVP) site to be excellent as well:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://contextures.com/index.html"&gt;http://contextures.com/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Especially when it comes to Pivot Tables:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://contextures.com/xlfaqPivot.html"&gt;http://contextures.com/xlfaqPivot.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The last resource I will speak to are the Newsgroups, via Google. Some of the content that is available there, and highly searchable, is outstanding. E.g., take Laurent Longre&amp;#39;s post on the Evaluate Method:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://groups.google.com/group/microsoft.public.excel.programming/msg/a6b26610d3b8abc3"&gt;http://groups.google.com/group/microsoft.public.excel.programming/msg/a6b26610d3b8abc3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, at this point in life, for me, this is old-hat. But when I first read that, I thought &amp;quot;whoa&amp;quot;. We&amp;#39;ll be revisiting the Evaluate Method, by the way. In any event, there&amp;#39;s a ton of great content in the Newsgroups.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve certainly left off a number of other great resources, e.g., UtterAccess.com, XtremeVBTalk.com, Daily Dose of Excel, etc... It&amp;#39;s a little difficult to speak to every single great, free resource out there. But, there are great Excel resources out there on the WWW, so if you&amp;#39;re interested in learning about Excel, get out there and explore!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693417" width="1" height="1"&gt;</description></item><item><title>Excel Expertise - You be the Judge</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/05/28/excel-expertise-you-be-the-judge.aspx</link><pubDate>Thu, 28 May 2009 23:40:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693354</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1693354</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1693354</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/05/28/excel-expertise-you-be-the-judge.aspx#comments</comments><description>&lt;p&gt;Today we&amp;#39;ll take a different direction: How well does the person you&amp;#39;re talking to actually know Excel?&lt;/p&gt;
&lt;p&gt;To be honest, I&amp;#39;ve never put together my own scale - I simply talk to people and come up with some sort of subjective opinion. But others have, including Aaron Blood, as noted here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.xl-logic.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=1"&gt;http://www.xl-logic.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I really like his list. Should you be in HR and interviewing, or otherwise, the following is absolutely true:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;I do find it somewhat amusing that most intermediate level users are VERY over-confident in their Excel ability.&amp;nbsp; My experience has been that if I ask an intermediate user to rank their Excel skill level on a scale of 1 to 10 the response is typically between 8 and 10 and they often list themselves as an Excel Expert on their resumes.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The reason I know this is true? Allow me to make an example of myself: I actually would have listed myself as an expert in 1998 - and, today,&amp;nbsp;I know about 1/0 what I knew about Excel back then. I hate to explain my own jokes, but that&amp;#39;s infinity. Rise over run sort of thing...&lt;/p&gt;
&lt;p&gt;As always, I don&amp;#39;t fully agree with everything that&amp;#39;s being presented to us, e.g.,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;Expert Functions:&lt;br /&gt;A true expert knows the strengths &amp;amp; weaknesses of every single one and has probably had to build some new ones that were not available.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I might be taking this slightly out of context, in terms of specialized functions... But...&lt;/p&gt;
&lt;p&gt;That&amp;#39;s not exactly true, nor necessary, in my opinion, to be an expert. Excel houses a lot of native functions - it&amp;#39;s really mature software. To know every single one of them, inside and out, would actually be kind of insane. E.g., if you don&amp;#39;t have a degree in Finance, and aren&amp;#39;t working on a Finance-type projects, but still want to work with Excel at a sophisticated level, there really might not be a need for you understand IRR(), or XIRR(), or MIRR().&lt;/p&gt;
&lt;p&gt;And I guarantee, as a Finance Major, studying this stuff by hand, you don&amp;#39;t want to rebuild IRR(); an iterative, hit-or-miss algorithm.&lt;/p&gt;
&lt;p&gt;But, overall the user-scale is pretty good, perhaps really good.&amp;nbsp;In fact, if&amp;nbsp;you are in HR (or serving in that capacity),&amp;nbsp;you&amp;#39;re reading this, and you&amp;#39;re posting for job applicants with Excel experience; please, do not say anything along the lines of the following:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;Excel Expert: Must be an expert with VLOOKUPS&amp;quot;. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;That&amp;#39;s embarrassing for everyone involved. If I were taking part in said interview, I&amp;#39;d enter it embarrassed. And then it might be your turn.&lt;/p&gt;
&lt;p&gt;Would you like said applicant to provide the explanation of the possibilities regarding the sequential or binary search implications&amp;nbsp;associated with the&amp;nbsp;algorithm? If you want an explanation to the column-offset... that&amp;#39;s fair enough.&amp;nbsp;But an important note:&amp;nbsp;it&amp;#39;s not VLOOKUPS.&lt;/p&gt;
&lt;p&gt;In any event, perhaps that helps show where the bar potentially&amp;nbsp;lies.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693354" width="1" height="1"&gt;</description></item><item><title>Text to Columns doesn't suck</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/05/27/text-to-columns-doesn-t-suck.aspx</link><pubDate>Wed, 27 May 2009 21:57:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693270</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1693270</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1693270</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/05/27/text-to-columns-doesn-t-suck.aspx#comments</comments><description>&lt;p&gt;Picking right up where I left off yesterday, let&amp;#39;s talk about some native functionality in Excel, an algorithm, that doesn&amp;#39;t suck when it comes to String parsing - Text to Columns. If you recall from yesterday:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/nateoliver/archive/2009/05/26/recommended-free-reading-bruce-mckinney.aspx"&gt;http://msmvps.com/blogs/nateoliver/archive/2009/05/26/recommended-free-reading-bruce-mckinney.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of Bruce McKinney&amp;#39;s issues with VB&amp;#39;s Split() function is that it can&amp;#39;t handle multiple, consecutive delimiters. Text to Columns can, Bruce would be pleased.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a little unfair to compare Text to Columns to Split(), as Text to Columns works on Range Objects in a column, while Split() works on single Strings. However, it is my Blog and I&amp;#39;ll take such artistic licenses from time-to-time.&lt;/p&gt;
&lt;p&gt;Text to Columns is one of the most underrated, overlooked native Excel functionalities, in my opinion. Even just the other day I was involved in a thread where I recommended looking at it, and it&amp;#39;s almost as if my post didn&amp;#39;t exist?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mrexcel.com/forum/showthread.php?t=389241"&gt;http://www.mrexcel.com/forum/showthread.php?t=389241&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Side-bar rant: This is why points-based forums don&amp;#39;t always work. The OP, awarding the points/correct answer, is not 100% guaranteed to choose what is probably the best approach. I don&amp;#39;t mean to pick on anyone, here, it&amp;#39;s just a recent example of me noting Text to Columns is a good approach to the issue at hand.&lt;/p&gt;
&lt;p&gt;So, here&amp;#39;s a working example. Take the following:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Foo, Bar&lt;/p&gt;
&lt;p&gt;We have two delimiters, a comma and a space. Copy and paste that in A1 through A100000 (or less if you&amp;#39;re using Excel pre-2007). Now select Column A, in Excel 2007 select the Data Tab, or earlier, Data menu, click into Text to Columns. &lt;/p&gt;
&lt;p&gt;You now have a dialog, let&amp;#39;s go with Delimited -&amp;gt; Check Space and Comma as your Delimiters and check &amp;#39;Treat consecutive delimiters as one&amp;#39;. Now click Finish. Wow, that was fast.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s also pretty easy to record a Macro to replicate this - should you want automation, e.g.,&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;Sub foo()&lt;br /&gt;Range(&amp;quot;A:A&amp;quot;).TextToColumns Destination:=Range(&amp;quot;A1&amp;quot;), _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConsecutiveDelimiter:=True, Comma:=True, Space:=True, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldInfo:=Array(Array(1, 1), Array(2, 1))&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Man, that&amp;#39;s fast, let&amp;#39;s revisit that. 100,000 parsed Strings, eh? How fast is that? Let&amp;#39;s time it, we&amp;#39;ll call foo() with the following timer-procedure:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;br /&gt;Public Declare Function QueryPerformanceFrequency _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lib &amp;quot;kernel32.dll&amp;quot; ( _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lpFrequency As Currency) As Long&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Public Declare Function QueryPerformanceCounter _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lib &amp;quot;kernel32.dll&amp;quot; ( _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lpPerformanceCount As Currency) As Long&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Sub bar()&lt;br /&gt;Dim Ctr1 As Currency, Ctr2 As Currency, Freq As Currency&lt;br /&gt;Dim Overhead As Currency&lt;br /&gt;QueryPerformanceFrequency Freq&lt;br /&gt;QueryPerformanceCounter Ctr1&lt;br /&gt;QueryPerformanceCounter Ctr2&lt;br /&gt;Overhead = Ctr2 - Ctr1 &amp;#39; determine API overhead&lt;br /&gt;QueryPerformanceCounter Ctr1 &amp;#39; time loop&lt;br /&gt;Call foo&lt;br /&gt;QueryPerformanceCounter Ctr2&lt;br /&gt;Debug.Print (Ctr2 - Ctr1 - Overhead) / Freq&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;It runs in&amp;nbsp;roughly 1 second (on my machine) to parse 100,000 Strings (in Range Objects), with multiple, consecutive delimiters. I find that to be really impressive. I&amp;#39;m not sure who wrote this particular algorithm, but dollar earned that day.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s a brief introduction to Text to Columns, but if you explore the dialog/GUI, you can see there&amp;#39;s more options available to us than what I&amp;#39;ve spoken to, e.g., Fixed-length parsing, the ability to skip parsed columns of return values, marshaling your data to different locations, various formatting options, etc...&lt;/p&gt;
&lt;p&gt;Text to Columns won&amp;#39;t solve all of life&amp;#39;s problems, but if you want to parse a column of data, it certainly is a good place to start.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693270" width="1" height="1"&gt;</description></item><item><title>Recommended [Free] Reading - Bruce McKinney</title><link>http://msmvps.com/blogs/nateoliver/archive/2009/05/26/recommended-free-reading-bruce-mckinney.aspx</link><pubDate>Tue, 26 May 2009 17:24:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693171</guid><dc:creator>Nate Oliver</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/rsscomments.aspx?PostID=1693171</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nateoliver/commentapi.aspx?PostID=1693171</wfw:comment><comments>http://msmvps.com/blogs/nateoliver/archive/2009/05/26/recommended-free-reading-bruce-mckinney.aspx#comments</comments><description>&lt;p&gt;First off, who is Bruce McKinney? In his own words:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://brucem.mystarband.net/author.htm"&gt;http://brucem.mystarband.net/author.htm&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;Bruce McKinney was a factory assembly worker, a logger, a newspaper reporter, a PR flunkie, and an unpublished fiction writer before he discovered computers and lost all interest in the real world. During his years at Microsoft, he wrote programming manuals and online help for assembler, Basic, and C. Bruce also served for a time as czar of sample programs, writing or revising many of the samples known to longtime Microsoft language customers. He was a software developer on Microsoft C 7 and FORTRAN Power Station 1. He left Microsoft in 1997 and is now trying to decide what to do when he grows up.&amp;quot;&lt;/p&gt;
&lt;p&gt;So, we have a very insightful power user, from Microsoft itself. The main body of work in question is &amp;#39;Hardcore Visual Basic&amp;#39;, which is available online, for free, here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vb.mvps.org/hardcore/"&gt;http://vb.mvps.org/hardcore/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And Bruce provides some updates to this work, here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://brucem.mystarband.net/mckinney1.htm"&gt;http://brucem.mystarband.net/mckinney1.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While it&amp;#39;s true that VB6 and the language as we know it, on that platform, is at the end of its life-cycle, it still lives on in a certain sense, in VBA. So, if you&amp;#39;re interested in VBA outside of Office-specific Object Models, this body of work is still relevant and insightful. &lt;/p&gt;
&lt;p&gt;And, even better, it makes for good reading. IMO, Bruce has a great sense of humor and can string together fairly clever rants and strongly worded opinions in addition to technical insight. This isn&amp;#39;t to say I agree with everything Bruce has to say, e.g., Bruce&amp;#39;s take on the Let Statement:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vb.mvps.org/hardcore/html/let.htm"&gt;http://vb.mvps.org/hardcore/html/let.htm&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;If you think about it, Let a = 1 is technically accurate. It also lets compilers optimize more efficiently. In other words, this pedantic nonsense makes perfect sense. Fortunately, Microsoft didn&amp;rsquo;t buy this argument, and neither should you.&amp;quot;&lt;/p&gt;
&lt;p&gt;He&amp;#39;s correct, Let is optional. However, I lke this pedantic nonsense, and tend to use it where applicable in my VBA. It doesn&amp;#39;t cost me many keystrokes and it flags intrinsic assignment. So, we agree to disagree.&lt;/p&gt;
&lt;p&gt;Bruce also provides us with one of my favorite all-time rants: &amp;quot;Split Sucks&amp;quot;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://brucem.mystarband.net/mckinney2b.htm#18"&gt;http://brucem.mystarband.net/mckinney2b.htm#18&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;quot;Well, of course you can&amp;#39;t do 1 because (unfortunately) users can turn off error trapping. And 2 just doesn&amp;#39;t fully express your contempt for those who disregard your instructions. So 3 is the correct answer because it&amp;#39;s so deliciously unpredictable. &lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;Enough sarcasm. It&amp;#39;s hard to fully express my contempt for the VBScript developer who wrote this crap or for the VB designers who accepted it into their library without checking to see that it meets minimum standards of competence.&amp;quot;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m not sure if I should find that to be as funny as I do, but I do. Laughing matters aside, Bruce does&amp;nbsp;have a good point. Split() is useful, I use it all the time, but as he&amp;#39;s noting, it could, and perhaps should, be more useful and more robust along the lines of consecutive delimeters.&lt;/p&gt;
&lt;p&gt;Which leads me directly into my next topic, on String parsing, natively, in Excel... Until then, thanks Bruce!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693171" width="1" height="1"&gt;</description></item></channel></rss>