Формула для замены буквенно-цифровых цифр в коде для описания в прозаическом формате - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно найти формулу, которая заменяет описание каждой цифрой кода и отображать ее в виде объединенного текста.

Например:

"134B2" - "Старее,Высокий, Богатый, Плохой, Мальчик "

" 1324B "-" Старше, Высокий, Мальчик, Богатый, Плохой "

1 Ответ

0 голосов
/ 28 сентября 2018

Вот пользовательская функция, с которой вы можете играть.

Arg1 stringToDecode Строка для преобразования.Вы также можете передать адрес диапазона, содержащий строку

Arg2 keys Это часть ключей шифра.Должен передаваться в виде списка через запятую.

Arg2 values Это соответствующая часть значений шифра.Должен передаваться в виде списка через запятую.

Option Explicit
Public Sub test()
    Debug.Print GetCodedOutput([A1], "1,3,4,B,2", "Older,Tall,Richer,Bad,Boy")
End Sub

Public Function GetCodedOutput(ByVal stringToDecode As String, ByVal keys As String, ByVal values As String)
    Dim arr1() As String, arr2()  As String, dict As Object, i As Long, outputString As String
    Set dict = CreateObject("Scripting.Dictionary")
    arr1 = Split(keys, ",")
    arr2 = Split(values, ",")

    If UBound(arr1) <> UBound(arr2) Or stringToDecode = vbNullString Then
        GetCodedOutput = CVErr(xlErrNA)
        Exit Function
    End If

    For i = LBound(arr1) To UBound(arr1)
        dict(arr1(i)) = arr2(i)
    Next i

    Dim outputArr(), upper As Long
    upper = Len(stringToDecode)
    ReDim outputArr(1 To upper)
    For i = 1 To upper
        On Error GoTo errhand
        outputArr(i) = dict(Mid$(stringToDecode, i, 1))
    Next
    GetCodedOutput = Join$(outputArr, ",")
    Exit Function
errhand:
    GetCodedOutput = CVErr(xlErrNA)
    Exit Function
End Function

UDF в листе:

enter image description here

...