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

Вход

Регистрация

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

 

= Мир MS Excel/цифры из текста - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин  
цифры из текста
Любите ли Вы РЖД так, как люблю его я?
_Boroda_ Дата: Среда, 04.09.2013, 16:23 | Сообщение № 1
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Понадобилось мне тут недавно найти номер вагона в произвольном тексте. Как-то, не особо раздумывая (как всегда, все нужно было сделать еще вчера), написался монстр в 343 символа.
В общем, задачка понравилась. Потому сюда и кладу.

Условия:
В ячейке с текстом может быть только одно "слово", состоящее из 8-и цифр. Его-то и нужно вытащить. Остальные слова или не из 8-и цифр, или там есть еще и буквы.
Текст может быть произвольный с любыми буквами, цифрами, знаками и их сочетаниями. Единственное ограничение - в ячейке не могут быть только цифры.
Для 2007.
К сообщению приложен файл: Vopros_3.xls (38.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Среда, 04.09.2013, 16:23
 
Ответить
СообщениеПонадобилось мне тут недавно найти номер вагона в произвольном тексте. Как-то, не особо раздумывая (как всегда, все нужно было сделать еще вчера), написался монстр в 343 символа.
В общем, задачка понравилась. Потому сюда и кладу.

Условия:
В ячейке с текстом может быть только одно "слово", состоящее из 8-и цифр. Его-то и нужно вытащить. Остальные слова или не из 8-и цифр, или там есть еще и буквы.
Текст может быть произвольный с любыми буквами, цифрами, знаками и их сочетаниями. Единственное ограничение - в ячейке не могут быть только цифры.
Для 2007.

Автор - _Boroda_
Дата добавления - 04.09.2013 в 16:23
MCH Дата: Среда, 04.09.2013, 17:14 | Сообщение № 2
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Поразумевается, что слово - это то что отделено пробелами?
разделители: точки, запятые и др. не применяются? (хотя в примере перенос строки - является разделителем)
 
Ответить
СообщениеПоразумевается, что слово - это то что отделено пробелами?
разделители: точки, запятые и др. не применяются? (хотя в примере перенос строки - является разделителем)

Автор - MCH
Дата добавления - 04.09.2013 в 17:14
MCH Дата: Среда, 04.09.2013, 17:25 | Сообщение № 3
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Вне конкурса, UDF:
[vba]
Код
Function Num8$(ByVal txt$)
     Dim i&, m$, s$
     txt = txt & " "
     For i = 1 To Len(txt)
         m = Mid$(txt, i, 1)
         If m Like "[A-Za-zА-Яа-яЁё0-9]" Then
             s = s & m
         Else
             If s Like "########" Then Num8 = s: Exit Function
             s = ""
         End If
     Next
End Function
[/vba]
 
Ответить
СообщениеВне конкурса, UDF:
[vba]
Код
Function Num8$(ByVal txt$)
     Dim i&, m$, s$
     txt = txt & " "
     For i = 1 To Len(txt)
         m = Mid$(txt, i, 1)
         If m Like "[A-Za-zА-Яа-яЁё0-9]" Then
             s = s & m
         Else
             If s Like "########" Then Num8 = s: Exit Function
             s = ""
         End If
     Next
End Function
[/vba]

Автор - MCH
Дата добавления - 04.09.2013 в 17:25
_Boroda_ Дата: Среда, 04.09.2013, 17:35 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Поразумевается, что слово - это то что отделено пробелами?

Да. Пробелами и/или абзацем


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Среда, 04.09.2013, 17:35
 
Ответить
Сообщение
Поразумевается, что слово - это то что отделено пробелами?

Да. Пробелами и/или абзацем

Автор - _Boroda_
Дата добавления - 04.09.2013 в 17:35
MCH Дата: Среда, 04.09.2013, 17:56 | Сообщение № 5
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Цитата (_Boroda_, Среда, 04.09.2013, 17:35 # 4)
Да. Пробелами и/или абзацем

155


Сообщение отредактировал MCH - Среда, 04.09.2013, 17:58
 
Ответить
Сообщение
Цитата (_Boroda_, Среда, 04.09.2013, 17:35 # 4)
Да. Пробелами и/или абзацем

155

Автор - MCH
Дата добавления - 04.09.2013 в 17:56
_Boroda_ Дата: Вторник, 10.09.2013, 22:29 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

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


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Вторник, 10.09.2013, 22:31
 
Ответить
СообщениеУ Михаила очень хорошая формула получилась. По сути, очень похожа на моего монстра, но я многое не "ужал", а он очень хорошо написал, мне понравилось. Нужно будет на работе показать и сказать при этом что-то типа того, что когда стоите у меня за спиной и подгоняете, то вот так получается, а когда даете спокойно подумать, то вот так.
Михаил, показывай. Судя по всему, вариантов больше не будет.
И, конечно, в репу получай.

Автор - _Boroda_
Дата добавления - 10.09.2013 в 22:29
ZORRO2005 Дата: Среда, 11.09.2013, 00:09 | Сообщение № 7
Группа: Друзья
Ранг: Обитатель
Сообщений: 382
Репутация: 148 ±
Замечаний: 0% ±

Excel2010
Подождите, не выкладывайте!
Только увидел тему B)
 
Ответить
СообщениеПодождите, не выкладывайте!
Только увидел тему B)

Автор - ZORRO2005
Дата добавления - 11.09.2013 в 00:09
MCH Дата: Среда, 11.09.2013, 18:18 | Сообщение № 8
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Если задача кажется сложной, то предлагаю решить вначале часть задачи.
Как проверить что в ячейке A1 находится восьмизначное число?
нужно чтобы формула возвращала ИСТИНА, если в A1 восьмизначное число и ЛОЖЬ в других случаях (дробное, семизначное, девятизначное, ноль, отрицательное, текст, дата и т.п.)

Есть вариант в 35 знаков (с "=")
 
Ответить
СообщениеЕсли задача кажется сложной, то предлагаю решить вначале часть задачи.
Как проверить что в ячейке A1 находится восьмизначное число?
нужно чтобы формула возвращала ИСТИНА, если в A1 восьмизначное число и ЛОЖЬ в других случаях (дробное, семизначное, девятизначное, ноль, отрицательное, текст, дата и т.п.)

Есть вариант в 35 знаков (с "=")

Автор - MCH
Дата добавления - 11.09.2013 в 18:18
Michael_S Дата: Среда, 11.09.2013, 18:30 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
00000001 -восьмизначное?
 
Ответить
Сообщение00000001 -восьмизначное?

Автор - Michael_S
Дата добавления - 11.09.2013 в 18:30
MCH Дата: Среда, 11.09.2013, 19:01 | Сообщение № 10
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Если в ячейке текстом написано "00000001", то считаем что это восьмизначное число (в рамках текущей задачи), если просто единица, то нет
 
Ответить
СообщениеЕсли в ячейке текстом написано "00000001", то считаем что это восьмизначное число (в рамках текущей задачи), если просто единица, то нет

Автор - MCH
Дата добавления - 11.09.2013 в 19:01
Michael_S Дата: Среда, 11.09.2013, 22:12 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
тогда 34. вместе с "=".
хотя нет - не до конца условия прочитал. может и выйдет 34, но не в этот раз.


Сообщение отредактировал Michael_S - Среда, 11.09.2013, 22:15
 
Ответить
Сообщениетогда 34. вместе с "=".
хотя нет - не до конца условия прочитал. может и выйдет 34, но не в этот раз.

Автор - Michael_S
Дата добавления - 11.09.2013 в 22:12
Renat_excel Дата: Четверг, 12.09.2013, 18:02 | Сообщение № 12
Группа: Проверенные
Ранг: Прохожий
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Получилось решить всю задачу с помощью формулы массива. 533 символа)
К сообщению приложен файл: 7100011.xls (40.0 Kb)
 
