Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Извлечение данных числового формата из текста - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Извлечение данных числового формата из текста (Формулы/Formulas)
Извлечение данных числового формата из текста
Мурад Дата: Среда, 15.07.2015, 17:54 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Добрый день! Прошу вашей помощи, в который раз :) . Как-то Саша помог решить много задач, предоставив интересное решение в теме.
Теперь задача похожая. Необходимо извлечь код специальности из текста. Как решить данную задачу наиболее проще, оптимальнее? Код специальности представляет собой набор цифр, разделенных точками. Как это использовать при поиске?
К сообщению приложен файл: 2123302.xlsx (9.9 Kb)
 
Ответить
СообщениеДобрый день! Прошу вашей помощи, в который раз :) . Как-то Саша помог решить много задач, предоставив интересное решение в теме.
Теперь задача похожая. Необходимо извлечь код специальности из текста. Как решить данную задачу наиболее проще, оптимальнее? Код специальности представляет собой набор цифр, разделенных точками. Как это использовать при поиске?

Автор - Мурад
Дата добавления - 15.07.2015 в 17:54
Nic70y Дата: Среда, 15.07.2015, 18:11 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
вариант массивной:
Код
=ПОДСТАВИТЬ(СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(A8;ПОИСКПОЗ(1=1;ЕЧИСЛО(--ПСТР(ПОДСТАВИТЬ(A8;"(";"-");СТРОКА($1:$999);2));0)+1;99);" ";ПОВТОР(" ";99));99));")";)
К сообщению приложен файл: 11-17.xlsx (11.0 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщениевариант массивной:
Код
=ПОДСТАВИТЬ(СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(A8;ПОИСКПОЗ(1=1;ЕЧИСЛО(--ПСТР(ПОДСТАВИТЬ(A8;"(";"-");СТРОКА($1:$999);2));0)+1;99);" ";ПОВТОР(" ";99));99));")";)

Автор - Nic70y
Дата добавления - 15.07.2015 в 18:11
_Boroda_ Дата: Среда, 15.07.2015, 18:30 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Еще вариант
Код
=СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(A8;МИН(ЕСЛИ(ЕСЛИОШИБКА(-(ПСТР(A8;СТРОКА($1:$99);2)&")")>=0;);СТРОКА($1:$99)))+1;99);")";ПОВТОР(" ";99));99))

Правильно реагирует на текст, например, такой "Социальная 777 работа (магистр) (39.04.02)"
Но тоже не всегда отрабатывает
К сообщению приложен файл: 2123302_1.xlsx (12.2 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕще вариант
Код
=СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(A8;МИН(ЕСЛИ(ЕСЛИОШИБКА(-(ПСТР(A8;СТРОКА($1:$99);2)&")")>=0;);СТРОКА($1:$99)))+1;99);")";ПОВТОР(" ";99));99))

Правильно реагирует на текст, например, такой "Социальная 777 работа (магистр) (39.04.02)"
Но тоже не всегда отрабатывает

Автор - _Boroda_
Дата добавления - 15.07.2015 в 18:30
vikttur Дата: Среда, 15.07.2015, 19:09 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Код
=ПОДСТАВИТЬ(ПСТР(A8;ПОИСК("??????.??)";A8);9);"(";)
 
Ответить
Сообщение
Код
=ПОДСТАВИТЬ(ПСТР(A8;ПОИСК("??????.??)";A8);9);"(";)

Автор - vikttur
Дата добавления - 15.07.2015 в 19:09
Мурад Дата: Среда, 15.07.2015, 21:41 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Nic70y, _Boroda_, vikttur, очень интересные решения! Браво! Но применительно к моей задаче самое простое, понятное для изучения, и быстрое в вычислительном плане решение предоставил vikttur. Благодарю!
 
Ответить
СообщениеNic70y, _Boroda_, vikttur, очень интересные решения! Браво! Но применительно к моей задаче самое простое, понятное для изучения, и быстрое в вычислительном плане решение предоставил vikttur. Благодарю!

