Excel-VBA-Collection
70 строк · 1.7 Кб
1Attribute VB_Name = "Base36"
2Option Explicit
3Option Compare Text
4Option Base 1
5DefLng A-Z
6
7Public Function To36(Value As Variant) As String
8Dim n As Long, v As Long
9
10On Error GoTo ErrHandler
11If Value < 10 Then '0..9
12To36 = Chr(48 + Value) '"0"+x
13ElseIf Value < 36 Then 'A..Z
14To36 = Chr(55 + Value) '"A"-10+x
15Else 'If Value < 2147483648# Then
16To36 = vbNullString
17n = CCur(Value)
18Do While n > 0
19v = n Mod 36
20If v < 10 Then v = v + 48 Else v = v + 55
21To36 = Chr(v) & To36
22n = n \ 36
23Loop
24End If
25Exit Function
26
27ErrHandler:
28To36 = "-1" 'Overflow!
29End Function
30
31Public Function Ot36(Value As String) As Long
32Dim i, n, v, b() As Byte
33
34'On Error GoTo ErrHandler
35n = Len(Value)
36If n = 1 Then '1 digit only
37Ot36 = Asc(Value)
38Select Case Ot36
39Case 48 To 57 '0..9
40Ot36 = Ot36 - 48
41Case 65 To 90 'A..Z
42Ot36 = Ot36 - 55
43Case 97 To 122 'a..z
44Ot36 = Ot36 - 87
45Case Else
46GoTo ErrHandler
47End Select
48Else
49StrToBytes b, Value
50Ot36 = 0
51For i = 1 To n
52v = b(i)
53Select Case v
54Case 48 To 57 '0..9
55v = v - 48
56Case 65 To 90 'A..Z
57v = v - 55
58Case 97 To 122 'a..z
59v = v - 87
60Case Else
61GoTo ErrHandler
62End Select
63Ot36 = Ot36 + v * (36 ^ (n - i))
64Next
65End If
66Exit Function
67
68ErrHandler:
69Ot36 = -1 'Overflow!
70End Function
71