Как удалить все символы кроме цифр в excel формула

Как в Excel удалить из телефонного номера все лишние знаки? Такие как: точка, дефис, кавычки и так далее.

ReinRaus's user avatar

ReinRaus

17.6k3 золотых знака43 серебряных знака84 бронзовых знака

задан 15 июн 2015 в 11:02

spoilt's user avatar

Предполагая что номер лежит в 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

ReinRaus's user avatar

ReinRausReinRaus

17.6k3 золотых знака43 серебряных знака84 бронзовых знака

  • Удалить символы * и ?
  • Удалить символы по их типу
    • Удалить все, кроме букв и цифр (удалить пунктуацию)
    • Лишние пробелы
    • Лишние символы справа / слева
    • Цифры
    • Буквы, латиница, кириллица
  • Удалить всё, кроме…
    • Удалить все, кроме цифр (извлечь цифры)
    • Удалить все, кроме букв (извлечь буквы)
    • Другое
  • Другие операции с символами в Excel

Когда меня спрашивают, как удалить в Excel лишние символы, я не могу не задать ряд встречных вопросов:

  1. Что послужило причиной называть их лишними и избавиться от них?
  2. Что конкретно подразумевает процедура удаления? Мы будем непременно удалять их или заменим символы на какие-то другие, или, может быть, перенесем в другой столбец?
  3. Точно ли имеет смысл удалять сами символы? Может быть, стоит удалить из текста слова, в которых они содержатся? Или и вовсе содержимое ячеек целиком?
  4. Не проще ли вместо удаления этих символов рассматривать такую операцию, как извлечение из текста определенных символов кроме этих, удаляемых?

В зависимости от ответов на эти вопросы решений может быть много и разных. Где-то можно обойтись простейшими функциями, где-то подключить регулярные выражения, а где-то и вовсе понадобятся готовые программные решения. Итак, по порядку.

Удалить символы * и ?

См. Подстановочные символы в Excel.

Удалить символы по их типу

MS Excel не предлагает удаление символьных множеств по их признаку, единственной процедурой для удаления всегда остается “найти и заменить”, позволяющая удалять один символ или подстроку за раз. Но, если приложить некоторые усилия, все возможно.

Удалить все, кроме букв и цифр (удалить пунктуацию)

Удалить все символы, кроме букв и цифр, а иначе говоря, пунктуацию, — нетривиальная задача, ведь таких символов могут быть сотни! Но и она решается — смотрите статью на эту тему.

Лишние пробелы

Наиболее часто ненужными считаются повторяющиеся пробелы между словами или пробелы в конце и начале ячейки. Как убрать их, можно узнать из этой статьи.

Лишние символы справа / слева

Кто-то видит лишними символы справа или слева от основного текста в ячейке, желая отрезать их от него по позиции или по определенной границе. О том, как удалить N символов с начала или с конца каждой ячейки, читайте в этой статье.

В случае если границей является определенный символ и нужно удалить всё, что перед ним, поможет вот этот текст.

Цифры

Бывает, что ненужными символами становятся цифры, которых десять, и хочется более быстрый способ, чем очищать строки от них методом замены на пустоту. Как удалить цифры из текста в ячейках — этот раздел даст ответ на вопрос.

Буквы, латиница, кириллица

Аналогично сложно удалить разом все буквы алфавита, которых 26 или 33 в случае с английскими и русскими символами соответственно. О том, как удалить латиницу в Excel, читайте в моем гайдлайне.

Удалить всё, кроме…

Часты случаи, когда лишними считаются вообще все символы, кроме определенных. Тут речь уже больше об извлечении нужных символов, а не об удалении ненужных.

Удалить все, кроме цифр (извлечь цифры)

Номера телефонов, почтовые коды, числовые артикулы, IP адреса… Иногда проблемой является наличие в ячейках других символов, помимо цифр. Читайте об этом: Удалить всё, кроме цифр в ячейках Excel.

Удалить все, кроме букв (извлечь буквы)

Случай, когда в данных лишними являются любая пунктуация, цифры и прочие символы, кроме букв алфавита. Это могут быть:

  • кириллица;
  • латиница;
  • любые буквы.

Другое

Хотите узнать, как удалять другие символы в Excel? Оставляйте комментарии под этой статьей.

Не всегда нужны такие кардинальные меры, как удаление символов. Иногда необходимо просто обнаружить их наличие, извлечь или заменить на какие-то другие. В решении подобных задач вам помогут соответствующие разделы сайта:

  • Обнаружить символы;
  • Извлечь символы;
  • Изменить символы.