Автор - Мурад
Дата добавления - 15.07.2015 в 21:41
_Boroda_ Дата: Среда, 15.07.2015, 21:42 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Мурад, ты удивишься, но они все три косячные.
Смотри файл ...555
А вот этот монстр (не оптимизировал, сразу скажу) вроде всё ловит (файл ...555_1)
Код
=ИНДЕКС(ПСТР(A8;НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)="(")*СТРОКА($1:$150);СТРОКА($1:$3))+1;НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)=")")*СТРОКА($1:$150);СТРОКА($1:$3))-НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)="(")*СТРОКА($1:$150);СТРОКА($1:$3))-1);ПОИСКПОЗ(0=0;ЕЧИСЛО(-ПОДСТАВИТЬ(ПСТР(A8;НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)="(")*СТРОКА($1:$150);СТРОКА($1:$3))+1;НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)=")")*СТРОКА($1:$150);СТРОКА($1:$3))-НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)="(")*СТРОКА($1:$150);СТРОКА($1:$3))-1);".";));))
К сообщению приложен файл: 2123302555.xlsx (12.3 Kb) · 2123302555_1.xlsx (13.3 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМурад, ты удивишься, но они все три косячные.
Смотри файл ...555
А вот этот монстр (не оптимизировал, сразу скажу) вроде всё ловит (файл ...555_1)
Код
=ИНДЕКС(ПСТР(A8;НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)="(")*СТРОКА($1:$150);СТРОКА($1:$3))+1;НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)=")")*СТРОКА($1:$150);СТРОКА($1:$3))-НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)="(")*СТРОКА($1:$150);СТРОКА($1:$3))-1);ПОИСКПОЗ(0=0;ЕЧИСЛО(-ПОДСТАВИТЬ(ПСТР(A8;НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)="(")*СТРОКА($1:$150);СТРОКА($1:$3))+1;НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)=")")*СТРОКА($1:$150);СТРОКА($1:$3))-НАИБОЛЬШИЙ((ПСТР(A8;СТРОКА($1:$150);1)="(")*СТРОКА($1:$150);СТРОКА($1:$3))-1);".";));))

Автор - _Boroda_
Дата добавления - 15.07.2015 в 21:42
jakim Дата: Среда, 15.07.2015, 22:44 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1200
Репутация: 313 ±
Замечаний: 0% ±

Excel 2010
А такой вариант?
К сообщению приложен файл: Copy_of_2123302.xlsx (10.5 Kb)
 
Ответить
Сообщение
А такой вариант?

Автор - jakim
Дата добавления - 15.07.2015 в 22:44
vikttur Дата: Среда, 15.07.2015, 22:45 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Я писал формулу по показанным данным: номер формата хх.хх.хх или хххххх.хх, номер обязательно в скобках.
Если код специальности может иметь другой формат, покажите.
Например, при отсутствии скобок не поможет и монстр :)


Сообщение отредактировал vikttur - Среда, 15.07.2015, 22:50
 
Ответить
СообщениеЯ писал формулу по показанным данным: номер формата хх.хх.хх или хххххх.хх, номер обязательно в скобках.
Если код специальности может иметь другой формат, покажите.
Например, при отсутствии скобок не поможет и монстр :)

Автор - vikttur
Дата добавления - 15.07.2015 в 22:45
vikttur Дата: Среда, 15.07.2015, 23:24 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Так и я о том же. Формула зависит от данных. Будут другие условия - будут другие формулы.
 
Ответить
СообщениеТак и я о том же. Формула зависит от данных. Будут другие условия - будут другие формулы.

Автор - vikttur
Дата добавления - 15.07.2015 в 23:24
gling Дата: Среда, 15.07.2015, 23:31 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2525
Репутация: 678 ±
Замечаний: 0% ±

2010
Посмотрите Здесь, для Вашего варианта подходит. ФМ.
Код
=ПСТР(A25;ПОИСКПОЗ(;---ЕОШ(-ПСТР(A25;СТРОКА($1:$997);1)););ПОИСКПОЗ(2;1/НЕ(ЕОШ(-ПСТР(A25;СТРОКА($1:$997);1))))-ПОИСКПОЗ(;---ЕОШ(-ПСТР(A25;СТРОКА($1:$997);1));)+1)


