Здравствуйте! Есть слово, записанное в ячейке и есть список соответствий каждой букве определенной цифры (A=1, B=2, C=3 и т.д. в диапазоне от 1 до 9. Нужна формула, которая заменит буквы слова на соответствующую букве цифру. Например пишем MARIA и получаем вместо слова набор цифр 41211. В идеале еще и посчитать сумму этих цифр, но я это знаю как сделать. Благодарю за ответ!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
А какая максимальная длина слова? Какое максимальное число, которое надо подставлять вместо символа? Есть ли двухзначные числа? Или только цифры от 0 до 9?
Option Explicit
Sub Zamena()
Dim lLastRowA As Long, lLastRowB As Long, TekRowA As Long, TekRowB As Long, NT As String
lLastRowA = Cells(Rows.Count, 1).End(xlUp).Row 'столбец текст оригинала
lLastRowB = Cells(Rows.Count, 3).End(xlUp).Row 'столбец буквы словаря
For TekRowA = 1 To lLastRowA
NT = Replace(Cells(TekRowA, 1), Cells(3, 3), Cells(3, 4), , , vbTextCompare) 'оригинал, буквы словаря, цифры словаря
If lLastRowB > 1 Then
For TekRowB = 1 To lLastRowB
NT = Replace(NT, Cells(TekRowB, 3), Cells(TekRowB, 4), , , vbTextCompare)
Next TekRowB
End If
Cells(TekRowA, 2) = NT 'столбец для вставки результата, можно вместо оригинала
Next TekRowA
End Sub
в примере цифры идут со слешем, чтоб в результате понимать визуально , 14 = это 1 и 4 как "а" и "г"; или 14 = как "м"
А написан же диапазон от 1 до 8 . Видимо автоподставновщик смайлов подвел. Поэтому я и решил, что букв и цифр всего 8. Для этого условия решение универсальное, вроде как)
Евгения Ж написал: сть список соответствий каждой букве определенной цифры
правильно ли я понимаю что слова состоят из максимум 10 разных букв или буквы кодируются одинаковыми цифиркам от 0 до 9 (цифр всего 10? а не бесконечное множество)? Если да то вариант формульный не сложный если нет, то MARIANA 41211991 где "Цифра" 99 соответствует N , то суммируем 4+1+2+1+1+99+1 или 4+1+2+1+1+9+9+1 ?
это я не заметил, прошу прощения - там действительно до 8 в виде смайла
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
до 15 символов на старых версиях Excel =SUM(IFERROR(INDEX(B1:B8;N(INDEX(MATCH(MID(REPT(" ";15-LEN(C1))&C1;ROW(1:15);1);A1:A8;);)))*10^(15-ROW(1:15));)) Сразу сумма без предварительных ласок. =SUMPRODUCT(IFERROR(INDEX(B1:B8;N(INDEX(MATCH(MID(C1;ROW($1:$99);1);A1:A8;);)));))
Makar Vilov,ДА!! Благодарю!! Я слово написала маленькими буквами, а подставление делала заглавными, вот и не сработало. Пребольшая благодарность!)) Я билась над задачей 3 дня, а вы легко все сделали)
Function Translit(Txt As String) As String
Dim Rus As Variant
Rus = Array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", _
"л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", _
"щ", "ъ", "ы", "ь", "э", "ю", "я")
Dim Eng As Variant
Eng = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, _
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, _
26, 27, 28, 29, 30, 31, 32, 33)
For I = 1 To Len(Txt)
с = Mid(LCase(Txt), I, 1)
flag = 0
For J = 0 To 32
If Rus(J) = с Then
outchr = Eng(J)
flag = 1
Exit For
End If
Next J
If flag Then outstr = outstr & outchr Else outstr = outstr & с
Next I
Translit = outstr
End Function
А так сразу сумма
Код
Function Translit_S(Txt As String)
Dim Rus As Variant
Rus = Array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", _
"л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", _
"щ", "ъ", "ы", "ь", "э", "ю", "я")
Dim Eng As Variant
Eng = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, _
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, _
26, 27, 28, 29, 30, 31, 32, 33)
For I = 1 To Len(Txt)
с = Mid(LCase(Txt), I, 1)
flag = 0
For J = 0 To 32
If Rus(J) = с Then
outchr = Eng(J)
flag = 1
Exit For
End If
Next J
If flag Then outstr = outstr + outchr Else outstr = outstr
Next I
Translit_S = outstr
End Function
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Неопытный_Экселист, зачем терзать строки если латинский имеет четкую последовательность кодов символов? 65, 66..... в отличии от кириллицы, где выпадает из ряда Ё например.