2016-06-23 3 views
0

Im работает с символьными строками в Excel, пытаясь заменить символы (игнорируя пробелы, тире и периоды) с помощью алфавита (по порядку). Эти строки находятся в отдельных ячейках. Я просто хочу сделать одну ячейку за раз. Пример. SG6 -099 превратится в ABC -DEF и 3F5234-42- GA превратится в ABCDEF-GH-IJЦитирование через строку в excel, заменяя Chars на алфавит

Эти строки не будут длиннее 26 символов.

Возможно ли это?

Заранее спасибо

+5

Добро пожаловать в StackOverflow. Обратите внимание, что это не бесплатная служба написания кода. Тем не менее, мы готовы помочь другим программистам (и претендентам) с ** их ** кодом. Ознакомьтесь с разделами справки на странице [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask). Вы также можете [совершить тур] (http://stackoverflow.com/tour) и заработать значок при этом. Впоследствии, пожалуйста, обновите свой вопрос кодом VBA, который вы написали до сих пор, чтобы выполнить задачу (задачи), которую вы хотите достичь. – Ralph

+0

'SG6 -099 превратится в ABC -EFG', почему' D' пропустили? – findwindow

+0

исправил это, была моя ошибка – Luke

ответ

0

мне удалось объединить две подводные лодки (один я, а другой я нашел). Как это работает?

Function replace_Text(ByVal cel as Range) as String 


Dim editText$ 
editText = cel.Value 

Dim i&, k& 
k = 1 
For i = 1 To Len(editText) 
    If IsLetter(Mid(editText, i, 1)) Then 
     editText = WorksheetFunction.Substitute(editText, Mid(editText, i, 1), Chr$(64 + k), 1) 
     k = k + 1 
    End If 
Next i 

replace_Text = editText 
End Function 

Function IsLetter(strValue As String) As Boolean 
' https://techniclee.wordpress.com/2010/07/21/isletter-function-for-vba/ 
    Dim intPos As Integer 
    For intPos = 1 To Len(strValue) 
     Select Case Asc(Mid(strValue, intPos, 1)) 
      Case 48 To 57, 65 To 90, 97 To 122 
       IsLetter = True 
      Case Else 
       IsLetter = False 
       Exit For 
     End Select 
    Next 
End Function 

В ячейке, тип =text_Replace(A1), где A1 представляет собой клетку со строкой.

+0

Im новый для превосходных скриптов, не могли бы вы объяснить, как это работает? Я вставил его в код представления для рабочего листа, и я набрал строку в ячейке A1, но ничего не происходит. Я что-то упускаю? – Luke

+0

@ luke - D'oh - проверить редактирование извините. – BruceWayne

+0

Спасибо большое! Получил его на работу – Luke

0

Это то, что я в конечном итоге использовал. Он заполняет выход в соседнюю ячейку

Ex. 080110- 0015 будет вход ABCDEF- GHIJ будет выходного

Private Sub Worksheet_Change(ByVal Target As Range) 


If Not Application.Intersect(Range("A1:A6"), Range(Target.Address)) Is Nothing Then 
Call replace_Text("A", "1") 

End If 
End Sub 

выше, как я бы назвал эту функцию.

Sub replace_Text(C As String, R As String) 


Set cel = Range(C & R) 

Dim editText$ 
editText = cel.Value 

Dim i&, k& 
k = 1 
For i = 1 To Len(editText) 
    If IsLetter(Mid(editText, i, 1)) Then 
     Select Case (InStr(editText, Chr$(64 + k)) > 0) 
     Case True 
     editText = WorksheetFunction.Substitute(editText, Mid(editText, i, 1), Chr$(64 + k), 1) 
     k = k + 1 
     Case False 
     editText = WorksheetFunction.Replace(editText, i, 1, Chr$(64 + k)) 
     k = k + 1 
     End Select 

     ElseIf IsNum(Mid(editText, i, 1)) Then 
     editText = WorksheetFunction.Substitute(editText, Mid(editText, i, 1), Chr$(64 + k), 1) 
     k = k + 1 
    End If 
Next i 

Dim cel2 

Set cel2 = Range("B" & R) 
cel2.Value = editText 


End Sub 

Function IsNum(strValue As String) As Boolean 
    Dim intPos As Integer 
    For intPos = 1 To Len(strValue) 
     Select Case Asc(Mid(strValue, intPos, 1)) 
      Case 47 To 57, 47 To 57 
       IsNum = True 
      Case Else 
       IsNum = False 
       Exit For 
     End Select 
    Next 
End Function 

Function IsLetter(strValue As String) As Boolean 
    Dim intPos As Integer 
    For intPos = 1 To Len(strValue) 
     Select Case Asc(Mid(strValue, intPos, 1)) 
      Case 65 To 90, 97 To 122 
       IsLetter = True 
      Case Else 
       IsLetter = False 
       Exit For 
     End Select 
    Next 
End Function