Nuts and bolts about programming applications, databases and spreadsheets. Note: Comments are moderated to filter comment spam. Mobile version
2016-12-19
Internet Explorer 11 Compatibility View
2016-06-12
Formulas for Library Catalogue Sort Order
If you use library catalogues, you may notice that book or film titles in English are sorted without the leading article, "A", "An" and "The". For example, this list of titles ...
A Kind of Intimacy An Awfully Big Adventure The Girl In The Polka-Dot Dress
... is sorted like this in a library catalogue ...
An Awfully Big Adventure The Girl In The Polka-Dot Dress A Kind of Intimacy
To reproduce this sort order in a spreadsheet, create an additional column containing titles without the leading article then sort this column.
Kind of Intimacy Awfully Big Adventure Girl In The Polka-Dot Dress
If the title is in cell A1, the formula to transform a title in Excel is this nested IF() formula below, which tests for each possible article at the start of a string and returns the title without the article:
=if(left(A1,2)="A ",mid(A1,3,100),if(left(A1,3)="An ",mid(A1,4,100),if(left(A1,4)="The ",mid(A1,5,100),$B33)))
The equivalent formula is much shorter in Google Sheets because it has regular expressions formulas. The one below simply replaces the leading article in a title with an empty string:
=REGEXREPLACE(A1, "^(A|An|The) ", "")
2016-05-31
Formula to Convert mm/dd/yyyy String to Date
Some data I receive has the date in a string in mm/dd/yyyy format, which is easier to sort or filter in Excel when converted to a date number. If the data is in cell A2 then the formulas for splitting the date string into substrings and creating a date value are:
String | Year | Month | Day | Date |
---|---|---|---|---|
5/31/2016 | 2016 | 5 | 31 | 31/05/2016 |
- Year: =RIGHT(A2,4). The year is always the last four digits.
- Month: =LEFT(A2,FIND("/",A2)-1). The month is the one or two digits before a forward slash.
- Day: =MID(A2,FIND("/",A2)+1,FIND("/",A2,4)-FIND("/",A2)-1). The day is the digits between the first and second forward slash.
- Date: =DATE(B2,C2,D2).
Probably the non-obvious bit is finding the second forward slash. The FIND() formula takes three arguments: find_text, within_text, start_num, where start_num is the position to start the search for find_text. Since the month and day numbers are always one or two digits, the second forward slash must be in position 4 ("m/d/yyyy"), 5 ("mm/d/yyyy", "m/dd/yyyy") or 6 ("mm/dd/yyyy"), so starting the search from position 4 will always find the position of the second forward slash.
Later ... I could just use Data, Text To Columns and split the date string into three columns using the forward slash as the delimiter.
2016-04-29
Excel VBA "Code execution has been interrupted"
Very strange bug: After starting an Excel VBA macro, the macro stops and Excel displays a "Code execution has been interrupted" dialog. The only way to get the macro to finish is to keep pressing the "Continue" button. The problem only occurs on my development account not in other accounts. The solution is to wait for the dialog, press the "Debug" button to use VBE then type Ctrl+Break. Apparently, the issue is caused by Excel reactivating breakpoints in the macro from earlier debugging sessions. I guess that is why the macro runs to completion on other accounts. Hat tip to The two WORST Excel Errors EVER.