Оставить в ячейке только числа (удалить весь текст)
Данная команда позволяет массово удалять из текст множества ячеек весь текст кроме чисел:
Чтобы воспользоваться данной командой выделите ячейки с текстом из которых вы хотите удалить текст и оставить числа, перейдите во вкладку «ЁXCEL» Главного меню, нажмите кнопку «Ячейки» и выберите команду «Оставить в ячейке только числа (удалить весь текст)»:
В выделенных ячейках останутся только числа.
Для отмены операции нажмите кнопку отмены:
Добавить комментарий
Содержание
- Как очистить текст в Excel от лишних символов (двойные пробелы и т.д.)?
- Как оставить в ячейке Excel только числа, а весь текст удалить
- Способы удаления текста и сохранения числовой информации
- Первый метод: использование специальной формулы
- Второй метод: использование специального макроса
- Заключение и выводы о процедуре извлечение
- Как удалить буквы, цифры или лишние символы из текста
- Как удалить цифры из текста?
- Как удалить буквы из текста?
- Как удалить лишние символы?
- Как удалить только заданные символы?
- Выборочное удаление символов из ячеек Excel
- Удаление символов из выделенного текста документа Word
- Как в офисе.
- Как удалить цифры из текста?
- Как удалить буквы из текста?
- Как удалить лишние символы?
- Как удалить только заданные символы?
- Выборочное удаление символов из ячеек Excel
- Удаление символов из выделенного текста документа Word
- Другие материалы по теме:
Как очистить текст в Excel от лишних символов (двойные пробелы и т.д.)?
Лишние (они же ненужные) символы — очень растяжимое понятие. В понимании каждого человека и в каждой отдельной ситуации лишними символами могут быть большие множества символов.
- Это могут быть, например, все символы, кроме кириллицы, латиницы и цифр (любая пунктуация)
- лишние пробелы (повторяющиеся между словами и в конце/начале строк)
- табуляция (невидимые пробелы)
- неразрывные пробелы (они же non-breaking space)
- переносы строк внутри ячейки
- в каких-то ситуациях лишними могут быть определенные несколько символов в конце или начале ячейки
- в каких-то пользователю таблиц не нужны никакие цифры и нужно оставить только текст. Или, наоборот, удалить все, кроме цифр (как в случае с номерами телефонов).
- в случаях с email-ами, URL-ами, номерами телефонов в разных форматах — потребуются уже сложнейшие regex-паттерны для извлечения нужных и удаления ненужных символов.
Все очень зависит от того, какие данные содержатся в исходной таблице и каким должен выглядеть идеальный финальный результат.
В зависимости от каждой из этих опций, потребуются разные операции и формулы Excel.
В некоторых нельзя обойтись без сложного кода, написания UDF, использующих синтаксис регулярных выражений (Regexp) или готовых решений, как надстройка !SEMTools.
В соответствующем разделе — удалить лишние символы в ячейках Excel — рассмотрены все возможные ситуации и их решения, в том числе с помощью обычных функций и процедур Excel.
Источник
Как оставить в ячейке Excel только числа, а весь текст удалить
Часто перед пользователями табличного редактора Эксель встает такая задача, когда необходимо удалить всю текстовую информацию в ячейках, а числовые данные оставить. Для осуществления этой процедуры существует множество способов. В статье мы детально разберем каждый метод, позволяющий оставить числа и убрать текст в ячейках.
Способы удаления текста и сохранения числовой информации
Представим, что у нас есть такая информация, располагающаяся в ячейке: «Было доставлено кусков мыла 763шт». Нам необходимо сделать так, чтобы осталось только значение 763 для проведения разнообразных математических операций. Хорошо, если нужно избавиться от текстовых данных только в одной ячейке, тогда можно реализовать удаление ручным способом, но этот вариант не подходит, когда в табличке находится слишком много разной информации. Здесь необходимо применять различные специальные функции табличного редактора.
Первый метод: использование специальной формулы
Для реализации этой процедуры можно применять специальную массивную формулу. Примерная формула выглядит так:
Разберем основные моменты:
- Специальную формулу необходимо вбивать в поле при помощи комбинации кнопок «Ctrl+Shift+Enter».
- Стоит заметить, что в таком виде массивная формула может использоваться только с текстовой информацией, в которой число знаков не больше 99. Для увеличения диапазона нужно, к примеру, заменить параметр «СТРОКА($1:$99)» на «СТРОКА($1:$200)». Иными словами, мы вместо показателя 99 вводим число знаков с запасом. Если ввести слишком большой диапазон, то обработка формулы может занять длительное время.
- Если в текстовых данных числовые значения разбросаны по всему тексту, то формула не сможет правильно обработать информацию.
Детально рассмотрим специальную массивную формулу на таком примере: «Было доставлено кусков мыла 763шт., а заказывали 780»
- В поле А1 располагается сама текстовая информация, из которой мы будем извлекать числовые данные.
- Фрагмент: МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР(А1;СТРОКА($1:$99);1));СТРОКА($1:$99))) позволяет определить позицию 1-го значения в поле. Получаем значение 29.
- Фрагмент: ПРОСМОТР(2;1/ЕЧИСЛО(-ПСТР(А1;СТРОКА($1:$99);1));СТРОКА($1:$99)) позволяет определить позицию последнего значения в поле. Получаем значение 31.
- Мы получаем такую формулу: =ПСТР(А1;29;31-29+1). Оператор ПСТР позволяет извлечь из текстовой информации, указанной 1-м аргументом, начиная с заданной позиции (29) с числом знаков, заданным 3-м аргументом.
- В результате мы получаем:
=ПСТР(А1;29;31-29+1)- =ПСТР(А1;29;2+1)
- =ПСТР(А1;29;3)
- 763
Бывают ситуации обратные, когда нужно реализовать операцию извлечения односоставных текстовых данных, исключив числа.
Нам необходимо сохранить только текстовую информацию.
Специальная формула применяется по аналогичному алгоритму, что и вышерассмотренная. Она выглядит так: =ПСТР(А1;ПОИСК(«-«;А1)+1;ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(—ПСТР(ПСТР(А1;ПОИСК(«-«;А1)+1;999);СТРОКА($1:$99);1));0)-1)
Здесь мы, благодаря фрагменту ПОИСК(«-«;А1) отыскали локацию тире, а затем при помощи оператора ПОИСКПОЗ нашли в извлеченных текстовых данных позицию 1-го числа. Передали эти показатели в оператор ПСТР, который реализовал все дальнейшие преобразования.
Второй метод: использование специального макроса
Эту процедуру можно реализовать при помощи специального макроса, созданного в табличном редакторе Эксель. К примеру, у нас есть табличка, в которой существует колонка с текстовой информацией и числовыми данными. Нам нужно оставить только числовые данные, убрав при этом текст.
В табличном редакторе отсутствует интегрированная функция, поэтому нам необходимо создать такой пользовательский макрос:
Public Function GetNumbers(TargetCell As Range) As String
Dim LenStr As Long
For LenStr = 1 To Len(TargetCell)
Select Case Asc(Mid(TargetCell, LenStr, 1))
GetNumbers = GetNumbers & Mid(TargetCell, LenStr, 1)
Подробная инструкция по созданию пользовательского макроса выглядит так:
- Используя специальную комбинацию клавиш «Alt+F11», производим открытие редактора VBA. Альтернативный вариант – нажать ПКМ по рабочему листу и выбрать элемент «Исходный текст».
- Реализуем создание нового модуля. Для осуществления этой процедуры жмем левой клавишей мышки на элемент, имеющий наименование «Insert», а затем выбираем объект «Module».
- Производим копирование кода, который располагается выше, и вставляем его в созданный модуль. Копирование реализуем при помощи сочетания клавиш «Ctrl+C», а вставку – «Ctrl+V».
- Теперь в необходимой ячейке, в которой мы планируем вывести только числовую информацию, вбиваем такую формулу: =GetNumbers(А1).
- Нам нужно растянуть формулу вниз на все ячейки колонки. Для этого наводим указатель на нижний правый уголок ячейки. Курсор принял форму небольшого плюсика темного цвета. Зажимаем левую клавишу мышки и протягиваем формулу вниз до окончания таблички.
- Готово! Мы реализовали извлечение числовой информации при помощи специального макроса.
Заключение и выводы о процедуре извлечение
Мы выяснили, что существует несколько способов, позволяющих реализовать извлечение числовой информации. Осуществить эту операцию можно при помощи создания специальных макросов в редакторе VBA или же используя массивную формулу. Каждый пользователь может самостоятельно выбрать для себя наиболее удобный способ, который позволит ему убрать текстовую информацию из ячейки и оставить при этом числовые данные.
Источник
Как удалить буквы, цифры или лишние символы из текста
Встречаются задачи, в которых необходимо сделать разделение символов, когда одни символы нужно удалить, а другие оставить, например, удалить любые буквы, оставив только цифры или удалить из текста, написанного кириллицей, все латинские буквы.
Простой способ быстро удалить из текста ячеек рабочего листа Excel буквы, цифры и лишние символы — использовать надстройку для Excel. Все максимально просто, пользователю не нужно писать никаких формул, достаточно задать диапазон ячеек, выбрать определенный набор символов и запустить программу.
Как удалить цифры из текста?
Программа осуществляет перебор символов в каждой ячейке и удаляет из значений ячеек только те символы, которые задал пользователь в диалоговом окне надстройки. Так, чтобы удалить из значений ячеек все цифры, нужно выбрать пункт «Только цифры».
Как удалить буквы из текста?
Чтобы удалить буквы из текста, необходимо в диалоговом окне надстройки выбрать пункт «Любые буквы», при этом в тексте ячеек цифры и знаки остаются, а все буквы, независимо от того русские они или английские, удаляются. Предусмотрено удаление из текста только латиницы (букв латинского алфавита) или только кириллицы (букв русского алфавита).
Как удалить лишние символы?
Для удаления лишних символов, необходимо выбрать пункт «Только знаки», при этом все символы кроме цифр и букв удаляются, но имеется возможность задать символы-исключения, например, чтобы все слова не слились в одну строку, можно установить флажок в поле «а также символы:» и вписать пробел. В поле для символов-исключений можно вписать любой другой символ, либо группу символов, друг за другом без пробелов или других разделителей.
Как удалить только заданные символы?
В случае, если необходимо удалить из значений ячеек отдельные символы из разных групп, предусмотрена возможность перечислить все символы, подлежащие удалению через точку с запятой. Для удаления самого символа «;» (точка с запятой) можно использовать опцию удаления по ASCII-кодам. Например, символу «;» соответствует ASCII-код «59». Эта опция будет также полезна при необходимости удаления непечатаемых символов, например символа перевода на новую строку.
Выборочное удаление символов из ячеек Excel
Надстройка позволяет пользователям в выбранном диапазоне ячеек осуществлять выборочное удаление из значений:
2) цифр и любых символов (кроме букв);
3) любых букв, как русского, так и английского алфавита;
4) любых букв и знаков;
5) любых букв и цифр;
6) только знаков (всех, кроме букв и цифр);
7) только букв кириллицы;
букв кириллицы и знаков;
9) только букв латиницы;
10) букв латинского алфавита и любых знаков;
11) символов, заданных вручную либо по ASCII-кодам.
При удалении группы символов программа позволяет создавать исключения из группы в поле «кроме символов», то есть задавать символы, которые не будут удаляться.
Удаление символов из выделенного текста документа Word
Надстройка дает возможность удалять группы символов в выделенном тексте документа Word:
1) изменять цвет шрифта у заданных символов;
2) удалять заданные символы;
3) создавать исключения из заданной группы символов;
4) осуществлять выбор одной из групп символов (цифры, знаки, буквы латиницы, буквы кириллицы и сочетания этих групп);
Источник
Как в офисе.
Встречаются задачи, в которых необходимо сделать разделение символов, когда одни символы нужно удалить, а другие оставить, например, удалить любые буквы, оставив только цифры или удалить из текста, написанного кириллицей, все латинские буквы.
Простой способ быстро удалить из текста ячеек рабочего листа Excel буквы, цифры и лишние символы — использовать надстройку для Excel. Все максимально просто, пользователю не нужно писать никаких формул, достаточно задать диапазон ячеек, выбрать определенный набор символов и запустить программу.
Как удалить цифры из текста?
Программа осуществляет перебор символов в каждой ячейке и удаляет из значений ячеек только те символы, которые задал пользователь в диалоговом окне надстройки. Так, чтобы удалить из значений ячеек все цифры, нужно выбрать пункт «Только цифры».
Как удалить буквы из текста?
Чтобы удалить буквы из текста, необходимо в диалоговом окне надстройки выбрать пункт «Любые буквы», при этом в тексте ячеек цифры и знаки остаются, а все буквы, независимо от того русские они или английские, удаляются. Предусмотрено удаление из текста только латиницы (букв латинского алфавита) или только кириллицы (букв русского алфавита).
Как удалить лишние символы?
Для удаления лишних символов, необходимо выбрать пункт «Только знаки», при этом все символы кроме цифр и букв удаляются, но имеется возможность задать символы-исключения, например, чтобы все слова не слились в одну строку, можно установить флажок в поле «а также символы:» и вписать пробел. В поле для символов-исключений можно вписать любой другой символ, либо группу символов, друг за другом без пробелов или других разделителей.
Как удалить только заданные символы?
В случае, если необходимо удалить из значений ячеек отдельные символы из разных групп, предусмотрена возможность перечислить все символы, подлежащие удалению через точку с запятой. Для удаления самого символа «;» (точка с запятой) можно использовать опцию удаления по ASCII-кодам. Например, символу «;» соответствует ASCII-код «59». Эта опция будет также полезна при необходимости удаления непечатаемых символов, например символа перевода на новую строку.
Выборочное удаление символов из ячеек Excel
надстройка для выборочного удаления символов из ячеек Excel
Надстройка позволяет пользователям в выбранном диапазоне ячеек осуществлять выборочное удаление из значений:
2) цифр и любых символов (кроме букв);
3) любых букв, как русского, так и английского алфавита;
4) любых букв и знаков;
5) любых букв и цифр;
6) только знаков (всех, кроме букв и цифр);
7) только букв кириллицы;
букв кириллицы и знаков;
9) только букв латиницы;
10) букв латинского алфавита и любых знаков;
11) символов, заданных вручную либо по ASCII-кодам.
При удалении группы символов программа позволяет создавать исключения из группы в поле «кроме символов», то есть задавать символы, которые не будут удаляться.
Удаление символов из выделенного текста документа Word
надстройка для выборочного удаления символов из текста Word
Надстройка дает возможность удалять группы символов в выделенном тексте документа Word:
1) изменять цвет шрифта у заданных символов;
2) удалять заданные символы;
3) создавать исключения из заданной группы символов;
4) осуществлять выбор одной из групп символов (цифры, знаки, буквы латиницы, буквы кириллицы и сочетания этих групп);
5) задавать символы вручную;
6) задавать ASCII-коды символов.
Другие материалы по теме:
Источник
Как в Excel удалить из телефонного номера все лишние знаки? Такие как: точка, дефис, кавычки и так далее.
ReinRaus
17.6k3 золотых знака43 серебряных знака84 бронзовых знака
задан 15 июн 2015 в 11:02
Предполагая что номер лежит в A1 (упоминается в двух местах):
=SUMPRODUCT(MID(0&A1,LARGE(INDEX(ISNUMBER(--MID(A1,ROW($1:$25),1))
*ROW($1:$25),0),ROW($1:$25))+1,1)*10^ROW($1:$25)/10)
Честно украдено с How do I strip out all non-numeric characters?
На русском (не проверял, перевел по таблице):
=СУММПРОИЗВ(ПСТР(0&A1,НАИБОЛЬШИЙ(ИНДЕКС(ЕЧИСЛО(--ПСТР(A1,СТРОКА($1:$25),1))
*СТРОКА($1:$25),0),СТРОКА($1:$25))+1,1)*10^СТРОКА($1:$25)/10)
ответ дан 15 июн 2015 в 12:20
1
Если число «лишних» символов ограничено, то можно использовать много вложенных «поставить» в формуле:
подставить( подставить(текст, ".", ""), "-", "" )
и так далее. Сколько символов, столько и «подставить».
Если нужно удалить все, кроме цифр, то помогут только макросы.
Внутри макроса как вариант можно использовать регулярные выражения:
dim re as New RegExp
re.Pattern = "\D"
re.replace( text, "" )
ответ дан 15 июн 2015 в 11:23
ReinRausReinRaus
17.6k3 золотых знака43 серебряных знака84 бронзовых знака
Часто перед пользователями табличного редактора Эксель встает такая задача, когда необходимо удалить всю текстовую информацию в ячейках, а числовые данные оставить. Для осуществления этой процедуры существует множество способов. В статье мы детально разберем каждый метод, позволяющий оставить числа и убрать текст в ячейках.
Содержание
- Способы удаления текста и сохранения числовой информации
- Первый метод: использование специальной формулы
- Второй метод: использование специального макроса
- Заключение и выводы о процедуре извлечение
Способы удаления текста и сохранения числовой информации
Представим, что у нас есть такая информация, располагающаяся в ячейке: «Было доставлено кусков мыла 763шт». Нам необходимо сделать так, чтобы осталось только значение 763 для проведения разнообразных математических операций. Хорошо, если нужно избавиться от текстовых данных только в одной ячейке, тогда можно реализовать удаление ручным способом, но этот вариант не подходит, когда в табличке находится слишком много разной информации. Здесь необходимо применять различные специальные функции табличного редактора.
Первый метод: использование специальной формулы
Для реализации этой процедуры можно применять специальную массивную формулу. Примерная формула выглядит так:
=ПСТР(A1;МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР(А1;СТРОКА($1:$99);1));СТРОКА($1:$99)));ПРОСМОТР(2;1/ЕЧИСЛО(-ПСТР(А1;СТРОКА($1:$99);1));СТРОКА($1:$99))-МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР(А1;СТРОКА($1:$99);1));СТРОКА($1:$99)))+1)
Разберем основные моменты:
- Специальную формулу необходимо вбивать в поле при помощи комбинации кнопок «Ctrl+Shift+Enter».
- Стоит заметить, что в таком виде массивная формула может использоваться только с текстовой информацией, в которой число знаков не больше 99. Для увеличения диапазона нужно, к примеру, заменить параметр «СТРОКА($1:$99)» на «СТРОКА($1:$200)». Иными словами, мы вместо показателя 99 вводим число знаков с запасом. Если ввести слишком большой диапазон, то обработка формулы может занять длительное время.
- Если в текстовых данных числовые значения разбросаны по всему тексту, то формула не сможет правильно обработать информацию.
Детально рассмотрим специальную массивную формулу на таком примере: «Было доставлено кусков мыла 763шт., а заказывали 780»
- В поле А1 располагается сама текстовая информация, из которой мы будем извлекать числовые данные.
- Фрагмент: МИН(ЕСЛИ(ЕЧИСЛО(-ПСТР(А1;СТРОКА($1:$99);1));СТРОКА($1:$99))) позволяет определить позицию 1-го значения в поле. Получаем значение 29.
- Фрагмент: ПРОСМОТР(2;1/ЕЧИСЛО(-ПСТР(А1;СТРОКА($1:$99);1));СТРОКА($1:$99)) позволяет определить позицию последнего значения в поле. Получаем значение 31.
- Мы получаем такую формулу: =ПСТР(А1;29;31-29+1). Оператор ПСТР позволяет извлечь из текстовой информации, указанной 1-м аргументом, начиная с заданной позиции (29) с числом знаков, заданным 3-м аргументом.
- В результате мы получаем:
=ПСТР(А1;29;31-29+1)- =ПСТР(А1;29;2+1)
- =ПСТР(А1;29;3)
- 763
Бывают ситуации обратные, когда нужно реализовать операцию извлечения односоставных текстовых данных, исключив числа.
Нам необходимо сохранить только текстовую информацию.
Специальная формула применяется по аналогичному алгоритму, что и вышерассмотренная. Она выглядит так: =ПСТР(А1;ПОИСК(«-«;А1)+1;ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(—ПСТР(ПСТР(А1;ПОИСК(«-«;А1)+1;999);СТРОКА($1:$99);1));0)-1)
Здесь мы, благодаря фрагменту ПОИСК(«-«;А1) отыскали локацию тире, а затем при помощи оператора ПОИСКПОЗ нашли в извлеченных текстовых данных позицию 1-го числа. Передали эти показатели в оператор ПСТР, который реализовал все дальнейшие преобразования.
Второй метод: использование специального макроса
Эту процедуру можно реализовать при помощи специального макроса, созданного в табличном редакторе Эксель. К примеру, у нас есть табличка, в которой существует колонка с текстовой информацией и числовыми данными. Нам нужно оставить только числовые данные, убрав при этом текст.
В табличном редакторе отсутствует интегрированная функция, поэтому нам необходимо создать такой пользовательский макрос:
Public Function GetNumbers(TargetCell As Range) As String
Dim LenStr As Long
For LenStr = 1 To Len(TargetCell)
Select Case Asc(Mid(TargetCell, LenStr, 1))
Case 48 To 57
GetNumbers = GetNumbers & Mid(TargetCell, LenStr, 1)
End Select
Next
End Function
Подробная инструкция по созданию пользовательского макроса выглядит так:
- Используя специальную комбинацию клавиш «Alt+F11», производим открытие редактора VBA. Альтернативный вариант – нажать ПКМ по рабочему листу и выбрать элемент «Исходный текст».
- Реализуем создание нового модуля. Для осуществления этой процедуры жмем левой клавишей мышки на элемент, имеющий наименование «Insert», а затем выбираем объект «Module».
- Производим копирование кода, который располагается выше, и вставляем его в созданный модуль. Копирование реализуем при помощи сочетания клавиш «Ctrl+C», а вставку – «Ctrl+V».
- Теперь в необходимой ячейке, в которой мы планируем вывести только числовую информацию, вбиваем такую формулу: =GetNumbers(А1).
- Нам нужно растянуть формулу вниз на все ячейки колонки. Для этого наводим указатель на нижний правый уголок ячейки. Курсор принял форму небольшого плюсика темного цвета. Зажимаем левую клавишу мышки и протягиваем формулу вниз до окончания таблички.
- Готово! Мы реализовали извлечение числовой информации при помощи специального макроса.
Заключение и выводы о процедуре извлечение
Мы выяснили, что существует несколько способов, позволяющих реализовать извлечение числовой информации. Осуществить эту операцию можно при помощи создания специальных макросов в редакторе VBA или же используя массивную формулу. Каждый пользователь может самостоятельно выбрать для себя наиболее удобный способ, который позволит ему убрать текстовую информацию из ячейки и оставить при этом числовые данные.
Оцените качество статьи. Нам важно ваше мнение:
Добрый день! |
|
skais675 Пользователь Сообщений: 2178 |
#2 28.05.2019 09:39:49 Отсюда
Изменено: skais675 — 28.05.2019 09:43:38 Мой канал |
||
Aleksey1107 Пользователь Сообщений: 363 Excel 365 |
Добрый день! Почитайте здесь |
bedvit Пользователь Сообщений: 2477 Виталий |
#5 29.05.2019 12:56:59 Нашел свою реализацию (немного подправил, версия от сегодняшнего числа). До двух раз быстрее на длинных строках и смешанном тексте (в сравнении с кодом, пост2). Выкладываю код и тест.
Прикрепленные файлы
Изменено: bedvit — 29.05.2019 13:09:29 «Бритва Оккама» или «Принцип Калашникова»? |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
bedvit, отличная функция, но для того, чтобы оставить кириллицу нужно что-то с ней сделать, т.к. преобразует в байты на 176 позиций назад и «разделяет» через 4, а не 0. То есть: ВАСЯ это не 194/0/192/0/209/0/223/0, а 18/4/16/4/33/4/47/4 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Ігор Гончаренко Пользователь Сообщений: 13746 |
#7 23.07.2019 15:46:08 RegExp с маской «D+» будет удалять символы не по одному, а группами, что существенно резвее
Изменено: Ігор Гончаренко — 23.07.2019 16:08:35 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
bedvit Пользователь Сообщений: 2477 Виталий |
Jack Famous, мой код делает именно то, что нужно было по теме. Если отбирать только кириллицу, нужно изменить в макросе коды нужных знаков Юникода . Помним, про «Ё». «Бритва Оккама» или «Принцип Калашникова»? |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#9 23.07.2019 16:08:53 Доброе время суток.
Протестировал на строке из 40 387 200 символов. Длина строки результата 301 800 (цифры только). |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
bedvit, я пока всё-равно остановился на регулярках, т.к. и быстрее и передавать аргумент (маску) проще и понятнее, НО серьёзно удивился способу формирования одномерного байтового массива напрямую arr() As Byte=txt$ и обратно (строки из массива) — очень круто Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
sokol92 Пользователь Сообщений: 4446 |
#11 23.07.2019 16:27:08
Рекомендовано разработчиком. Владимир |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
sokol92, спасибо Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
bedvit Пользователь Сообщений: 2477 Виталий |
Jack Famous, спасибо, пользуйтесь. Изменено: bedvit — 23.07.2019 18:07:22 «Бритва Оккама» или «Принцип Калашникова»? |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#14 23.07.2019 20:53:20
Привет, Виталий.
Тестовый файл и код прикладываю. longText.zip в формате 7z (к сожалению форум не позволяет прикладывать архивы таком формате).
Прикрепленные файлы
|
|||||||
bedvit Пользователь Сообщений: 2477 Виталий |
По DigitsXLL понятно, это функция листа, в ячейку больше 32 тысяч не лезет. Сразу не сообразил. Что хотим потестировать? «Бритва Оккама» или «Принцип Калашникова»? |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#16 24.07.2019 08:57:32
Виталий, я максимум на Net. Вечером слеплю в ExcelDNA многопоточную версию для функции рабочего листа, протестирую. |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
bedvit, да — я понял, что с цифрами всё ОК, но вот дальше всё-равно не догоняю… В таблице (по вашей ссылке) Кириллица такая: 1025(Ё), 1040(А) — 1103(я), 1105(ё) Где тут логика и как поступать??? Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
bedvit Пользователь Сообщений: 2477 Виталий |
Jack Famous, здесь по-моему неплохо про это написано. Изменено: bedvit — 24.07.2019 12:47:14 «Бритва Оккама» или «Принцип Калашникова»? |
bedvit Пользователь Сообщений: 2477 Виталий |
Jack Famous, Вот здесь , я уже писал на этом форуме код, в такой же парадигме, для кириллицы. «Бритва Оккама» или «Принцип Калашникова»? |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
bedvit, и это никак не объясняет, откуда вы взяли 15, 80 и 81… С тем, как вы определяете кириллицу по разделителю «4» мне ясно, с 32 понятно — это код пробела при разделителе «0», но откуда остальные??? В таблице Юникода я что-то не то увидел… Изменено: Jack Famous — 24.07.2019 14:12:04 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
bedvit Пользователь Сообщений: 2477 Виталий |
Jack Famous, прочитали инфо по ссылке в посте 18? «Бритва Оккама» или «Принцип Калашникова»? |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
bedvit, нет)) я, балбес, признаю — не увидел Спасибо большое UPD: итак, в таблице Юникод коды символов совпадают с таблицей в Excel (через =СИМВОЛ() или =Chr() в VBA) с 1 по 126, дальше пляска пошла))) Пока не могу только понять, как именно из них получить 16/4 или наоборот UPD2: всё — я понял калькулятором или функциями перегонять — всё равно непонятно Изменено: Jack Famous — 24.07.2019 16:11:51 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
bedvit Пользователь Сообщений: 2477 Виталий |
#23 24.07.2019 18:28:55
1.Тест на 32767 знаков в каждой ячейке, на 1 млн. ячеек в Excel — 9 сек. (тест прилагаю, нужно открыть текст, нужной разрядности XLL, запустить)
Net time: 1130,113 мсек; digits count: 1299456; all count: 43895808 С++
digits count: 43895808 В Шарпе неудобно работать со строками, их нельзя изменять (при изменении, по факту, создается новая строка. Есть структура, где все же можно — System.Text.StringBuilder, но как видим работает «оно» медленно) Прикрепленные файлы
Изменено: bedvit — 24.07.2019 19:30:28 «Бритва Оккама» или «Принцип Калашникова»? |
||||
manat78 Пользователь Сообщений: 110 |
может как идея создать переменную (1)=»0123456789″ и потом каждый символ в тестируемом значении проверять на наличие в этой переменной (1) и если есть то сувать в еще одну переменную (2). и в конце менять значение на переменнную (2). незнаю на сколько это быстро будет))) |
sokol92 Пользователь Сообщений: 4446 |
#25 24.07.2019 20:26:45
В VBA (кроме, естественно, вызова функций рабочего листа) есть «родная» функция Hex для перевода из 10-тичной системы в 16-ричную. Для обратного перевода можно «схимичить», как указано ниже:
8-ричной системой ни разу в жизни в Excel не пользовался. Изменено: sokol92 — 24.07.2019 20:28:12 Владимир |
||||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#26 25.07.2019 08:36:08 sokol92, за функции спасибо — почти уверен, что они быстрее функций листа
но именно такая (кажется) получается при передаче строки байтному массиву Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
bedvit Пользователь Сообщений: 2477 Виталий |
#27 25.07.2019 14:18:10 Андрей VG, Андрей, можно еще немножко ускорить код на C#.NET, если перейти на указатели и небезопасный код (Unsafe code). см. вариант 4.
V1-Net time: 1079,1079 мсек; digits count: 1299456; all count: 43895808 Изменено: bedvit — 25.07.2019 15:13:42 «Бритва Оккама» или «Принцип Калашникова»? |
|
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#28 25.07.2019 21:44:16 Привет, Виталий.
Твой С++ вне сомнения лучший, причём деградирует заметно медленнее. RegEx на 1000000 строк минут 9 молотил, твой секунд за 30 справился — точно не засекал. Изменено: Андрей VG — 25.07.2019 21:45:32 |
||
bedvit Пользователь Сообщений: 2477 Виталий |
Андрей, спасибо за исследования! А DigitOnly — это код Игоря Гончаренко — выходит самый быстрый на VBA. Опять же с помощью сторонних библ. В теории я могу подлючить свою СОМ-библиотеку и обогнать в VBA — стандартную. Далее мой код на VBA, выходит 25 сек. без сторонних библиотек. Неплохо, но с библиотеками все же лучше. Считаю нужно все использовать, если есть возможность. По XLL — для интереса, возьми вариант 4 — на шарпе самый быстрый, не сильно уступает С++, заверни его в ExcelDNA. Предполагаю, отставание раза в два-пять всего лишь будет от С++. здесь и здесь . Изменено: bedvit — 25.07.2019 23:35:31 «Бритва Оккама» или «Принцип Калашникова»? |
Inexsu Пользователь Сообщений: 758 |
#30 25.07.2019 23:58:45 Привет!
Не забыли про
? Сравнение прайсов, таблиц — без настроек |
||||