Также Microsoft Excel способен на полную мощность задействовать возможности регулярных выражений. Буквы, цифры, знаки препинания, специальные символы — регулярным выражениям подвластна работа с любыми данными. Подробнее на тему читайте в статье Регулярные выражения в Excel.


Смотрите также:

  • Как удалять ячейки по условию в Excel;
  • Как удалять определенные слова в Excel;
  • Как удалять ненужные столбцы и строки по множеству условий;
  • Как убрать формулы из ячеек и оставить только значения.

Хотите быстро удалять любые лишние символы или пробелы в ваших таблицах?
!SEMTools существенно расширит возможности вашего Excel.

На чтение 10 мин. Просмотров 626 Опубликовано 14.01.2021

Содержание

  1. Как удалить буквы из строк/чисел/ячеек в Excel?
  2. Удаление букв из строк/чисел/ячеек с формулой массива
  3. Пакетное разделение текста и чисел из одной ячейки/столбца на разные столбцы/строки
  4. Удаление букв из строк/чисел/ячеек с помощью функции, определяемой пользователем
  5. Удалите буквы из строк/чисел/ячеек с помощью функции EXTRACTNUMBERS в Kutools for Excel
  6. Удалите буквы из строк/чисел/ячеек с помощью утилиты Remove Character Kutools for Excel
  7. Демонстрация: удаление букв из строк/чисел/ячеек в Excel
  8. Статьи по теме:
  9. Лучшие инструменты для повышения производительности Office
  10. Kutools for Excel решает большинство ваших проблем и повышает производительность на 80%
  11. Вкладка “Office”. Интерфейс с вкладками добавлен в Office, что значительно упростит вашу работу.

Как удалить буквы из строк/чисел/ячеек в Excel?

В этой статье рассказывается о том, как удалить буквы из текстовых строк/ячеек/чисел в Excel . И мы предоставляем четыре метода для решения этой проблемы с помощью формулы массива, пользовательской функции и сторонней надстройки Kutools for Excel.

  • Удалить буквы из строки/числа/ячейки с формулой массива
  • Удаление букв из строк/чисел/ячеек с помощью функции, определяемой пользователем
  • Удалите буквы из строк/чисел/ячеек с помощью утилиты Remove Character в Kutools for Excel
  • Удалить буквы из строк/чисел/ячеек с функцией EXTRACTNUMBER Kutools for Excel

Вкладка Office Включает редактирование и просмотр с вкладками в Office и делает вашу работу намного проще …

Подробнее … Скачать бесплатно …

Kutools for Excel решает большинство ваших проблем и увеличивает вашу производительность на 80%.

  • Повторное использование чего угодно: добавление наиболее часто используемых или сложных формул, диаграмм и всего остального в ваши избранные и быстро используйте их в будущем.
  • Более 20 текстовых функций: извлечение числа из текстовой строки; Извлечь или удалить часть текстов; Преобразование чисел и валют в английские слова.
  • Инструменты слияния: несколько книг и листов в одну; Объединить несколько ячеек/строк/столбцов без потери данных; Объедините повторяющиеся строки и суммируйте.
  • Инструменты разделения: разделение данных на несколько листов на основе значения; Из одной книги в несколько файлов Excel, PDF или CSV; Один столбец в несколько столбцов.
  • Вставить пропуск скрытых/отфильтрованных строк; Подсчет и сумма по цвету фона; Отправляйте персонализированные электронные письма нескольким получателям массово.
  • Суперфильтр: создавайте расширенные схемы фильтров и применяйте их к любым листам; Сортировать по неделе, дню, частоте и т. Д. Фильтр жирным шрифтом, формулами, комментариями …
  • Более 300 мощных функций; Работает с Office 2007-2019 и 365; Поддерживает все языки; Простое развертывание на вашем предприятии или в организации.

Подробнее … Бесплатная загрузка …

->


Удаление букв из строк/чисел/ячеек с формулой массива

Мы можем применить формулу массива для удаления букв из строк/чисел/ячеек в Excel. Пожалуйста, сделайте следующее:

1 . Выберите пустую ячейку, в которую вы вернете текстовую строку без букв, введите формулу = СУММ (СРЕДНЕЕ (0 & A2, НАИБОЛЬШИЙ (ИНДЕКС (ЕЧИСЛО (- СРЕДНЕЕ (A2, СТРОКА ($ 1: $ 99), 1)) * СТРОКА ($ 1: $ 99),), СТРОКА ($ 1: $ 99)) + 1,1) * 10 ^ ROW ($ 1: $ 99)/10) ( A2 – это ячейку, из которой вы удалите буквы) в нее и одновременно нажмите клавиши Ctrl + Shift + Enter время.

