Страницы: 1
RSS
Поиск и замена русских символов английскими
 
Добрый день!  
Подскажите пожалуйста, как в файле excel найти символы, набранные при русской раскладке клавиатуры, и заменить их на соответствующие английские символы (например С-C, Р-P, Н-H, .-. и т.д.).
 
Здравствуйте.  
 
Ctrl+H  
найти С (английскую)  
заменить С (русская)
 
Было.  
Sub ChangeEngRus_CcEeTOopPAaHKkXxBM()  
   Dim c As Object  
   Dim n As Integer, i As Integer, posChar As Integer  
   Dim ToRusLang As Boolean  
   Dim LineChars(1) As String * 72  
   Dim Ch As String * 1  
   Dim TempSelection As String  
   LineChars(0) = "CcEeTOopPAaHKkXxBM"  
   LineChars(1) = "СсЕеТОорРАаНКкХхВМ"  
   For Each c In Selection.Cells  
       TempSelection = c.Value  
       ToRusLang = True  
       For i = 1 To Len(TempSelection)  
           Ch = Mid(TempSelection, i, 1)  
           If ToRusLang Then n = 0 Else n = 1  
           posChar = InStr(LineChars(n), Ch)  
           If posChar = 0 Then  
               n = 0    'Abs(n - 1)  
               posChar = InStr(LineChars(n), Ch)  
           End If  
           If posChar <> 0 Then  
               Select Case n  
               Case 0  
                   ToRusLang = True  
               Case 1  
                   ToRusLang = False  
               End Select  
               Mid(TempSelection, i, 1) = Mid(LineChars(Abs(n - 1)), posChar, 1)  
           End If  
       Next  
       c.Value = TempSelection  
   Next c  
End Sub
Я сам - дурнее всякого примера! ...
 
Выбирайте, как вам больше нравится:  
Sub Repair_RUS()   ' заменить латинские буквы такими же по начертанию русскими  
  If TypeName(Selection) <> "Range" Then Exit Sub  
  Dim LATChr$: LATChr = "CcEeTOopPAaHKkXxBM"  
  Dim RUSChr$: RUSChr = "СсЕеТОорРАаНКкХхВМ"  
  Dim i%  
  For i = 1 To Len(LATChr)  
     Intersect(Selection, ActiveSheet.UsedRange).Replace _  
           What:=Mid(LATChr, i, 1), _  
           Replacement:=Mid(RUSChr, i, 1), _  
           LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True  
  Next i  
End Sub  
Sub Repair_LAT()   ' заменить русские буквы такими же по начертанию латинскими  
  If TypeName(Selection) <> "Range" Then Exit Sub  
  Dim arrENG(): arrENG = Array("C", "c", "E", "e", "T", "O", "o", "p", "P", "A", "a", "H", "K", "k", "X", "x", "B", "M")  
  Dim arrRUS(): arrRUS = Array("С", "с", "Е", "е", "Т", "О", "о", "р", "Р", "А", "а", "Н", "К", "к", "Х", "х", "В", "М")  
  Dim i%  
  For i = 0 To UBound(arrENG)  
     Intersect(Selection, ActiveSheet.UsedRange).Replace _  
           What:=arrRUS(i), _  
           Replacement:=arrENG(i), _  
           LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True  
  Next i  
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
данная программа производит именно ЗАМЕНУ русских символов английскими?  
обращает ли она внимание на такие символы, как точка, запятая и т.д. ?
 
А у вас запятая на русской раскладке разве не такая же, как на английской??? :)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Чтоб меняла с русского на английский, нужно поменять местами 2 цифры так:  
   LineChars(1) = "CcEeTOopPAaHKkXxBM"  
   LineChars(0) = "СсЕеТОорРАаНКкХхВМ"
Я сам - дурнее всякого примера! ...
 
прошу прощения, с распознованием точек/запятых действительно нет никаких проблем...  
если не трудно, подскажите пожалуйста, как правильно задействовать данную программу, никогда раньше не работал с макросами и т.п., боюсь что-нибудь не так сделать...
 
http://www.planetaexcel.ru/tip.php?aid=122
 
Премного благодарен!
 
А какой из макросов вы решили заюзать?  
Один из двух, приведённых мною или тот, что выложил Сергей (KukLP)?  
 
Ну и, раз у вас возникают проблемы с некоторыми раздолбаями, которым лень переключить раскладку при необходимости ввода одинаковых "на взгляд" символов, то могу подкинуть "до кучи" ещё и макрос, который цветом выделяет латинские и русские буквы:  
 
Sub Color_RUS_LAT()   ' Выделяет русские символы в Selection ЗЕЛЁНЫМ, латинские - КРАСНЫМ  
  If TypeName(Selection) <> "Range" Then Exit Sub  
  Dim iCell As Range, rRange As Range, i%, ASCII%, iColor%  
  On Error GoTo eXXit  
  Set rRange = Intersect(Selection, ActiveSheet.UsedRange)  
  If rRange Is Nothing Then Exit Sub  
  Application.ScreenUpdating = False  
  For Each iCell In rRange  
     For i = 1 To Len(iCell)  
        ASCII = Asc(Mid(iCell, i, 1))  
        If (ASCII >= 192 And ASCII <= 255) Then iColor = 10   'цвет символов РУС  
        If (ASCII >= 65 And ASCII <= 90) Or (ASCII >= 97 And ASCII <= 122) Then iColor = 3   'цвет символов LAT  
        iCell.Characters(Start:=i, Length:=1).Font.ColorIndex = iColor  
     Next i  
  Next iCell  
  rRange.Select  
  Application.ScreenUpdating = True  
eXXit:    End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Еще немного про латиницу, но только наоборот: http://www.planetaexcel.ru/tip.php?aid=67
 
{quote}{login=Alex_ST}{date=26.04.2011 10:15}{thema=}{post}Выбирайте, как вам больше нравится...{/post}{/quote}  
У нас еще есть умельцы, которые ставят русскую У или у вместе Y или y. Только я попробовал добавить их в перечень в тексте макроса. Большая меняется, как и большая Т, а если маленькие буквы, то не заменяет. Как быть?
 
а можно так чтобы числа не выделял?
 
После  
For i = 1 To Len(iCell)  
вставьте  
iColor = xlColorIndexAutomatic
 
Так еще можно внутренний цикл написать:  
 
Dim ch$  
'...  
For i = 1 To Len(iCell)  
ch = LCase$(Mid$(iCell, i, 1))  
If ch Like "[а-яё]" Then
   iColor = 10 'цвет символов РУС  
ElseIf ch Like "[a-z]" Then iColor = 3 'цвет символов LAT
Else: iColor = xlColorIndexAutomatic  
End If  
iCell.Characters(Start:=i, Length:=1).Font.ColorIndex = iColor  
Next i
 
Алексей прав.  
Так короче и намного понятнее - не надо лезть в таблицу кодов символов.  
Дома на компе уже подправил. На работе сделаю завтра обязательно.  
 
Ух ты! Капча 69996 !
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх