Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 28.09.2011, 12:01   #1
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
Вопрос Как из ячейки содержащей текст и число извлечь только число?

Здравствуйте, помогите пожалуйста.

В одной ячейке по графе А содержится текс и число. Как в соседнюю ячейку графы В извлечь только число.

Не через раз «Текс по столбцам», а формулой или макросом. Так как таких ячеек много и текст везде разный и критерии для разбивки разные.

Т.е. на данный момент я делаю это процедуру через «Текс по столбцам», но после чего необходимо ещё «дорабатывать» много.

Возможно, есть более удобное и быстрое решение, кто знает, подскажите пожалуйста.

Вложен пример в оригинале ячеек с подобным текстом больше и разнообразней.
Вложения
Тип файла: rar как извлечь число из текста.rar (6.6 Кб, 101 просмотров)
АННА-ЕАО вне форума
Старый 28.09.2011, 12:15   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Выделить данные в А, затем

Код:
Sub tt()
Dim cc As Range
For Each cc In Selection
cc.Offset(, 1) = Split(cc)(UBound(Split(cc)))
Next
End Sub
Ну или вместо Selection явно указать диапазон.
Но правда так есть косяк в МОУ СОШ N56
Если нужны цифры не как текст, то добавьте --:
cc.Offset(, 1) = --Split(cc)(UBound(Split(cc)))
Но опять же на N56 будет уже ошибка.

Хотя сразу не заметил (в низ промотал) - там есть ещё 3 строки с нецифрами в конце...
Тогда используйте UDF или её алгоритм:

Код:
'---------------------------------------------------------------------------------------
' Module    : mNumberFromText
' DateTime  : 18.03.2011 15:21
' Author    : The_Prist(Щербаков Дмитрий)
'             WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
'             www.excel-vba.ru
' Purpose   : http://www.planetaexcel.ru/forum.php?thread_id=25683
'---------------------------------------------------------------------------------------


Function Extract_Number_from_Text(sWord As String, Optional Metod As Integer)    '0 числа, 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 GetNumeric(t As Range)
    Dim j As Integer, l As String
    For j = 1 To Len(t)
        If IsNumeric(Mid(t, j, 1)) Then l = l & Mid(t, j, 1)
    Next j
    GetNumeric = Val(l)
End Function

Public Function ExtractNumber(S As String)
    Dim i As Integer, str As String
    For i = 1 To Len(S)
        If InStr(1, "1234567890,", Mid(S, i, 1)) <> 0 Then str = str & Mid(S, i, 1)
    Next
    ExtractNumber = str
End Function

Function NumbersOnly(srcStr As String) As String
    Dim objRegEx As Object
    Set objRegEx = CreateObject("VBScript.RegExp")
    With objRegEx
        .Global = True
        .Pattern = "[^0-9,]"    '"\D"
        NumbersOnly = .Replace(srcStr, vbNullString)
    End With
    Set objRegEx = Nothing
End Function

Function Num(Текст As String) As Long
    For n = 1 To Len(Текст)
        If Mid(Текст, n, 1) Like "#" Then Num = Num & Mid(Текст, n, 1)
    Next n
End Function
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.09.2011 в 12:34. Причина: FindDigits убрал - не то...
Hugo121 вне форума
Старый 28.09.2011, 12:16   #3
MCH
Форумчанин
 
Регистрация: 21.11.2010
Сообщений: 326
По умолчанию

Формулой:
Код:
=ПРОСМОТР(9999;--ПСТР(A1;ПОИСК("N";A1)+1;{1;2;3;4}))

Последний раз редактировалось MCH; 28.09.2011 в 12:19.
MCH вне форума
Старый 28.09.2011, 12:32   #4
vefer
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 134
По умолчанию

В вашем случае можно так:
Код:
=ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ("N ";A1))
vefer вне форума
Старый 28.09.2011, 12:53   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

В общем, нужно смотреть на данные - все способы могут накосячить.
Вдруг N будет в названии?
Или будет №36?
Или в названии будет цифра? Например "МОУ прогимназия № 66 "Революции 1905 года"
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума
Старый 28.09.2011, 13:04   #6
vefer
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 134
По умолчанию

Ну не просят-же написать универсальную форму, если формат всех надписей одинаков в данном случае.
vefer вне форума
Старый 28.09.2011, 13:11   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

А вот
Код:
=RIGHT(A5;LEN(A5)-FIND("N ";A5))
тут как раз накосячит (как и мой первый макрос) на данных типа
Код:
МОУ прогимназия N 132 "Альтаир"
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума
Старый 28.09.2011, 13:31   #8
MCH
Форумчанин
 
Регистрация: 21.11.2010
Сообщений: 326
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
А вот
Код:
=RIGHT(A5;LEN(A5)-FIND("N ";A5))
тут как раз накосячит (как и мой первый макрос) на данных типа
Код:
МОУ прогимназия N 132 "Альтаир"
А моя формула справляется
MCH вне форума
Старый 28.09.2011, 13:33   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Справляется. На трёх цифрах, если перед ними один пробел. А если больше?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума
Старый 28.09.2011, 13:48   #10
MCH
Форумчанин
 
Регистрация: 21.11.2010
Сообщений: 326
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Справляется. На трёх цифрах, если перед ними один пробел. А если больше?
В примере этого нет, специально ограничил тремя цифрами, т.к. нет двойных пробелов и максимальное число - трехзначное, если будет больше знаков, то формула легко переделывается
MCH вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как извлечь число выраженное в стандартном виде b2soft Помощь студентам 1 14.02.2011 00:56
Число как текст преобразовать в число agregator Microsoft Office Excel 5 28.04.2010 06:08
"Число в p-ичной системе счисления. Перевести число в q-ичную систему" и не только :) Zinder Паскаль, Turbo Pascal, PascalABC.NET 4 10.04.2010 14:20
Как разделить число и текст в одной ячейки на две ячейки. neboskreb Microsoft Office Excel 2 15.04.2008 19:39