2 . Продолжайте выделять ячейку, а затем перетащите ее маркер заполнения в нужный диапазон. И теперь вы увидите, что все буквы удалены из исходных текстовых строк, как показано ниже:

Примечания :
(1) Эта формула массива удаляет все типы символов, кроме цифровых. Например, исходная текстовая строка – abc-859 * -24test, эта формула массива удалит все буквы и специальные символы (* и -) и вернет значение 85924.
(2) Если в тексте нет числа строка, эта формула массива вернет 0.

Пакетное разделение текста и чисел из одной ячейки/столбца на разные столбцы/строки

Kutools for Excel расширяет свою утилиту Split Cells и поддерживает пакетное разделение всех текстовых символов и чисел одной ячейки/столбца на два столбца/строки. Полнофункциональная бесплатная пробная версия, 30 дней!

Удаление букв из строк/чисел/ячеек с помощью функции, определяемой пользователем

Мы также можем добавить пользовательскую функцию в Excel для удаления букв из строк/чисел/ячеек. Пожалуйста, сделайте следующее:

1 . Одновременно нажмите клавиши Alt + F11 , чтобы открыть окно Microsoft Visual Basic для приложений.

2 . Щелкните Insert > Module , а затем скопируйте и вставьте следующий код в новое открывающееся окно модуля.

VBA: удаление букв из строк/чисел/ячеек в Excel

 Функция StripChar (Txt As String) As StringWith CreateObject ("VBScript.RegExp"). Global = True.Pattern  = " D" StripChar = .Replace (Txt, "") End WithEnd Function 

3 . Сохраните эту пользовательскую функцию. Выберите пустую ячейку, в которую вы вернете текстовую строку без букв, и введите в нее формулу = StripChar (A2) (A2 – это ячейка, из которой вы удалите буквы) и перетащите маркер заполнения вниз до нужного диапазона. См. Скриншоты:

Примечания:
(1) Эта функция, определяемая пользователем, также может удалять все типы символов, кроме цифровых. Например, исходная текстовая строка – abc-859 * -24test, эта формула массива удалит буквы и специальные символы (* и -) и вернет значение 85924.
(2) Эта определяемая пользователем функция будет возвращать числа, хранящиеся как текстовые строки.


Удалите буквы из строк/чисел/ячеек с помощью функции EXTRACTNUMBERS в Kutools for Excel

Этот метод представит Kutools for Excel функцию EXTRACTNUMBERS , позволяющую легко удалить все буквы из строк/чисел/ячеек в Excel. Пожалуйста, сделайте следующее:

Kutools for Excel – включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная 30-дневная пробная версия, кредитная карта не требуется! Бесплатная пробная версия!

Kutools for Excel – объединяет более 300 дополнительных функций и инструментов для Microsoft Excel

Перейти к загрузке
Бесплатная пробная версия 60 днейПокупка
PayPal/MyCommerce

->

1 . Выберите пустую ячейку, вы вернете текстовую строку без букв, и нажмите Kutools > Функции > Текст > EXTRCTNUMBERS . См. Снимок экрана:

2 . В открывшемся диалоговом окне «Аргументы функции» укажите ячейку, из которой вы будете удалять буквы, в поле Txt , необязательно вводить TRUE или FAlSE в поле N и нажмите кнопку OK .

Примечание . При вводе TRUE будут возвращены числовые числа, при отсутствии ввода или FALSE вернет числа, хранящиеся в виде текстовых строк.

3 . Продолжайте выбирать ячейку и перетащите маркер заполнения в нужный диапазон. И тогда вы увидите, что все буквы удалены из исходных текстовых строк. См. Снимок экрана:

Kutools for Excel – Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная 30-дневная пробная версия, кредитная карта не требуется! Получить сейчас

Примечания:
(1) Вы можете ввести формулу = EXTRACTNUMBERS (A2, TRUE) непосредственно в выбранную ячейку, а затем перетащить дескриптор Fill в нужный диапазон.
(2) Эта функция EXTRACTNUMBERS также удалит все виды символы, кроме цифровых.


Удалите буквы из строк/чисел/ячеек с помощью утилиты Remove Character Kutools for Excel

