Страницы: 1 2 След.
RSS
Замена букв слова в одной ячейке на другие символы, Замена букв слова в одной ячейке на другие символы
 
Здравствуйте! Есть слово, записанное в ячейке и есть список соответствий каждой букве определенной цифры (A=1, B=2, C=3 и т.д. в диапазоне от 1 до 9. Нужна формула, которая заменит буквы слова на соответствующую букве цифру. Например пишем MARIA и получаем вместо слова набор цифр 41211. В идеале еще и посчитать сумму этих цифр, но я это знаю как сделать. Благодарю за ответ!
Изменено: Евгения Ж - 22.10.2021 13:16:49
 
Не очень изящно, но эффективно можно написать так:
Код
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(C1;A1;B1);A2;B2);A3;B3);A4;B4);A5;B5);A6;B6);A7;B7);A8;B8)
где в столбцах A и B - буквы и соответствующие им цифры, а в ячейке C1 слово из букв, которое нужно декодировать
 
Makar Vilov, и так 33 раза  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
А какая максимальная длина слова?
Какое максимальное число, которое надо подставлять вместо символа? Есть ли двухзначные числа? Или только цифры от 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 = как "м"
Изменено: andylu - 22.10.2021 12:14:37
 
Цитата
Jack Famous написал:
Makar Vilov , и так 33 раза
А написан же диапазон от 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 ?

Смотрю Светлый уже тоже расчехлил .... :-)

Кстати как закодирована MARIA  - 41211  I-1 и A-1?
Изменено: БМВ - 22.10.2021 12:42:37
По вопросам из тем форума, личку не читаю.
 
БМВ, да, букв 26 - латинский алфавит и цифр всего 9 (они повторяются)
 
Цитата
Makar Vilov: написан же диапазон от 1 до 8
это я не заметил, прошу прощения - там действительно до 8 в виде смайла  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Makar Vilov, формула сработала, но цифр не появилось, так же получилось то же слово...((
 
.
 
до 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;);)));))
Изменено: БМВ - 22.10.2021 14:56:25
По вопросам из тем форума, личку не читаю.
 
Makar Vilov,ДА!! Благодарю!! Я слово написала маленькими буквами, а подставление делала заглавными, вот и не сработало. Пребольшая благодарность!)) Я билась над задачей 3 дня, а вы легко все сделали)
 
Цитата
Евгения Ж написал:
а вы легко все сделали)
осталось только 26 раз провести подстановку :-)
По вопросам из тем форума, личку не читаю.
 
Ещё можно ОТСЮДА подредактировать макрос
Код
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
Изменено: Msi2102 - 22.10.2021 14:13:03
 
Msi2102,
Цитата
Евгения Ж написал:
и цифр всего 9 (они повторяются)
По вопросам из тем форума, личку не читаю.
 
БМВ, Так проблем нет. Алфавит, я понял, будет весь, а числа пусть заменит на нужные, там вроде не сложно
Изменено: Msi2102 - 22.10.2021 14:46:44
 
БМВ, Msi2102,
Цитата
Jack Famous: там действительно до 8 в виде смайла
всего 8  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Msi2102 написал:
там вроде не сложно
да,это верно, но то что в текущем коде, реализуется проще
Код
Rus(i) = instr("абвгдеёжзийклмнопрстуфхцчшщъыьэюя", Mid(LCase(Txt), I, 1)
, в случае с латынью
Код
Rus(i) = Asc(Mid(LCase(Txt), I, 1))-64

В случае с неполедовательной кодировкой и повторорами, наверно и правда иметь второй массив проще и брать из него значения

Код
RUS(I)=Eng(instr("абвгдеёжзийклмнопрстуфхцчшщъыьэюя", Mid(LCase(Txt), I, 1))
Изменено: БМВ - 22.10.2021 15:43:48
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
"абвгдеёжзийклмнопрстуфхцчшщъыьэюя",
А почему не латинский алфавит, если
Цитата
БМВ написал:
в случае с латынью
?
ОФФ
 
Неопытный_Экселист,  зачем терзать строки если латинский имеет четкую последовательность кодов символов? 65, 66..... в отличии от кириллицы, где выпадает из ряда Ё например.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
да,это верно, но то что в текущем коде, реализуется проще
Я знаю, лень было писать, искать уже написанное. Взял, что первое подвернулось под руку  :D  
 
БМВ,
Большущее спасибо.
Цитата
БМВ написал:
65, 66.....
Тогда почему в Вашей формуле вычитается 64?
 
Цитата
БМВ написал:
В случае с неполедовательной кодировкой и повторорами, наверно и правда иметь второй массив проще и брать из него значения
А где один массив, там и второй. Макрос из 16 сообщения более наглядный и проще для понимания  :)  
 
Цитата
Неопытный_Экселист написал:
Тогда почему в Вашей формуле вычитается 64?
ну хоть тут то подумайте.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
ну хоть тут то подумайте
Так думаю, и не понимаю. Вычитаться должно же максимальное число - 66? Объясните, пожалуйста.
 
Неопытный_Экселист,
чтоб из последовательности 65, 66, 67 ... получить 1,2,3 нужно вычитать 64
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
получить 1,2,3
А я чё-то в другом направлении думал. Большущее спасибо.
 
Вариант:
Код
=СУММПРОИЗВ(МУМНОЖ(--ЕЧИСЛО(ПОИСК(ЛЕВБ(ПРАВБ(0&C1;СТРОКА($1:$15)));{"abc";"def";"ghi";"jkl";"mno";"pqr";"stu";"vwx";"zy"}));СТРОКА($1:$9))*10^(СТРОКА($1:$15)-1))
=СУММПРОИЗВ(ЕСЛИОШИБКА(ПОИСКПОЗ("*"&ЛЕВБ(ПРАВБ(0&C1;СТРОКА($1:$15)))&"*";{"abc";"def";"ghi";"jkl";"mno";"pqr";"stu";"vwx";"zy"};);)*10^(СТРОКА($1:$15)-1))
Буквы в кавычках заменятся на порядковый номер кавычек. Например, буквы "def" заменится на 2, а "mno" на 5
Изменено: Светлый - 22.10.2021 19:18:09
Страницы: 1 2 След.
Наверх