Ответить
СообщениеПолучилось решить всю задачу с помощью формулы массива. 533 символа)

Автор - Renat_excel
Дата добавления - 12.09.2013 в 18:02
MCH Дата: Четверг, 12.09.2013, 18:34 | Сообщение № 13
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Renat_excel, по вашей формуле:
Работает только в 2007 и выше
Не извлекает 10000000 (легко правится)
не извлекает номера начинающиеся с нулей например, "00000001", но в условиях об этом не сказано, нужно извлекать или нет
если есть два восьмизначных числа, то извлекает их сумму, в условиях тоже не сказано бывают такие ситуации или нет
Если в конце текста будет слово "2e7" или "3e7" или в тексте будет слово 3,1416e7, то вернет 20000000, 30000000, 31416000 соответственно (маловероятно для данной задачи)

Длинновато получилось, для КОДСИМВ(), например, не нужен ЛЕВСИМВ(), он и так вернет код первой буквы
 
Ответить
СообщениеRenat_excel, по вашей формуле:
Работает только в 2007 и выше
Не извлекает 10000000 (легко правится)
не извлекает номера начинающиеся с нулей например, "00000001", но в условиях об этом не сказано, нужно извлекать или нет
если есть два восьмизначных числа, то извлекает их сумму, в условиях тоже не сказано бывают такие ситуации или нет
Если в конце текста будет слово "2e7" или "3e7" или в тексте будет слово 3,1416e7, то вернет 20000000, 30000000, 31416000 соответственно (маловероятно для данной задачи)