Все вышеперечисленные методы удаляют все символы, кроме числовых. Но иногда вы можете захотеть удалить только буквы из текстовой строки, но оставить числовые символы и другие. Этот метод представит Kutools for Excel’s Удалить символы , чтобы сделать это легко в Excel.

Kutools for Excel – Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная 30-дневная пробная версия, кредитная карта не требуется! Бесплатная пробная версия!

Kutools for Excel – объединяет более 300 дополнительных функций и инструментов для Microsoft Excel

Перейти к загрузке
Бесплатная пробная версия 60 днейПокупка
PayPal/MyCommerce

->

1 . Выделите ячейки, из которых вы будете удалять буквы, и нажмите Kutools > Текст > Удалить символы .

2 . В открывшемся диалоговом окне «Удалить символы» установите флажок Alpha и нажмите кнопку Ok . И тогда вы увидите, что из выбранных ячеек удаляются только буквы. См. Снимок экрана:

Примечание . Если вы действительно хотите Удалите все виды символов, кроме числовых, вы можете установить флажок Нечисловые и нажать кнопку ОК в диалоговом окне «Удалить символы». См. Снимок экрана:

Kutools for Excel – Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная 30-дневная пробная версия, кредитная карта не требуется! Получить сейчас


Демонстрация: удаление букв из строк/чисел/ячеек в Excel

Kutools for Excel включает более 300 удобных инструментов для Excel, которые можно бесплатно попробовать без ограничений в течение 30 дней. Загрузить и бесплатную пробную версию !


Статьи по теме:

Как удалить числа из текстовых строк в Excel?


Лучшие инструменты для повышения производительности Office

