Въпрос към урок: За буквите и хората от курс: Анализи с Excel

А как да променя голям списък с имена на кирилица със съответстащите им на латиница?

Microsoft Excel Електронни таблици Microsoft 365 Excel VBA Анализи с Excel

В урок 3 "за буквите и хората" от модул 1има списък с имената на кирилица и в друга колона на латиница. Може би не му е точно тук мястото да питам, но не знам къде точно.

Единия начин, който знам е чрез find and replace. Но трябва буква по буква. Много бавно и трудоемко.

Много начини пробвах в ексела, но не се получи.

Порових се в нета, а там имало някакви макроси, не ми е ясно какви точно.

Ако се напишат отстрани в две колони българската азбука и съответстващите им знаци на латиница. И ако има такава формула да ги замести?

И благодаря предварително за отделеното време за отговор.

Току що се сетих и за варианта - File/ options / proofing/ AutoCorrect Options /AutoCorrect /Replace: .... With: ........

Обаче трябва една по една буквите и като ги замени, трябва всичко това да го изтрием, за да не промени нещо, което не искаме след това. Това, определено също не ми харесва. А пък и не се запомня, за да се използва пак.

Здравейте Даниела,

Сложен въпрос, не ми се е случвало до момента да се справям с такава задача.

Има вариант за който се сещам, но е малко сложен и има малко играчка както казват хората. Ако ви трябва еднократно, е ок, но ако трябва често пъти да го правите това, вероятно едно макро би ви свършило работа.

Ето как става:

Нужни са ви:

  • търпение :)
  • мапинг на буквите по ваше желание (т.е. дали българско В ще е на латиница W или V
  • доста помощни колони (в зависимост от дължината на имената)
  • формулите Concatenate, Proper, и Vlookup, Mid, Column

Сега, лошото е, че няма как да сменим всички букви с една формула. С други думи, трябва да сменим буквите една по една. За целта - направете си мапинг в две колони - в лявата да кажем буквите на кирлица, а в дясната буквите на латиница, които искате да заместят оригиналните.

Това ще ви отнеме около 2 мин, но е малко досадно :) Нека зададем име на този масив/диапазон, да кажем Letters

Нека сега в клетка а2 сложим Иван Петров и да имаме свободни колоните вдясно За да стане Ivan Petrov, правим следното Стъпка 1) разбиваме името на букви: в клетка b2 пишем: =MID($A$2, COLUMN()-1,1) Резултатът ще бъде просто буквата "И". Изтеглете формулата колкото е нужно надясно. Специално с това име - до колона L. Стъпка 2) "превод" на латиница: започваме от клетка b3, където пишем: =IFERROR(VLOOKUP(B2,letters,2,0), " ") Стъпка 3) събиране на буквите: в клетка а3 пишем =PROPER(CONCATENATE(B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3)) Proper слага главна буква в началото на думата и след всеки интервал.

И така, вече имате Ivan Petrov в а3 :)

Вие вече ще си нагодите къде ще пишете формулите, според организацията на данните във вашия файл :)

Даниела, намерих едно място, можеш да опиташ тук - https://forum.abv.bg/abv/lat2cyr.php Пробвах с 3-4 имена, прави някакви транслации :)

Всъщност, това по-горе е латиница - кирилица, а тук - обратно - https://translator-bg.com/content/view/68/63/lang,bg/

Благодаря за отговорите на Витали и Peter. Като си пусна компютъра, ще си поиграя.

С моя скапан късмет, играта стана много голяма. В момента разполагам с ексел 2003. Чудо!! В началото всичко тръгна по реда си. Но стигнах до формулата IFERROR и опаааа. Нема такова животно. Ама не се отказвам. Щом я няма, няма. Използвах само VLOOKUP. Тръгна добре, ама има и интервал. Там ми даде грешка #N/A.
И с нея се справих. Вмъкнах празен интервал в Letters. И се получи. Добре че след това , всичко го имаше в тоя престарял ексел.

Благодаря на Витали за по-голямата игра. Беше ми забавно.

Peter, благодаря ти за сайтовете. Разгледах ги, но предпочитам в ексела да ги обработвам данните. Пък и някои имена ги преобразува малко смешно. Когато сам си направиш настройките, както искаш е друго. Това, което ми хрумна е просто идея. Просто видях някой да преобразува име по име.

