Excel: Витягнути число з текстового рядка

  • Поділитися Цим
Michael Brown

Урок показує, як витягти число з різних текстових рядків в Excel за допомогою формул та інструменту Витягнути.

Коли мова йде про вилучення частини текстового рядка заданої довжини, Excel надає три функції підрядка (Left, Right і Mid) для швидкого вирішення завдання. Коли мова йде про вилучення чисел з алфавітно-цифрового рядка, Microsoft Excel не надає... нічого.

Щоб отримати число з рядка в Excel, потрібно трохи винахідливості, трохи терпіння і купа різних функцій, вкладених одна в одну. Або ви можете запустити інструмент "Витягнути" і виконати роботу одним клацанням миші. Нижче ви знайдете повну інформацію про обидва методи.

    Як витягти число з кінця текстового рядка

    Якщо у вас є стовпець алфавітно-цифрових рядків, де число стоїть після тексту, ви можете використовувати наступну формулу для його отримання.

    ТАК. клітина , LEN( клітина ) - MAX(IF(ISUMBER(MID( клітина , ROW(INDIRECT("1:"&LEN( клітина ))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( клітина ))), 0)))

    На логіці формули ми зупинимося трохи пізніше, а поки просто замінимо клітина з посиланням на комірку, що містить вихідний рядок (у нашому випадку А2), а формулу ввести в будь-яку порожню комірку того ж рядка, скажімо, в В2:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0)))

    Ця формула отримує число тільки з кінця, якщо в рядку також є числа на початку або в середині, то вони ігноруються:

    Витяг виконується функцією RIGHT, яка відноситься до категорії Текстових функцій. Виходом цієї функції завжди є текст У нашому випадку результатом є числовий підрядок що з точки зору Excel також є текстом, а не числом.

    Якщо Вам потрібно, щоб результат був кількість (яку можна використовувати в подальших обчисленнях), то оберніть формулу в функцію ЗНАЧЕНИЕ або виконайте арифметичну операцію, яка не змінює результат, скажімо, помножте на 1 або додайте 0. Для відлову помилок в рядках, які не містять жодного числа, використовуйте функцію ОШИБКА. Наприклад, функція ОШИБКА:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0)))), "")

    або

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0))) +0, "")

    Примітка: в Excel з динамічним масивом (Office 365 і 2021) формула вводиться звичайним способом за допомогою клавіші Enter. В Excel 2019 і раніше вона працює тільки як формула масиву, тому не забудьте натиснути Ctrl + Shift + Enter для її завершення.

    Як працює ця формула:

    Щоб витягти число з алфавітно-цифрового рядка, насамперед потрібно знати, з чого почати витяг. За допомогою цієї нехитрої формули визначається позиція останнього нецифрового символу в рядку:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))

    Щоб зрозуміти логіку, розглянемо її зсередини:

    Комбінація ROW(INDIRECT("1:"&LEN(A2))) створює послідовність чисел, що відповідає загальній кількості символів у вихідному рядку (A2), і ми подаємо ці послідовні номери в MID як початкові номери:

    MID(A2, {1;2;3;4;5;6;7;8}, 1)

    Функція MID витягує кожен окремий символ з A2 і повертає їх у вигляді масиву:

    {"0";"5";"-";"E";"C";"-";"0";"1"}

    Оскільки MID - це текстова функція, то її виходом завжди є текст (як можна помітити, всі символи укладені в лапки). Для перетворення числових значень в цифрові, ми множимо масив на 1 (подвійне заперечення --MID() дасть той же ефект). Результатом цієї операції є масив чисел і помилки #VALUE!, що представляють собою нечислові символи:

    ISUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})

    Функція ISNUMBER оцінює кожен елемент масиву і видає свій вердикт у вигляді булевих значень - TRUE для чисел, FALSE для всього іншого:

    {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE}

    Цей масив надходить на логічний тест функції IF, де кожен елемент масиву порівнюється з FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)

    Для кожного значення FALSE (нечислове значення) інша функція ROW(INDIRECT()) повертає його відносну позицію в рядку. Для кожного значення TRUE (числове значення) повертається нуль. Результуючий масив має наступний вигляд:

    {0;0;3;4;5;6;0;0}

    Далі все просто: функція MAX знаходить найбільше число у вищенаведеному масиві, яке є позицією останнього нечислового значення в рядку (6 в нашому випадку). Просто віднімаємо цю позицію від загальної довжини рядка, що повертається функцією LEN, і передаємо результат функції RIGHT, щоб вона знала, скільки символів потрібно витягти з правого боку рядка:

    RIGHT(A2, LEN(A2) - 6)

    Готово!

    Як витягти число з початку текстового рядка

    Якщо ви працюєте з записами, в яких після номера стоїть текст, ви можете витягти номер з початку рядка, використовуючи цю загальну формулу:

    LEFT( клітина , MATCH(FALSE, ISUMBER(MID( клітина , ROW(INDIRECT("1:"&LEN( клітина )+1)), 1) *1), 0) -1)

    За вихідним рядком у комірці A2 отримайте число за наступною формулою:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)

    Незалежно від того, скільки цифр знаходиться в середині або в кінці, витягується тільки початкове число:

    Примітка. В Excel 365 і Excel 2021 завдяки підтримці динамічних масивів звичайна формула працює нормально. В Excel 2019 і раніше слід натиснути Ctrl + Shift + Enter, щоб явно зробити її формулою формула масиву .

    Як працює ця формула:

    Тут ми знову використовуємо комбінацію функцій ROW, INDIRECT і LEN для створення послідовності чисел, що дорівнює загальній кількості символів у вихідному рядку плюс 1 (роль цього додаткового символу стане зрозумілою трохи пізніше).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID і ISNUMBER виконують ту ж роботу, що і в попередньому прикладі - MID витягує окремі символи, а ISNUMBER перетворює їх в логічні значення. Отриманий масив TRUE і FALSE передається в функцію MATCH як масив пошуку:

    MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)

    MATCH обчислює відносну позицію першого FALSE, що дає нам позицію першого нецифрового символу в рядку (3 в A2). Щоб витягти попередні числа, ми віднімаємо 1 від позиції першого текстового символу і подаємо різницю в функцію num_chars аргумент функції LEFT:

    LEFT(A2, 3-1)

    Тепер повернемося до "зайвого" символу в послідовності, що генерується ROW(INDIRECT()+1)). Як ви вже знаєте, ця послідовність забезпечує початкові точки для функції MID. Без +1, MID витягне рівно стільки символів, скільки є у вихідному рядку. Якщо рядок містить тільки числа, ISNUMBER поверне тільки TRUE, в той час як MATCH потребує принаймні одного FALSE. Щоб переконатися в цьому, ми додамо одинбільше символів до загальної довжини рядка, який функція MID перетворила б у порожній рядок. Наприклад, у B7 функція MID повертає цей масив:

    {"1"; "2"; "3"; "4";""}

    Примітка. Як і у випадку з функцією RIGHT, LEFT також повертає значення числовий підрядок Щоб отримати результат у вигляді числа, а не числового рядка, вкладіть формулу у функцію VALUE або помножте результат на 1, як показано в першому прикладі.

    Як отримати число з будь-якої позиції рядка

    Якщо у вашій задачі потрібно витягти число з будь-якого місця рядка, ви можете скористатися наступною дивовижною формулою, опублікованою на форумі MrExcel:

    =СУММЕСЛИ(СЕРЕДИНА(0&A2, ВЕЛИКИЙ(ІНДЕКС(НОМЕР(--СЕРЕДИНА(A2, РЯДОК(НЕПРЯМА("1:"&LEN(A2))), 1)) * РЯДОК(НЕПРЯМА("1:"&LEN(A2))), 0), РЯДОК(НЕПРЯМА("1:"&LEN(A2))))+1, 1) * 10^РЯДОК(НЕПРЯМА("1:"&LEN(A2)))/10)

    Де A2 - вихідний текстовий рядок.

    Розбір цієї формули потребував би окремої статті, тому ви можете просто скопіювати її на свій робочий аркуш, щоб переконатися, що вона дійсно працює :)

    Однак при вивченні результатів можна помітити один незначний недолік - якщо вихідний рядок не містить числа, формула повертає нуль, як у рядку 6 на скріншоті вище. Щоб виправити це, можна обернути формулу в оператор IF, логічна перевірка якого перевіряє, чи містить вихідний рядок якесь число. Якщо містить, формула витягує число, в іншому випадку повертає порожній рядок.струна:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    Як показано на скріншоті нижче, покращена формула працює чудово (хвала Алексу, нашому гуру Excel, за це покращення):

    На відміну від усіх попередніх прикладів, результатом цієї формули є кількість Щоб переконатися в цьому, достатньо звернути увагу на вирівняні по правому краю значення в колонці В та усічені початкові нулі.

    Порада. В Excel 365 - Excel 2019 є набагато простіше рішення за допомогою функції TEXTJOIN. Будь ласка, дивіться Як видалити текст і зберегти цифри.

    Витягнути номер з текстового рядка за допомогою Ultimate Suite

    Як ви щойно побачили, не існує тривіальної формули Excel для отримання числа з текстового рядка. Якщо у вас є труднощі з розумінням формул або їх налаштуванням для ваших наборів даних, вам може сподобатися цей простий спосіб отримати число з рядка в Excel.

    З нашим Ultimate Suite, доданим до стрічки Excel, ви можете швидко отримати число з будь-якого алфавітно-цифрового рядка:

    1. Перейдіть на сторінку Дані про абіти вкладка> Текст групу і натисніть Витяг :

    2. Виділити всі комірки з вихідними рядками.
    3. На панелі інструмента Витягніть виберіть пункт Номери виписок радіокнопка.
    4. Залежно від того, чи потрібно, щоб результати були формулами або значеннями, виберіть Вставити як формулу або залишити його не позначеним (за замовчуванням).

      Я раджу встановити цей прапорець, якщо ви хочете, щоб витягнуті числа оновлювалися автоматично, як тільки до вихідних рядків вносяться будь-які зміни. Якщо ви хочете, щоб результати не залежали від вихідних рядків (наприклад, якщо ви плануєте видалити вихідні дані пізніше), то не встановлюйте цей прапорець.

    5. Натисніть на кнопку Результати вставки кнопку. Готово!

    Як і в попередньому прикладі, результатами вилучення є цифри Це означає, що ви можете вільно рахувати, підсумовувати, усереднювати або виконувати будь-які інші обчислення з ними.

    У цьому прикладі ми вирішили вставити результати як цінності і доповнення зробило саме те, про що просили:

    У разі, якщо Вставити як формулу було встановлено прапорець, ви побачите формула У рядку формул. Цікаво, який саме? Просто завантажте пробну версію Ultimate Suite і переконайтеся самі :)

    Доступні для завантаження

    Номер витягу Excel - зразок робочої книги (файл .xlsx)

    Ultimate Suite - пробна версія (файл .exe)

    Майкл Браун — відданий ентузіаст технологій із пристрастю до спрощення складних процесів за допомогою програмних засобів. Маючи понад десятирічний досвід роботи в технологічній індустрії, він відточив свої навички роботи з Microsoft Excel і Outlook, а також із Google Таблицями та Документами. Блог Майкла присвячений тому, щоб поділитися своїми знаннями та досвідом з іншими, надаючи прості поради та навчальні посібники для підвищення продуктивності та ефективності. Незалежно від того, чи є ви досвідченим професіоналом чи початківцем, блог Майкла пропонує цінну інформацію та практичні поради щодо отримання максимальної користі від цих основних програмних інструментів.