ЯД-41001506838083

Сообщение отредактировал gling - Среда, 15.07.2015, 23:32
 
Ответить
СообщениеПосмотрите Здесь, для Вашего варианта подходит. ФМ.
Код
=ПСТР(A25;ПОИСКПОЗ(;---ЕОШ(-ПСТР(A25;СТРОКА($1:$997);1)););ПОИСКПОЗ(2;1/НЕ(ЕОШ(-ПСТР(A25;СТРОКА($1:$997);1))))-ПОИСКПОЗ(;---ЕОШ(-ПСТР(A25;СТРОКА($1:$997);1));)+1)

Автор - gling
Дата добавления - 15.07.2015 в 23:31
krosav4ig Дата: Четверг, 16.07.2015, 00:48 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
еще вариант
Код
=ЕСЛИОШИБКА(ПСТР(A8;ПРОСМОТР(1;1/ПСТР(A8;СТРОКА($1:$200);6)/ЕОШ(ПОИСК(".";ПСТР(A8;СТРОКА($1:$200);6)));СТРОКА($1:$200));9);ПСТР(A8;ПОИСК("??.??.??";A8);8))

Мурад, нужно было еще в 1 посте уточнить, что код состоит из фиксированного количества цифр (6+2 или 2+2+2) разделенных точками, да и в названиях специальностей и направлений чисел не встречается
[p.s.]Мурад, посмотри аттач, вдруг пригодится
[/p.s.]
К сообщению приложен файл: xml10.zip (54.3 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Четверг, 16.07.2015, 00:48
 
Ответить
Сообщениееще вариант
Код
=ЕСЛИОШИБКА(ПСТР(A8;ПРОСМОТР(1;1/ПСТР(A8;СТРОКА($1:$200);6)/ЕОШ(ПОИСК(".";ПСТР(A8;СТРОКА($1:$200);6)));СТРОКА($1:$200));9);ПСТР(A8;ПОИСК("??.??.??";A8);8))

Мурад, нужно было еще в 1 посте уточнить, что код состоит из фиксированного количества цифр (6+2 или 2+2+2) разделенных точками, да и в названиях специальностей и направлений чисел не встречается
[p.s.]Мурад, посмотри аттач, вдруг пригодится
[/p.s.]

Автор - krosav4ig
Дата добавления - 16.07.2015 в 00:48
Мурад Дата: Четверг, 16.07.2015, 09:42 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
krosav4ig, спасибо! Действительно, код специальности в образовательных учреждениях состоит из формата xxxxxx.xx и xx.xx.xx, но чтобы не размножать темы, решил задать общий вопрос. Как выдергивать цифры (ну и символы непосредственно между цифрами) в порядке чтения слева направо. Тему специально назвал "Извлечение данных числового формата из текста", чтобы натолкнуть вас на универсальное решение этого вопроса. К примеру, из текста "выалповарлпо172.63.182.368.34343434алолаоыловат" вытащить "172.63.182.368.34343434". Если вдруг нужно вытащить IP адрес из текстовой строки, ну и так далее.
В соответствии с примером все решения верны. Поэтому вы сработали отлично :)
 
Ответить
Сообщениеkrosav4ig, спасибо! Действительно, код специальности в образовательных учреждениях состоит из формата xxxxxx.xx и xx.xx.xx, но чтобы не размножать темы, решил задать общий вопрос. Как выдергивать цифры (ну и символы непосредственно между цифрами) в порядке чтения слева направо. Тему специально назвал "Извлечение данных числового формата из текста", чтобы натолкнуть вас на универсальное решение этого вопроса. К примеру, из текста "выалповарлпо172.63.182.368.34343434алолаоыловат" вытащить "172.63.182.368.34343434". Если вдруг нужно вытащить IP адрес из текстовой строки, ну и так далее.
В соответствии с примером все решения верны. Поэтому вы сработали отлично :)