Моето е workaroud - метод, т.е. ако си на зор и бързаш да свършиш работа - временно решение, ... което понякога може да стане постоянно :)

Да, понякога можеш да попаднеш на точно това, което ти трябва. Колкото повече варианти - толкова по-голям избор.

За мен варианта с макрос е най-лек. Освен това веднъж направен, макросът може да се ползва постоянно, ако се налага такава операция. Не мога да кажа, че съм особено добре запозната с макросите, но пробвах и записах макрос с Find/Replace -> Replace All за първите 2-3 букви. После с копиране може да се допълни и за останалите букви, за по-бързо и лесно. Поизчистих това, което мисля, че е излишно от кода и макроса си работи. Предимство е, че може да си заложиш на коя буква от кирилицата, коя (кои, ако са повече) от латиница искаш да съответства. На мен за буквите до "ж", например, макросът ми изглежда така: Sub Macro1() ' ' Macro1 Macro '

' Cells.Replace What:="а", Replacement:="a", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="б", Replacement:="b", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="в", Replacement:="v", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="г", Replacement:="g", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="д", Replacement:="d", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="е", Replacement:="e", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="ж", Replacement:="j", LookAt:=xlPart, SearchOrder _ :=xlByRows

End Sub

Още веднъж за по-четливо , че нещо ми се разместиха редовете, когато изпратих отговора:

Sub Macro1() ' ' Macro1 Macro

' Cells.Replace What:="а", Replacement:="a", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="б", Replacement:="b", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="в", Replacement:="v", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="г", Replacement:="g", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="д", Replacement:="d", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="е", Replacement:="e", LookAt:=xlPart, SearchOrder _ :=xlByRows Cells.Replace What:="ж", Replacement:="j", LookAt:=xlPart, SearchOrder _ :=xlByRows

End Sub

Благодаря на Лора за отговора . Е, всъщност се връщаме на варианта find and replace,само че с макроси. Засега не съм толкова на ти с макросите, но мога що годе да се справям. Мога да си запиша действията и да си приложа бутонче за съответния макрос. Не е проблем и да се коригира нещо. Инак ще ми е малко досадно да изписвам ред по ред. Ако казуса се повтаря е логично да се приложи макрос или другата формула на Витали. Например за служителите в една фирма. А това е един масив от данни, който може да се променя постоянно.

Здравейте, от моята практика съм открила една доста дълга формурла за транслитерация, но към момента ми е доста полезна, като разбира се трябва да са провери мапинга на буквите и разбира се дали вашият разделител в excel е като моят ";" - =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D2;"я"; "ya");"ю"; "yu");"ъ"; "y");"щ"; "sht");"ш"; "sh");"ч"; "ch");"ц"; "c");"х"; "h");"ф"; "f");"у"; "u");"т"; "t");"с"; "s");"р"; "r");"п"; "p");"о"; "o");"н"; "n");"м"; "m");"л"; "l");"к"; "k");"й"; "y");"и"; "i");"з"; "z");"ж"; "j");"е"; "e");"д"; "d");"г"; "g");"в"; "v");"б"; "b");"а"; "a");"Я"; "Ya");"Ю"; "Yu");"ь"; "Y");"Ъ"; "Y");"Щ"; "Sht");"Ш"; "Sh");"Ч"; "Ch");"Ц"; "C");"Х"; "H");"Ф"; "F");"У"; "U");"Т"; "T");"С"; "S");"Р"; "R");"П"; "P");"О"; "O");"Н"; "N");"М"; "M");"Л"; "L");"К"; "K");"Й"; "Y");"И"; "I");"З"; "Z");"Ж"; "J");"Е"; "E");"Д"; "D");"Г"; "G");"В"; "V");"Б"; "B");"А"; "A")

Аз използвам Функция, която е създадена чрез Macros и ASCII кодовете на буквите. Това е за превод от BG=>EN, но по аналогичен начин може и за EN=>BG.

https://pastebin.com/pBD6wtBA

Надявам се да ви помогне.


Вашият отговор

Научи компютърните програми онлайн от топ експертите на България
Регистрацията в АУЛА ви дава:
  • 20 безплатни урока
  • Трикове и тънкости за софтуера
  • Отговори на вашите въпроси
  • Регистрация