Your cart is currently empty!
Extract Numbers from Text in Excel Using VBA – Works for Indian & European Formats
🧾 Scenario:
At Shree Tech Pvt. Ltd., Priya is a finance executive handling a lot of messy Excel data received from multiple vendors and sales teams across India and Europe.
One day, she encounters a peculiar problem.
In the “Remarks” column, instead of clean numbers, she sees entries like:
"₹3,499 paid in full"
"1.250,50 EUR"
"Advance of 7500.00 received"
"Amount is Rs. 2,50,000/-"
She needs to extract only the numeric value from these cells, but Excel’s built-in tools can’t help much.
That’s when her teammate, Rohit, a skilled MIS guy, steps in with a magic wand—a custom VBA function called getNumber
.
🧙♂️ The Magic VBA Function: getNumber
Here’s the full code Rohit shares:
vbaCopyEditPublic Function getNumber(fromThis As Range) As Double
'Extract the number from a cell and return it.
Dim retVal As String
Dim ltr As String, i As Integer, european As Boolean
retVal = ""
getNumber = 0
european = False
On Error GoTo last
'Check if the range contains European format number i.e. , for decimal point
If fromThis.Value Like "*.*,*" Then
european = True
End If
For i = 1 To Len(fromThis)
ltr = Mid(fromThis, i, 1)
If IsNumeric(ltr) Then
retVal = retVal & ltr
ElseIf ltr = "." And (Not european) And Len(retVal) > 0 Then
retVal = retVal & ltr
ElseIf ltr = "," And european And Len(retVal) > 0 Then
retVal = retVal & "."
End If
Next i
getNumber = CDbl(retVal)
last:
End Function
🔍 Line-by-Line Breakdown with Office-style Explanation
✅ What it does:
Extracts numbers embedded in any text, whether the number is in Indian format (e.g., 2,50,000
) or European format (e.g., 1.234,56
).
🎬 Scene-by-Scene Breakdown:
🪪 Characters:
fromThis
: The Excel cell that has the mixed content (like"Total ₹4,500.50 paid"
).retVal
: The string variable used to slowly build the extracted number.european
: A flag to detect if commas are used as decimal separators (common in European format like"1.234,56"
).
💡 Step 1: Initialization
vbaCopyEditretVal = ""
getNumber = 0
european = False
Rohit clears any previous values and sets the assumption that the format is not European by default.
🧠 Step 2: Detecting European Format
vbaCopyEditIf fromThis.Value Like "*.*,*" Then
european = True
End If
This checks if the cell contains both a dot and a comma (e.g., "1.234,56"
). If yes, it assumes the comma is the decimal point (European format).
Priya’s vendor from Germany sent "1.250,50 EUR"
. This line sets european = True
.
🔁 Step 3: Loop Through Each Character
vbaCopyEditFor i = 1 To Len(fromThis)
ltr = Mid(fromThis, i, 1)
The loop reads the text character by character. If the cell has "Amount ₹2,50,000.75"
, it starts reading "A"
, "m"
, "o"
, etc.
🔢 Step 4: Build the Numeric Part
Here’s the logic Rohit uses:
vbaCopyEditIf IsNumeric(ltr) Then
retVal = retVal & ltr
If the character is a digit (0–9
), it adds to the final number string.
Then:
vbaCopyEditElseIf ltr = "." And (Not european) And Len(retVal) > 0 Then
retVal = retVal & ltr
If it’s a .
and it’s not European format, it’s added as the decimal point.
vbaCopyEditElseIf ltr = "," And european And Len(retVal) > 0 Then
retVal = retVal & "."
If it’s European format, then the comma ,
is converted into a dot .
—because VBA/Excel understand .
as the decimal point.
So "1.234,56"
becomes "1234.56"
internally.
💾 Step 5: Convert the Final String to Number
vbaCopyEditgetNumber = CDbl(retVal)
Finally, the retVal
string, say "4500.75"
, is converted into a Double data type using CDbl
.
🛑 Step 6: Error Handling
vbaCopyEditOn Error GoTo last
...
last:
End Function
If there’s any weird data or unexpected character that crashes the function, it fails silently and exits.
📦 Examples: How It Works in Practice
Cell Content | Output | Explanation |
---|---|---|
"Rs. 4,500.75 paid" | 4500.75 | Indian format, plain extraction |
"1.234,56 EUR" | 1234.56 | European format, comma → dot |
"Amount: ₹2,50,000/-" | 250000 | Only digits picked, commas ignored |
"Advance of 7500.00 received" | 7500.00 | Straight number pulled out |
"Zero balance" | 0 | No digits found, returns 0 |
✅ Where to Use This Function
Use =getNumber(A2)
in any cell, where A2 contains your text with numbers.
🎁 Bonus Tip from Rohit:
You can paste this VBA code into your Excel file by pressing:
ALT + F11
→ Open VBA editorInsert > Module
- Paste the code
- Save as Macro-Enabled Workbook (.xlsm)
Download Number Extraction VBA Function File
Top rated products
-
Google Calendar Mastery Training: Learn to Streamline Your Schedule in Just 1 Hour
Original price was: ₹999.00.₹949.00Current price is: ₹949.00. -
Mark & Mia Woven Sleeveless Party Frock – Navy Blue
-
Mastering MS Excel (Pen Drive Course) – Learn Excel Anytime, Anywhere
Original price was: ₹4,999.00.₹1,299.00Current price is: ₹1,299.00. -
Casio MJ-12GST GST Calculator
-
Google Drive Mastery: Learn to Streamline Your Digital Workspace in 27 Minutes
Original price was: ₹999.00.₹949.00Current price is: ₹949.00. -
Shilajit Energy Sips – Natural Energy Boost
-
HP 15 AMD Ryzen 3 7320U Laptop – Affordable Performance with Style
-
Tally Prime Complete Online Course for Efficient Accounting and GST Management
Original price was: ₹1,999.00.₹1,949.00Current price is: ₹1,949.00. -
Atomic Habits: Tiny Changes, Remarkable Results