Насколько я понимаю, вы хотите создать алгоритм подстановки.Если нет конкретной причины использовать двумерную таблицу шифров, я бы предпочел использовать одномерный подход, подобный следующему:
Function Cipher(Argument As String) As String
Dim Model As String
Dim Subst As String
Dim Idx As Integer
Dim MyPos As Integer
Cipher = ""
' note double quotation mark within string
Model = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890;:'"".,()_-+?!"
Subst = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890;:'"".,()_-+?!"
For Idx = 1 To Len(Argument)
' get position from Model
MyPos = InStr(1, Model, UCase(Mid(Argument, Idx, 1)))
' return character from substitution pattern
If MyPos <> 0 Then Cipher = Cipher & Mid(Subst, MyPos, 1)
Next Idx
End Function
вызов этой функции с помощью
Sub Test()
Debug.Print Cipher("The quick brown (?) fox 123 +-")
End Sub
приводит к THEQUICKBROWN(?)FOX123+-
(потому что мы не допускаем пропуски в Model
или Subst
)
Теперь измените Subst
на
Subst = "!?+-_)(,.""':;0987654321ZYXWVUTSRQPONMLKJIHGFEDCBA"
результат равен 4,_73.+'?6910GBF)9ZWVUCD
если вы введете вышеупомянутое в функцию шифрования, вы снова получите THEQUICKBROWN(?)FOX123+-
, как и следовало ожидать от симметричной замены.