Страницы: 1
RSS
Извлечение последних цифр из текса ячейки
 
Добрый день!

Пытаюсь реализовать универсальную формулу на извлечение последнего записанного года в ячейке.

Варианты примеров ячеек могут быть такие: "ДД.ММ.ГГГГ-ДД.ММ.ГГГГ", ДД.ММ.ГГГГ г.", ДД.ММ.ГГГГ гг." и прочие некорректные вводы значений в ячейке с датой.
Работала формула =ПРАВСИМВ(СЖПРОБЕЛЫ(ЕСЛИОШИБКА(ЗАМЕНИТЬ($A1;ПОИСК("г.";$A1);999;"");$A1));4 но только на варианты, если текст ячейки оканчивался на сам год или "г."

Может кто знает как найти первое число с конца текса в ячейке?

Благодарю!
 
Svetgera, добрый день. Для ознакомления: https://www.planetaexcel.ru/techniques/7/4844/
Изменено: Alex - 22.05.2026 15:31:17
 
Alex, чудесная статья. Но, быть может, как-то можно решить этот вопрос без макросов?
 
Svetgera, Добрый день, пример приложите
Как вариант
Код
=--ЛЕВСИМВ(ФИЛЬТР.XML("<t><s>"&ПОДСТАВИТЬ(A1;".";"</s><s>")&"</s></t>";"//s[last()]");4)
Изменено: Msi2102 - 22.05.2026 15:48:57
 
Пример
Изменено: Svetgera - 22.05.2026 15:51:45
 
Так
Код
=--ЛЕВСИМВ(ФИЛЬТР.XML("<t><s>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(C4);"-";".");".";"</s><s>")&"</s></t>";"//s[node()][last()]");4)
 
Msi2102, похоже данная формула закрывает большинство моих вариантов.

Премного благодарен!
 
Цитата
Svetgera написал:
похоже данная формула закрывает большинство моих вариантов
Данная формула закрывает все варианты приведенные в примере
 
Еще вариант (формула массива для старых версий):
=ПСТР(C4;МАКС(--ЕЧИСЛО(ЗНАЧЕН(ПСТР(C4;СТРОКА($E$1:ИНДЕКС(E:E;ДЛСТР(C4)));1)))*СТРОКА($E$1:ИНДЕКС(E:E;ДЛСТР(C4))))-3;4)*1
 
Alex, не понял к чему тут формула с индексом по пустому столбцу Е...

А так, формула Msi2102 полностью работает  
 
Svetgera, конкретный столбец Е не причем, вся конструкция нужна, чтоб найти последнюю цифру в тексте, и уже от нее отталкиваться
 
Код
=RIGHT(LEFT(C4, MATCH(10, MID(C4, ROW(INDIRECT("1:" & LEN(C4))), 1) + 0)), 4)
Пришелец-прораб.
 
Бывают и еще ляпы с датами в виде "20227" и т.п.
Из всех формул, для моих нужд, лучше справляется формула AlienSx.
Далее эта дата будет преобразована в число и задействована в поиске через формулу ИНДЕКС по годам. Уж лучше она будет выдавать ошибку, чем некорректные года, как в формуле Msi2102.
Всех нюансов не предугадаешь.

upd. с другой стороны - формула AlienSx - формула массива. Для людей несведущих про CSE - это может быть еще более роковой ошибкой "почему их формула не работает...

Файл предназначается для широкого круга пользователей с небольшими знаниями по excel.


Но все равно, всем Большое спасибо за участие!
Изменено: Svetgera - 22.05.2026 17:44:44
 
Цитата
Svetgera написал:
Всех нюансов не предугадаешь
если бы Вы сразу показали в файле примере, пятизначный год, а также какой должен быть правильный результат, то можно было бы и это предусмотреть. В понедельник посмотрю, если ни кто, ни чего не предложит. Очепятки, конечно, исправлять не будет, но пятизначный год можно вынуть. Так что совет на будущее, не ленитесь составлять пример.
 

Здравствуйте Может такая формула подойдет для ячейки C4

Код
=ПСТР(C4; ПРОСМОТР(2; 1/(ЕЧИСЛО(-ПСТР(C4; СТРОКА(1:99); 1))); СТРОКА(1:99)) - 3; 4)
 
Добрый день. Для свежих версий офиса можно так:
Код
=LET(Z;ПСТР(C4;СТРОКА($1:$50);4);ВЗЯТЬ(ФИЛЬТР(Z;(ЛЕВСИМВ(Z;2)="20")*(ЕЧИСЛО(--Z))*(ДЛСТР(Z)=4));-1))
Изменено: Старичок - 23.05.2026 12:01:30
 
Цитата
написал:
если бы Вы сразу показали в файле примере, пятизначный год, а также какой должен быть правильный результат, то можно было бы и это предусмотреть. В понедельник посмотрю, если ни кто, ни чего не предложит. Очепятки, конечно, исправлять не будет, но пятизначный год можно вынуть. Так что совет на будущее, не ленитесь составлять пример.
Msi2102, дело в не в лени. Изначально я думал, что все предусмотрел, но потом, получив, решения всех участников процесса, вспомнил еще об одном "плохом варианте".
Неизвестно с какой стороны извлекать Правильный год при его ошибочной записи в 5-ти и более -значном варианте. Уж лучше пускай по Вашей формуле выдает ошибку, а пользователь вводит данные корректно.
 
Вот вариант для года вне зависимости от количества символов в году
Код
=ФИЛЬТР.XML("<t><s>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(ПОДСТАВИТЬ(C4;"г";""));"-";".");".";"</s><s>")&"</s></t>";"//s[node()][last()]")
 
Собственно, только год с такими примерами можно без формул попробовать, кнопками там не так много действий, единственно все же варианты ошибок надо бы повыписывать ..  
Дублировать столбец, чтобы исходник остался и далее выделив созданный столбец замена ctrl+h на пусто: текст после года " г*", затем удалить все, что до точки "*.", можно повторить с другими разделителеми. И, затем, заменить пробелы после года если такие остались " *".
Должно хватить, но всегда можно проверить ошибки фильтром  - все что не год. И, посмотреть, что нужно из исходника
Страницы: 1
Читают тему
Наверх