Зміст
Урок показує, як витягти число з різних текстових рядків в 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, ви можете швидко отримати число з будь-якого алфавітно-цифрового рядка:
- Перейдіть на сторінку Дані про абіти вкладка> Текст групу і натисніть Витяг :
- Виділити всі комірки з вихідними рядками.
- На панелі інструмента Витягніть виберіть пункт Номери виписок радіокнопка.
- Залежно від того, чи потрібно, щоб результати були формулами або значеннями, виберіть Вставити як формулу або залишити його не позначеним (за замовчуванням).
Я раджу встановити цей прапорець, якщо ви хочете, щоб витягнуті числа оновлювалися автоматично, як тільки до вихідних рядків вносяться будь-які зміни. Якщо ви хочете, щоб результати не залежали від вихідних рядків (наприклад, якщо ви плануєте видалити вихідні дані пізніше), то не встановлюйте цей прапорець.
- Натисніть на кнопку Результати вставки кнопку. Готово!
Як і в попередньому прикладі, результатами вилучення є цифри Це означає, що ви можете вільно рахувати, підсумовувати, усереднювати або виконувати будь-які інші обчислення з ними.
У цьому прикладі ми вирішили вставити результати як цінності і доповнення зробило саме те, про що просили:
У разі, якщо Вставити як формулу було встановлено прапорець, ви побачите формула У рядку формул. Цікаво, який саме? Просто завантажте пробну версію Ultimate Suite і переконайтеся самі :)
Доступні для завантаження
Номер витягу Excel - зразок робочої книги (файл .xlsx)
Ultimate Suite - пробна версія (файл .exe)