Длинновато получилось, для КОДСИМВ(), например, не нужен ЛЕВСИМВ(), он и так вернет код первой буквы

Автор - MCH
Дата добавления - 12.09.2013 в 18:34
Renat_excel Дата: Четверг, 12.09.2013, 19:48 | Сообщение № 14
Группа: Проверенные
Ранг: Прохожий
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
MCH, спасибо за комментарии. Делал в конце рабочего дня, поэтому, наверняка, есть пути оптимизации кода)
 
Ответить
СообщениеMCH, спасибо за комментарии. Делал в конце рабочего дня, поэтому, наверняка, есть пути оптимизации кода)

Автор - Renat_excel
Дата добавления - 12.09.2013 в 19:48
_Boroda_ Дата: Четверг, 12.09.2013, 20:19 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Миш, все сказано. Смотри цитаты
номера начинающиеся с нулей например, "00000001", но в условиях об этом не сказано, нужно извлекать или нет

Цитата (_Boroda_, Среда, 04.09.2013, 16:23 # 1)
Текст может быть произвольный с любыми буквами, цифрами, знаками и их сочетаниями

если есть два восьмизначных числа ... в условиях тоже не сказано бывают такие ситуации или нет

Цитата (_Boroda_, Среда, 04.09.2013, 16:23 # 1)
В ячейке с текстом может быть только одно "слово", состоящее из 8-и цифр


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Четверг, 12.09.2013, 20:20
 
Ответить
СообщениеМиш, все сказано. Смотри цитаты
номера начинающиеся с нулей например, "00000001", но в условиях об этом не сказано, нужно извлекать или нет

Цитата (_Boroda_, Среда, 04.09.2013, 16:23 # 1)
Текст может быть произвольный с любыми буквами, цифрами, знаками и их сочетаниями

если есть два восьмизначных числа ... в условиях тоже не сказано бывают такие ситуации или нет

Цитата (_Boroda_, Среда, 04.09.2013, 16:23 # 1)
В ячейке с текстом может быть только одно "слово", состоящее из 8-и цифр

Автор - _Boroda_
Дата добавления - 12.09.2013 в 20:19
Serge_007 Дата: Четверг, 12.09.2013, 21:55 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (Renat_excel, Четверг, 12.09.2013, 18:02 # 12)
Получилось решить всю задачу с помощью формулы массива
Задачу решить не сложно, сложно уложиться в
155
знаков. И да,
Цитата (Renat_excel, Четверг, 12.09.2013, 19:48 # 14)
есть пути оптимизации кода


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (Renat_excel, Четверг, 12.09.2013, 18:02 # 12)
Получилось решить всю задачу с помощью формулы массива
Задачу решить не сложно, сложно уложиться в
155
знаков. И да,
Цитата (Renat_excel, Четверг, 12.09.2013, 19:48 # 14)
есть пути оптимизации кода

Автор - Serge_007
Дата добавления - 12.09.2013 в 21:55
ZORRO2005 Дата: Суббота, 14.09.2013, 23:59 | Сообщение № 17
Группа: Друзья
Ранг: Обитатель
Сообщений: 382
Репутация: 148 ±
Замечаний: 0% ±

Excel2010
У меня получилось 151


Сообщение отредактировал ZORRO2005 - Воскресенье, 15.09.2013, 00:14
 
Ответить
СообщениеУ меня получилось 151

Автор - ZORRO2005
Дата добавления - 14.09.2013 в 23:59
MCH Дата: Воскресенье, 15.09.2013, 09:46 | Сообщение № 18
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

146 (с "=")
 
Ответить
Сообщение146 (с "=")

Автор - MCH
Дата добавления - 15.09.2013 в 09:46
ZORRO2005 Дата: Воскресенье, 15.09.2013, 13:46 | Сообщение № 19
Группа: Друзья
Ранг: Обитатель
Сообщений: 382
Репутация: 148 ±
Замечаний: 0% ±

Excel2010
Все-таки 218, а не 151
Код
=ПРОСМОТР(9^9;--ПСТР(" "&ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"Z");":";"Z");СИМВОЛ(10);" ")&" ";ПОИСК(" ???????? ";" "&ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"Z");":";"Z");СИМВОЛ(10);" ")&" ";СТРОКА($1:$500))+1;8))

Вариант ниже сработает, но он не чистый.
Код
=ПРОСМОТР(9^9;--ПСТР(" "&A2&" ";ПОИСК(" ???????? ";" "&ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"Z");":";"Z");СИМВОЛ(10);" ")&" ";СТРОКА($1:$500))+1;8))
 
