Добрый день! Подскажите пожалуйста, как в файле excel найти символы, набранные при русской раскладке клавиатуры, и заменить их на соответствующие английские символы (например С-C, Р-P, Н-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!!!)
прошу прощения, с распознованием точек/запятых действительно нет никаких проблем... если не трудно, подскажите пожалуйста, как правильно задействовать данную программу, никогда раньше не работал с макросами и т.п., боюсь что-нибудь не так сделать...
А какой из макросов вы решили заюзать? Один из двух, приведённых мною или тот, что выложил Сергей (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!!!)
{quote}{login=Alex_ST}{date=26.04.2011 10:15}{thema=}{post}Выбирайте, как вам больше нравится...{/post}{/quote} У нас еще есть умельцы, которые ставят русскую У или у вместе Y или y. Только я попробовал добавить их в перечень в тексте макроса. Большая меняется, как и большая Т, а если маленькие буквы, то не заменяет. Как быть?
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
Алексей прав. Так короче и намного понятнее - не надо лезть в таблицу кодов символов. Дома на компе уже подправил. На работе сделаю завтра обязательно.