циклом, instr до первого "%", от предыдущего
от полученной позиции + 2 символа, это и будет 20...
потом
исходная_стрка = исходная_стрка + mid (от предыдущей позиции до только что найденного "%" + asc(val("&H<найденный символ>") )
Private Function Crypt(ByVal text As String, Optional DeCrypt As Boolean = False) As String
Dim s1 As String * 151
Dim s2 As String * 151
If DeCrypt = False Then
s1 = "\ЪhjюLёT.UяCЙжЭIгmyвs4talшОZъ1EЬфkWВЁЮ8,wODKpЛА9хeтgыИТЕМЯСРAаF/ЧG`SсN-цi2fльиBчкxRуШ" & Chr$(34) & "Х[КЖмoVщЦдЩcзdГЗHНбйqФрБоY_|Ыu+%э@$*}^{)(Mz:><Пv~#!?&=n5;0Xпе]3rД"
s2 = "абвгдеёжзиклмнопрстуфхчшщьъыюяАБВГДЕЁЖЗИКЛМНОПРСТУФХЧШЩЬЪЫЮЯABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_/\+%" & Chr$(34) & "@$*}^{)(][:><.,~#!?&;=0123456789"
Else
s2 = "\ЪhjюLёT.UяCЙжЭIгmyвs4talшОZъ1EЬфkWВЁЮ8,wODKpЛА9хeтgыИТЕМЯСРAаF/ЧG`SсN-цi2fльиBчкxRуШ" & Chr$(34) & "Х[КЖмoVщЦдЩcзdГЗHНбйqФрБоY_|Ыu+%э@$*}^{)(Mz:><Пv~#!?&=n5;0Xпе]3rД"
s1 = "абвгдеёжзиклмнопрстуфхчшщьъыюяАБВГДЕЁЖЗИКЛМНОПРСТУФХЧШЩЬЪЫЮЯABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_/\+%" & Chr$(34) & "@$*}^{)(][:><.,~#!?&;=0123456789"
End If
Dim i As Long, pos As Long
Dim result As String
For i = 1 To Len(text)
pos = InStr(1, s2, Mid(text, i, 1), 1)
If pos <> 0 Then result = result & Mid$(s1, pos, 1)
Next i
Crypt = result
End Function