Автор - Мурад
Дата добавления - 16.07.2015 в 09:42
Мурад Дата: Четверг, 16.07.2015, 09:49 | Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
К примеру, чтобы не зависеть от размеров числовых данных в текстовой строке использовать кодировку ASCII, где цифрам от 0 до 9 присвоен код от 48 до 57, ну и у точки тоже есть свой код. Можно ли это использовать, не знаю :)
 
Ответить
СообщениеК примеру, чтобы не зависеть от размеров числовых данных в текстовой строке использовать кодировку ASCII, где цифрам от 0 до 9 присвоен код от 48 до 57, ну и у точки тоже есть свой код. Можно ли это использовать, не знаю :)

Автор - Мурад
Дата добавления - 16.07.2015 в 09:49
vikttur Дата: Четверг, 16.07.2015, 10:00 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Это другая тема.
Чем универсальнее решене, тем больше ненужных в конкретной ситуации вычислений.


Сообщение отредактировал vikttur - Четверг, 16.07.2015, 10:02
 
Ответить
СообщениеЭто другая тема.
Чем универсальнее решене, тем больше ненужных в конкретной ситуации вычислений.

Автор - vikttur
Дата добавления - 16.07.2015 в 10:00
_Boroda_ Дата: Четверг, 16.07.2015, 10:09 | Сообщение № 15
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Мурад, Вы меня разозлили - давайте без обид, но если еще раз вот так "чтобы не размножать темы" от Вас будет вопрос без четкого описания того, что, откуда, куда и по каким условиям нужно и если еще хоть кто-нибудь в Ваших темах напишет что-то типа "нужно было еще в 1 посте уточнить", то я буду лепить Вам замечания. Причину, уж поверьте, я найду - было бы желание.
Вы достаточно грамотный человек, чтобы уметь нормально формулировать свои мысли и достаточно умный, чтобы понимать, что решения некоторых задач занимает довольно много времени, которое многие из нас потратили бы с гораздо большей пользой, чем на ненужные Вам решения Ваших некорректно сформулированных задач.
Если бы у Вас были сложности со связным изложением своих мыслей или было не 240 сообщений, а 5 - я бы к этому отнесся нормально, а так - извините, я предупредил.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМурад, Вы меня разозлили - давайте без обид, но если еще раз вот так "чтобы не размножать темы" от Вас будет вопрос без четкого описания того, что, откуда, куда и по каким условиям нужно и если еще хоть кто-нибудь в Ваших темах напишет что-то типа "нужно было еще в 1 посте уточнить", то я буду лепить Вам замечания. Причину, уж поверьте, я найду - было бы желание.
Вы достаточно грамотный человек, чтобы уметь нормально формулировать свои мысли и достаточно умный, чтобы понимать, что решения некоторых задач занимает довольно много времени, которое многие из нас потратили бы с гораздо большей пользой, чем на ненужные Вам решения Ваших некорректно сформулированных задач.
Если бы у Вас были сложности со связным изложением своих мыслей или было не 240 сообщений, а 5 - я бы к этому отнесся нормально, а так - извините, я предупредил.

Автор - _Boroda_
Дата добавления - 16.07.2015 в 10:09
МВТ Дата: Четверг, 16.07.2015, 18:14 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 137 ±
Замечаний: 0% ±

Excel 2007
Мне кажется, проще будет UDF [vba]
Код
Function GetSpec(S As String) As String
Dim arr
arr = Split(Application.WorksheetFunction.Trim(Replace(Replace(S, "(", ""), ")", "")))
For Each a In arr
     If a Like "#*" Then
         GetSpec = a
         Exit Function
     End If
Next a
End Function
[/vba]
 
Ответить
СообщениеМне кажется, проще будет UDF [vba]
Код
Function GetSpec(S As String) As String
Dim arr
arr = Split(Application.WorksheetFunction.Trim(Replace(Replace(S, "(", ""), ")", "")))
For Each a In arr
     If a Like "#*" Then
         GetSpec = a
         Exit Function
     End If
Next a
End Function
[/vba]

Автор - МВТ
Дата добавления - 16.07.2015 в 18:14
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Извлечение данных числового формата из текста (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!