Kutools for Excel решает большинство ваших проблем и повышает производительность на 80%

  • Повторное использование : быстро вставляйте сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки паролем; Создавайте список рассылки и отправляйте электронные письма …
  • Панель супер формул (легко редактировать несколько строк текста и формул); Чтение макета (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон …
  • Объединить ячейки/строки/столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки/столбцы … Предотвратить дублирование ячеек; Сравнить диапазоны …
  • Выбрать повторяющиеся или уникальные строки; Выберите пустые строки (все ячейки пусты); Супер поиск и нечеткий поиск во многих книгах; Случайный выбор …
  • Точное копирование нескольких ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставьте маркеры, флажки и многое другое …
  • Извлечь текст, добавить текст, удалить по позиции, удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии …
  • Суперфильтр (сохранение и применение схем фильтрации к другим листам); Расширенная сортировка по месяцам/неделям/дням, частоте и другим параметрам; Специальный фильтр жирным шрифтом, курсивом …
  • Объединить рабочие книги и рабочие таблицы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF …
  • Группировка сводной таблицы по номеру недели, дню недели и другим параметрам … Показывать разблокированные, заблокированные ячейки разными цветами; Выделите ячейки с формулой/именем … ->

  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2019 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

Подробнее .. . Бесплатная загрузка … Купить …


Вкладка “Office”. Интерфейс с вкладками добавлен в Office, что значительно упростит вашу работу.

  • Включить редактирование и чтение с вкладками в Word, Excel, PowerPoint , Publisher, Access, Visio и Project.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

Подробнее … Скачать бесплатно … Купить …

  • 7 комментариев
  • Войти
  • Сортировать по самым новым

    • Лучшим
    • популярным
    • Новейшие
    • Самый старый
Вы гость
или отправьте сообщение в качестве гостя, но ваше сообщение не будет опубликовано автоматически.

Загрузка комментария … Комментарий будет обновлен после 00:00.

  • Для публикации в качестве гостя ваш комментарий не публикуется.

    АААААА. Наконец то, что работает! Gj!

    • Ответ
  • Для публикации в качестве гостя ваш комментарий не будет опубликован.

    Мне нужно удалить весь текст в ячейке, ЗА ИСКЛЮЧЕНИЕМ определенного набора слов. Например, список фруктов или овощей в столбце A, а столбец B содержит описание овощей, включая цвет, и я хочу удалить весь текст в ячейках столбца B, кроме цветных слов. Есть идеи?

    • Ответ
  • Для публикации в качестве гостя ваш комментарий не будет опубликован.

    Привет, я хочу спросить, есть ли формула для добавления точки к каждому сокращению в одной ячейке в предложении?

    пример

    825 яблочный рд ст. № 5 – я хочу добавить точку на «рд» и «ст», чтобы сделать его формальным

    надеюсь, вы можете мне помочь

    спасибо

    • Ответить
    • Для публикации в качестве гостя ваш комментарий не будет опубликован.

      Привет,
      Функция добавления текста в Kutools for Excel может помочь вам решить проблему: https://www.extendoffice.com/ product/kutools-for-excel/excel-add-same-text-to-multiple-cells.html

      • Ответить
  • Для публикации в качестве гостя ваш комментарий не публикуется.

    Formatunknown · 2 года назад

    Что делать, если вы хотите сохранить формат числа или десятичных знаков? т.е. Apple30.01? за ответ 30.01? ваш vb бросает пятно?

    • Ответ
    • Для публикации в качестве гостя ваш комментарий не публикуется.

      Привет, Formatunknown,
      В этой ситуации рекомендуется Kutools для Excel Удалить символы.
      Выберите ячейки, включите функцию «Удалить символы», отметьте только параметр «Альфа» и нажмите кнопку «ОК», чтобы удалить все буквенные символы и оставить числа, включая десятичные разряды.

      • doc-comments-3244.png
      • Ответить
  • Для публикации в качестве гостя ваш комментарий не будет опубликован.

    • Ответить

Оставить в ячейке только числа (удалить весь текст)

Данная команда позволяет массово удалять из текст множества ячеек весь текст кроме чисел:

Оставить в ячейке только числа (удалить весь текст)

Чтобы воспользоваться данной командой выделите ячейки с текстом из которых вы хотите удалить текст и оставить числа, перейдите во вкладку «ЁXCEL» Главного меню, нажмите кнопку «Ячейки» и выберите команду «Оставить в ячейке только числа (удалить весь текст)»:

ostavit-v-yachejke-tolko-chisla-udalit-ves-tekst

В выделенных ячейках останутся только числа.

Для отмены операции нажмите кнопку отмены:

Добавить комментарий

 

Добрый день!
Подскажите пожалуйста, кто знает, как можно макросом удалить из ячейки все символы, кроме цифр?

 

skais675

Пользователь

Сообщений: 2177
Регистрация: 03.06.2014

#2

28.05.2019 09:39:49

Отсюда

Код
Public Function onlyDigits(stroka) 'Только цифры
    Static objRegExp As Object
     If objRegExp Is Nothing Then
         Set objRegExp = CreateObject("VBScript.RegExp")
         objRegExp.Global = True
         objRegExp.Pattern = "[^0-9]"
     End If
     onlyDigits = objRegExp.Replace(stroka, "")
 End Function

Изменено: skais67528.05.2019 09:43:38

Мой канал

 

Aleksey1107

Пользователь

Сообщений: 363
Регистрация: 05.04.2018

Excel 365

Добрый день!

Почитайте

здесь

 
 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#5

29.05.2019 12:56:59

Нашел свою реализацию (немного подправил, версия от сегодняшнего числа). До двух раз быстрее на длинных строках и смешанном тексте (в сравнении с кодом, пост2). Выкладываю код и тест.
На данных: строка — 32 тыс. символов, строк — 10 тыс. — 10 сек, против 20 сек. через регулярки.
На меньших сроках превосходство меньше, но все равно существенное.
Прошу тестировать.

Код
Option Explicit
'Автор Б. Виталий В. (bvv, bedvit)
'Редакция: 1 от 29/05/2019
'Действие: Функция - в строке остаются только цифры

Public Function Digits(ByVal str As String) As String
Dim x As Long, y As Long, Chars() As Byte, Chars2() As Byte, Char As Byte
Chars = str: ReDim Preserve Chars2(UBound(Chars) + 1)
For x = LBound(Chars) To UBound(Chars) Step 2
    If Chars(x + 1) = 0 Then
    Char = Chars(x)
        If Char < 58 Then If Char > 47 Then Chars2(y) = Char: y = y + 2
    End If
Next
Digits = Chars2
End Function

Прикрепленные файлы

  • Digits_test.xlsb (26.81 КБ)

Изменено: bedvit29.05.2019 13:09:29

«Бритва Оккама» или «Принцип Калашникова»?

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

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
Регистрация: 01.01.1970

#7

23.07.2019 15:46:08

RegExp с маской «D+» будет удалять символы не по одному, а группами, что существенно резвее

Код
Function DigitOnly(s$)
  Dim re
  Set re = CreateObject("VBScript.RegExp"): re.Global = True
  re.Pattern = "D+":  DigitOnly = re.Replace(s, "")
End Function

Изменено: Ігор Гончаренко23.07.2019 16:08:35

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

Jack Famous, мой код делает именно то, что нужно было по теме. Если отбирать только кириллицу, нужно изменить в макросе

коды нужных знаков Юникода

. Помним, про «Ё».
Ігор Гончаренко, да, так быстрее на порядок, тест:
onlyDigits 20,07031
Digits 10,64453
DigitOnly 2,636719

«Бритва Оккама» или «Принцип Калашникова»?

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#9

23.07.2019 16:08:53

Доброе время суток.

Цитата
Ігор Гончаренко написал:
существенно резвее

Протестировал на строке из 40 387 200 символов. Длина строки результата 301 800 (цифры только).
Ігор Гончаренко, шаблон «D+», время 0,18 секунды
skais675, шаблон «[^0-9]», время 1,77 секунды
skais675, шаблон «[^0-9]+», время 0,27 секунды
bedvit, 1,2 секунды

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

bedvit, я пока всё-равно остановился на регулярках, т.к. и быстрее и передавать аргумент (маску) проще и понятнее, НО серьёзно удивился способу формирования одномерного байтового массива напрямую arr() As Byte=txt$ и обратно (строки из массива) — очень круто  :idea:

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#11

23.07.2019 16:27:08

Цитата
Jack Famous написал:
удивился способу формирования одномерного байтового массива

Рекомендовано

разработчиком.

Владимир

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

sokol92, спасибо  ;)

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

