ICAEW.com works better with JavaScript enabled.

Excel Tip of the Week #414 - Select Case and stamp duty revisited

Author: David Lyford-Tilley

Published: 05 Oct 2021

Hello all and welcome back to the Excel Tip of the Week. This week, we have a Developer post in which we’re looking at a VBA coding option for situations where we have multiple paths to go down – Select Case. We’re going to be comparing and contrasting this with the more common If-Then-Else structure, which we covered back in TOTW #141. We’ll use the same example we did back then: stamp duty land tax.

Just as before, however, it’s important to note that we’re just using this as an example of a tiered tax calculation – actual SDLT is more complex than this and you shouldn’t use a formula you found in an Excel blog to make your investment decisions!

Select Case and what it does

Select Case is a VBA command we can use to have Excel choose a next step based on the value of a variable. It’s most commonly used with ranges of numbers but does also accept text.

The general syntax for it is as follows:

Select Case [variable name]
Case [lower bound 1] to [upper bound 1]
[code 1]
Case [lower bound 2] to [upper bound 2]
[code 2]

Case Else
[else code] 
End Select

Note the use of “Case Else” to mop up anything not covered in the previous ranges. This can also be used for error handling if the input value isn’t supposed to fall outside of the given ranges.

You can also provide more complex ranges. Here’s a more concrete example:

Select Case DayNumber
Case 1, 21, 31
DayName = DayNumber & “st”
Case 2, 22
DayName = DayNumber & “nd”
Case 3, 23
DayName = DayNumber & “rd”
Case Else
DayName = DayNumber & “st”
End Select

These could all also be done with layers of If-Then-Else statements, but Select Case is usually easier to read, and also has the advantage of easier and more explicit definitions of range.

Applying Select Case to stamp duty land tax

We are going to make a custom function that computes basic stamp duty land tax when given an input consideration. We’re using the rates from HMRC for basic purchases made after 1 October 2021:

Excel screenshot

We are going to approach this by taking the price of the property as our input, and then calculating for each slice. The mathematical approach for the higher slices is to calculate the total SDLT due on all previous slices, plus the marginal amount from the current slice.

Here’s what that looks like in practice:

Public Function SDLT(Price As Range) As Long

Select Case Price

Case 0 To 125000
SDLT = 0
Case 125001 To 250000
SDLT = (Price - 125000) * 2 / 100
Case 250001 To 925000
SDLT = 2500 + (Price - 250000) * 5 / 100
Case 925001 To 1500000
SDLT = 36250 + (Price - 925000) * 10 / 100
Case Else
SDLT = 93750 + (Price - 1500000) * 12 / 100

End Select

End Function

And here’s what it looks like in practice:

Excel screenshot

You can test out the function for yourself, or take a look at the VBA code behind it, by downloading the accompanying file.

Archive and Knowledge Base

This archive of Excel Community content from the ION platform will allow you to read the content of the articles but the functionality on the pages is limited. The ION search box, tags and navigation buttons on the archived pages will not work. Pages will load more slowly than a live website. You may be able to follow links to other articles but if this does not work, please return to the archive search. You can also search our Knowledge Base for access to all articles, new and archived, organised by topic.

Open AddCPD icon

Add Verified CPD Activity

Introducing AddCPD, a new way to record your CPD activities!

Log in to start using the AddCPD tool. Available only to ICAEW members.

Add this page to your CPD activity

Step 1 of 3
Download recorded
Download not recorded

Please download the related document if you wish to add this activity to your record

What time are you claiming for this activity?
Mandatory fields

Add this page to your CPD activity

Step 2 of 3
Mandatory field

Add activity to my record

Step 3 of 3
Mandatory field

Activity added

An error has occurred
Please try again

If the problem persists please contact our helpline on +44 (0)1908 248 250