У Брайана есть рабочий лист, в котором много ячеек с буквенными символами. Он ищет способ избавиться только от этих буквенных символов, независимо от того, где они появляются в ячейке. Например, если ячейка содержит «ABC123», Брайан хочет избавиться от «ABC»

и осталось только «123». Точно так же «A3B2C1» должно стать «321»

и «# 45P%» должно стать «# 45%».

Единственный способ решить эту проблему — использовать макросы. Если вы хотите просто вырезать символы на месте, вы можете сделать это, выбрав ячейки, на которые вы хотите повлиять, и затем запустив макрос, который проверяет каждую ячейку и удаляет неправильные символы. Есть много способов сделать это; следующий макрос представляет собой простой подход.

Sub CleanText1()

Dim rngCell As Range     Dim intChar As Integer     Dim strCheckString As String     Dim strCheckChar As String     Dim intCheckChar As Integer     Dim strClean As String

For Each rngCell In Selection         strCheckString = rngCell.Value         strClean = ""



For intChar = 1 To Len(strCheckString)

strCheckChar = Mid(strCheckString, intChar, 1)

intCheckChar = Asc(strCheckChar)

Select Case intCheckChar                 Case 65 To 90      'upper case chars                     'Do nothing                 Case 97 To 122     'lower case chars                     'Do nothing                 Case 128 To 151    'special language chars                     'Do nothing                 Case 153 To 154    'special language chars                     'Do nothing                 Case 159 To 165    'special language chars                     'Do nothing                 Case Else                     strClean = strClean & strCheckChar             End Select         Next intChar         rngCell.Value = strClean     Next rngCell End Sub

Хорошая вещь в этом подходе к удалению символов заключается в том, что вы можете легко избавиться от других символов, просто изменив то, что проверяется (и какие действия предпринимаются) в структуре Select Case.

Если вы не хотите изменять исходные ячейки, хорошим подходом будет создание пользовательской функции, которая будет возвращать «чистую» версию строки. Этого можно достичь, внеся несколько изменений в предыдущий макрос.

Function CleanText2(ByVal sRaw As String) As String     Dim intChar As Integer     Dim strCheckString As String     Dim strCheckChar As String     Dim intCheckChar As Integer     Dim strClean As String

Application.Volatile     strClean = ""

For intChar = 1 To Len(sRaw)

strCheckChar = Mid(sRaw, intChar, 1)

intCheckChar = Asc(strCheckChar)

Select Case intCheckChar             Case 65 To 90      'upper case chars                 'Do nothing             Case 97 To 122     'lower case chars                 'Do nothing             Case 128 To 151    'special language chars                 'Do nothing             Case 153 To 154    'special language chars                 'Do nothing             Case 159 To 165    'special language chars                 'Do nothing             Case Else                 strClean = strClean & strCheckChar         End Select     Next intChar     CleanText2 = strClean End Function

Чтобы использовать эту функцию, вы можете поместить в ячейку следующую формулу:

=CleanText2(A1)

В результате формула возвращает «чистую» версию того, что находится в ячейке A1, не нарушая содержимого ячейки A1.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (3219) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:

link: / excelribbon-Getting_Rid_of_Alphabetic_Characters [Избавление от буквенных символов].