Jack Famous, спасибо, пользуйтесь.
sokol92, Владимир, спасибо за инфо.
Андрей VG, Андрей, спасибо за тест. Посмотрел, что на таких больших объемах мой код в аутсайдерах. Другое дело, что в ячейку столько не влезет, поэтому не так критично.
Тоже смотрю последнее время на регулярки. Есть идея зашить в функцию (C API), на это нужно время, зато для форума польза. Скорость думаю должна быть неплохая ;)
Вот, к примеру протестируй, пожалуйста функцию «DigitsXLL» в нужной разрядности XLL на своем массиве (через Application. Run, нужно просто открыть XLL, функция появится в категории «BedvitXLL»)
У меня следующие результаты, на моем примере (см. вложение).
onlyDigits 20 сек
Digits 10 сек
DigitOnly 2,6 сек
DigitsXLL 0,4 сек

Изменено: bedvit23.07.2019 18:07:22

«Бритва Оккама» или «Принцип Калашникова»?

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#14

23.07.2019 20:53:20

Цитата
bedvit написал:
что на таких больших объемах мой код в аутсайдерах

Привет, Виталий.
С твоим кодом в VBA есть и ещё проблема. Тестовый вывод показывает, что не удаляется ничего. Не пошёл и вызов Application.Run(«DigitsXLL», sText), как и с Evaluate — видимо слишком длинная строка :) Результаты.

Цитата
Igor D+ time: 0,0859375; digit count: 1299456; all count: 43895808
skais675 [^d]+ time: 0,3828125; digit count: 1299456; all count: 43895808
BedVit VBA time: 1,117188; digit count: 43895808; all count: 43895808

Тестовый файл и код прикладываю. longText.zip в формате 7z (к сожалению форум не позволяет прикладывать архивы таком формате).
P. S. Решил сравнить с библиотекой .Net и тут засада. Или у меня руки не оттуда растут или… Результат

Цитата
Net time: 719,0871 мсек; digits count: 1299456; all count: 43895808

Скрытый текст

Прикрепленные файлы

  • Digits_test.xlsb (25.56 КБ)
  • longText.zip (8.19 КБ)

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

По  DigitsXLL понятно, это функция листа, в ячейку больше 32 тысяч не лезет. Сразу не сообразил.
По Digits в VBA — пока не понял, гляну.
На .NET тоже глянем, как можно ускорить.
Здесь появляется два момента:
1. Самая быстрая функция для расчетов в ячейке Excel, макс 32 767 знаков(VBA, COM, XLL)
2. Самая быстрая функция для любого количества знаков.
2.1 что бы можно использовать в VBA (VBA, COM)
2.2 любой инструмент (EXE на .NET, EXE на С++)

Что хотим потестировать?
Готов поучаствовать везде.

«Бритва Оккама» или «Принцип Калашникова»?

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#16

24.07.2019 08:57:32

Цитата
bedvit написал:
любой инструмент (EXE на .NET, EXE на С++)

Виталий, я максимум на Net. Вечером слеплю в ExcelDNA многопоточную версию для функции рабочего листа, протестирую.

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

bedvit, да — я понял, что с цифрами всё ОК, но вот дальше всё-равно не догоняю…

