Как оставить в ячейке только цифры или только текст?
Что умеет Excel
Вот бывает так: есть у Вас в ячейке некий текст. Допустим «Было доставлено кусков мыла 763шт.». Вам нужно из этого только 763 — чтобы можно было провести с этим некие математические действия. Если это только одна ячейка — проблем тут нет, а если таких ячеек пару тысяч? И к тому же все разные?
- Было доставлено кусков мыла 763шт.
- Всего пришло 34
- Тюбики — 54 доставлено
- и т.д.
Никакой зацепки для извлечения данных. Пару тысяч таких строк удалять вручную весьма утомительное занятие, надо сказать. Да еще и не быстрое. Я хочу предложить Вам пару вариантов решения этой проблемы при помощи VBA. Ниже приведен код пользовательской функции, которая поможет извлечь из строки только числа, либо только текст. Иными словами, результатом функции будет либо только текст, либо только числа.
Function Extract_Number_from_Text(sWord As String, Optional Metod As Integer) 'sWord = ссылка на ячейку или непосредственно текст 'Metod = 0 – числа 'Metod = 1 – текст Dim sSymbol As String, sInsertWord As String Dim i As Integer If sWord = "" Then Extract_Number_from_Text = "Нет данных!": Exit Function sInsertWord = "" sSymbol = "" For i = 1 To Len(sWord) sSymbol = Mid(sWord, i, 1) If Metod = 1 Then If Not LCase(sSymbol) Like "*[0-9]*" Then If sSymbol = "," Or sSymbol = "." Or sSymbol = " " Then If Mid(sWord, i - 1, 1) Like "*[0-9]*" And Mid(sWord, i + 1, 1) Like "*[0-9]*" Then sSymbol = "" End If End If sInsertWord = sInsertWord & sSymbol End If Else If LCase(sSymbol) Like "*[0-9.,;:-]*" Then If LCase(sSymbol) Like "*[.,]*" Then If Not Mid(sWord, i - 1, 1) Like "*[0-9]*" Or Not Mid(sWord, i + 1, 1) Like "*[0-9]*" Then sSymbol = "" End If End If sInsertWord = sInsertWord & sSymbol End If End If Next i Extract_Number_from_Text = sInsertWord End Function
Function Extract_Number_from_Text(sWord As String, Optional Metod As Integer)
'sWord = ссылка на ячейку или непосредственно текст
'Metod = 0 – числа
'Metod = 1 – текст
Dim sSymbol As String, sInsertWord As String
Dim i As Integer
If sWord = "" Then Extract_Number_from_Text = "Нет данных!": Exit Function
sInsertWord = ""
sSymbol = ""
For i = 1 To Len(sWord)
sSymbol = Mid(sWord, i, 1)
If Metod = 1 Then
If Not LCase(sSymbol) Like "*[0-9]*" Then
If sSymbol = "," Or sSymbol = "." Or sSymbol = " " Then
If Mid(sWord, i - 1, 1) Like "*[0-9]*" And Mid(sWord, i + 1, 1) Like "*[0-9]*" Then
sSymbol = ""
End If
End If
sInsertWord = sInsertWord & sSymbol
End If
Else
If LCase(sSymbol) Like "*[0-9.,;:-]*" Then
If LCase(sSymbol) Like "*[.,]*" Then
If Not Mid(sWord, i - 1, 1) Like "*[0-9]*" Or Not Mid(sWord, i + 1, 1) Like "*[0-9]*" Then
sSymbol = ""
End If
End If
sInsertWord = sInsertWord & sSymbol
End If
End If
Next i
Extract_Number_from_Text = sInsertWord
End FunctionДанный код необходимо поместить в стандартный модуль книги. А пользоваться очень просто: на листе просто пишите, как обычную формулу:
=Extract_Number_from_Text(A1; 0) или =Extract_Number_from_Text(A1) — если надо оставить только числа
=Extract_Number_from_Text(A1; 1) — если надо оставить только текст
Подробнее про создание пользовательских функции и их применении можно почитать здесь
Помимо функции решил выложить и вариант с использованием UserForm.
рис.1
Выбрать ячейку или диапазон с текстом(Лист1!$A$2:$A$10) - здесь указывается диапазон с исходными значениями, который нужно преобразовать.
Выберите ячейку для вывода данных(Лист1!$A$2) — указывается одна ячейка, с которой начать вывод преобразованных значений. В качестве этой ячейки можно выбрать первую ячейку дипазона с текстом(исходного) если Вам необходимо произвести изменения сразу в этих же ячейках(как на рис.1). Осторожнее с таким указанием, т.к. результат работы кода может быть не совсем таким, какой Вы ожидали. Вернуть прежние данные уже не получится — если только не закрыть файл без сохранения изменений.
Оставить только цифры, Оставить только текст- думаю не надо пояснять. Здесь выбираем, что оставить в качестве результата.
Tips_Macro_Number_From_Text.xls (80,0 KiB, 1 353 скачиваний)
Также см.:
→Извлечение числа из текста
→Что такое функция пользователя(UDF)?

9978

Вставил код, не работает выдает ошибку 1004
Заменил FormulaR1C1 на FormulaLocal и все заработало.
Огромное вам спасибо добрый человек.
Спасибо огромное!!!!!