Ответить
СообщениеВсе-таки 218, а не 151
Код
=ПРОСМОТР(9^9;--ПСТР(" "&ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"Z");":";"Z");СИМВОЛ(10);" ")&" ";ПОИСК(" ???????? ";" "&ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"Z");":";"Z");СИМВОЛ(10);" ")&" ";СТРОКА($1:$500))+1;8))

Вариант ниже сработает, но он не чистый.
Код
=ПРОСМОТР(9^9;--ПСТР(" "&A2&" ";ПОИСК(" ???????? ";" "&ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"Z");":";"Z");СИМВОЛ(10);" ")&" ";СТРОКА($1:$500))+1;8))

Автор - ZORRO2005
Дата добавления - 15.09.2013 в 13:46
Serge_007 Дата: Воскресенье, 15.09.2013, 17:20 | Сообщение № 20
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Глядя на Серегины решения, сваял формулу тоже с нарушением всех правил :)
На 108 знаков
Подробно не тестировал (времени особо нет), но на вложении отрабатывает правильно

Хотя пожалуй вообще формула правильная. Попробовал все возможные позиции расположения искомого - работает верно. Пробовал менять местами время и искомое - тоже правильно. Короче вечером еще потестирую, потом напишу

Нашел одну недоработку. Исправил - 126 знаков (если предположить что номер вагона может быть действительно из любых сочетаний цифр, например даже такой "00000000")


ЮMoney:41001419691823 | WMR:126292472390


Сообщение отредактировал Serge_007 - Воскресенье, 15.09.2013, 18:00
 
Ответить
СообщениеГлядя на Серегины решения, сваял формулу тоже с нарушением всех правил :)
На 108 знаков
Подробно не тестировал (времени особо нет), но на вложении отрабатывает правильно

Хотя пожалуй вообще формула правильная. Попробовал все возможные позиции расположения искомого - работает верно. Пробовал менять местами время и искомое - тоже правильно. Короче вечером еще потестирую, потом напишу

Нашел одну недоработку. Исправил - 126 знаков (если предположить что номер вагона может быть действительно из любых сочетаний цифр, например даже такой "00000000")

Автор - Serge_007
Дата добавления - 15.09.2013 в 17:20
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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