В таблице (по вашей ссылке) Кириллица такая:

1025(Ё), 1040(А) — 1103(я), 1105(ё)
1. «ВАСЯ» по ней: 1042 | 1040 | 1057 | 1071
2. • при преобразовании в байтовый массив: 18 | 16 | 33 | 47 (через «4»)
3. • при преобразовании сначала через StrConv: 18 | 16 | 33 | 47 (через «0-4-0» вместо «4»)

Где тут логика и как поступать???

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

Jack Famous,

здесь

по-моему неплохо про это написано.

Изменено: bedvit24.07.2019 12:47:14

«Бритва Оккама» или «Принцип Калашникова»?

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

Jack Famous,  Вот

здесь

, я уже писал на этом форуме код, в такой же парадигме, для кириллицы.

«Бритва Оккама» или «Принцип Калашникова»?

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

bedvit, и это никак не объясняет, откуда вы взяли 15, 80 и 81… С тем, как вы определяете кириллицу по разделителю «4» мне ясно, с 32 понятно — это код пробела при разделителе «0», но откуда остальные??? В таблице Юникода я что-то не то увидел…

Изменено: Jack Famous24.07.2019 14:12:04

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

Jack Famous, прочитали инфо по ссылке в посте 18?

«Бритва Оккама» или «Принцип Калашникова»?

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

bedvit, нет)) я, балбес, признаю — не увидел  :D Спасибо большое  :idea:
Не могу только понять, из какой в какую систему перегонять надо… Сижу функции перебираю…

UPD:

итак, в таблице Юникод коды символов совпадают с таблицей в Excel (через =СИМВОЛ() или =Chr() в VBA) с 1 по 126, дальше пляска пошла)))
В Юникоде код представлен (например, для русской «А») в десятичной (1040) или шестнадцатиричной (0410) системах счисления

Пока не могу только понять, как именно из них получить 16/4 или наоборот  :D
Вроде как это восмеричная система, но тогда почему вместо 2020 (если перевести 1040 из десятичной в восьмеричную) выдаёт эти «16 и 4»? Кратность какая-то?

UPD2:

всё — я понял  :D
1040 = 16 | 4 = 16 + 256*4 (для всей кириллицы будет)
Вот только как

калькулятором

или функциями перегонять — всё равно непонятно  :D

Изменено: Jack Famous24.07.2019 16:11:51

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#23

24.07.2019 18:28:55

Цитата
bedvit написал:
1. Самая быстрая функция для расчетов в ячейке Excel, макс 32 767 знаков(VBA, COM, XLL)2. Самая быстрая функция для любого количества знаков.2.1 что бы можно использовать в VBA (VBA, COM)2.2 любой инструмент (EXE на .NET, EXE на С++)

1.Тест на 32767 знаков в каждой ячейке, на 1 млн. ячеек в Excel — 9 сек. (тест прилагаю, нужно открыть текст, нужной разрядности XLL, запустить)
2.1 — СОМ не делал, за неимением спроса, будет такая же скорость как и в п.2.2
2.2 — C#.NET Андрей, внес в твой код еще два варианта:

Скрытый текст

Net time: 1130,113 мсек; digits count: 1299456; all count: 43895808
Net time: 247,0247 мсек; digits count: 1299456; all count: 43895808 — вар2
Net time: 124,0124 мсек; digits count: 1299456; all count: 43895808 — вар3

С++

Скрытый текст

digits count: 43895808
time = 99, digits count: 1299456

В Шарпе неудобно работать со строками, их нельзя изменять (при изменении, по факту, создается новая строка. Есть структура, где все же можно — System.Text.StringBuilder, но как видим работает «оно» медленно)
В С++ строка, это лишь массив символов, можно менять что угодно, прямо на месте.
Поэтому в тестах несколько быстрее.

Прикрепленные файлы

  • толко_цифры2.rar (255.67 КБ)

Изменено: bedvit24.07.2019 19:30:28

«Бритва Оккама» или «Принцип Калашникова»?

 

manat78

Пользователь

Сообщений: 110
Регистрация: 03.03.2018

может как идея создать переменную (1)=»0123456789″ и потом каждый символ в тестируемом значении проверять на наличие в этой переменной (1) и если есть то сувать в еще одну переменную (2). и в конце менять значение на переменнную (2). незнаю на сколько это быстро будет)))

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#25

24.07.2019 20:26:45

Цитата
Jack Famous написал:
функциями перегонять — всё равно непонятно  

