Option Explicit
Sub tester()
Dim s As String
s = "500 in base..." & vbCr & "16 is " & Base2Dec("500", 16) & " in Decimal" & vbCr & _
"8 is " & Base2Dec("500", 8) & " in Decimal" & vbCr & _
"13 is " & Base2Dec("500", 13) & " in Decimal"
MsgBox s
End Sub
Public Function Base2Dec(ByVal BaseVal As String, ByVal base As Long) As Variant
Static Digits
Dim i As Long, sTemp As String, lVal As Long
If base < 2 Or base > 16 Then Base2Dec = "Invalid base used": Exit Function
On Error GoTo err_handler
If IsEmpty(Digits) Then _
Digits = VBA.Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F")
sTemp = UCase(BaseVal)
lVal = 0
For i = Len(BaseVal) To 1 Step -1
lVal = lVal + (WorksheetFunction.Match(Mid$(BaseVal, i, 1), Digits, False) - 1) * (base ^ (Len(BaseVal) - i))
Next i
Base2Dec = lVal: Exit Function
err_handler:
Base2Dec = "Error"
End Function
|