В VBA (кроме, естественно, вызова функций рабочего листа) есть «родная» функция Hex для перевода из 10-тичной системы в 16-ричную. Для обратного перевода можно «схимичить», как указано ниже:

Код
Sub test()
  Dim s As String
  Debug.Print AscW("А")  ' выдает 1040 - номер в юникоде для заглавной "А" кириллицы в 10-тичной системе счисления
  Debug.Print Hex(1040)  ' выдаст 410 - перевод 1040 из 10- в 16-ричную
  s = "410"
  Debug.Print CDbl("&H" & s) ' выдает 1040 - обратный перевод из 16- в 10-
  Debug.Print ChrW(1040)     ' выдает заглавную "А"
End Sub

8-ричной системой ни разу в жизни в Excel не пользовался.

Изменено: sokol9224.07.2019 20:28:12

Владимир

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#26

25.07.2019 08:36:08

sokol92, за функции спасибо — почти уверен, что они быстрее функций листа  :idea:

Цитата
sokol92: 8-ричной системой ни разу в жизни в Excel не пользовался

но именно такая (кажется) получается при передаче строки байтному массиву  :D
В любом случае, что делать с этими цифрами теперь понятно.

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#27

25.07.2019 14:18:10

Андрей VG, Андрей, можно еще немножко ускорить код на C#.NET, если перейти на указатели и небезопасный код (Unsafe code). см. вариант 4.
Еще ближе к С++.
upd. Немного подправил свой код.

Скрытый текст

V1-Net time: 1079,1079 мсек; digits count: 1299456; all count: 43895808
V2-Net time: 243,0243 мсек; digits count: 1299456; all count: 43895808
V3-Net time: 135,0135 мсек; digits count: 1299456; all count: 43895808
V4-Net time: 119,0119 мсек; digits count: 1299456; all count: 43895808

Изменено: bedvit25.07.2019 15:13:42
(upd. Немного подправил свой код.)

«Бритва Оккама» или «Принцип Калашникова»?

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#28

25.07.2019 21:44:16

Привет, Виталий.
Огромное спасибо за исследование. Сделал в ExcelDNA, но так как исходно RegEx исходно раз в восемь медленнее, то не смотря на то, что можно задействовать IsThreadSafe, получается, что VBScript.RegExp твой код на ячейках выполнять для 32000 строк за 13 секунд, а RegEx за 20!

Цитата
onlyDigits 40,46875
Digits 25,32031
DigitOnly 12,75
DigitsXLL 0,3359375
Net RegEx 19,60938

Твой С++ вне сомнения лучший, причём деградирует заметно медленнее. RegEx на 1000000 строк минут 9 молотил, твой секунд за 30 справился — точно не засекал.

Изменено: Андрей VG25.07.2019 21:45:32

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

Андрей, спасибо за исследования! А DigitOnly — это код Игоря Гончаренко — выходит самый быстрый на VBA. Опять же с помощью сторонних библ. В теории я могу подлючить свою СОМ-библиотеку и обогнать в VBA — стандартную. Далее мой код на VBA, выходит 25 сек. без сторонних библиотек. Неплохо, но с библиотеками все же лучше. Считаю нужно все использовать, если есть возможность. По XLL — для интереса, возьми вариант 4 — на шарпе самый быстрый, не сильно уступает С++, заверни его в ExcelDNA. Предполагаю, отставание раза в два-пять всего лишь будет от С++.
Да C API в XLL впечатляет, конкурентов нет, кроме стандартных функций.  Хочу обогнать ВПР(), но пока проигрываю (медленнее на 46%). Не удается по указателю в Excel залесть (а разыменовывать весь массив это дорого, за счёт этого проигрываю), а встроенным функциям видимо есть доступ к памяти Excel через указатель. Или используется механизм кеширования — сейчас я о нем подумываю. Если интересно — написал даже

здесь

и

здесь

.

Изменено: bedvit25.07.2019 23:35:31

«Бритва Оккама» или «Принцип Калашникова»?

 

Inexsu

Пользователь

Сообщений: 758
Регистрация: 29.06.2017

#30

25.07.2019 23:58:45

Привет!

Цитата
DopplerEffect написал:
все символы, кроме цифр?

Не забыли про

Код
Application.DecimalSeparator

?

Сравнение прайсов, таблиц — без настроек

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как удалить все символы в столбце excel
  • Как удалить все присвоенные имена в excel
  • Как удалить все строки в excel не содержащие заданное слово
  • Как удалить все связи в word
  • Как удалить все примечания на листе excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии