Я хочу получить N-ю самую старую дату из списка текстовых строк. Данные выглядят следующим образом:
Результатом, если N = 1, должна быть самая старая дата или 03/28/2022
. Если N = 3, результат должен быть 10/05/2022
.
Мне известны функции SMALL()
и MID()
, но я не уверен, как можно объединить эти две, одновременно ища только те поля, в которых есть даты. Даты будут включены только в те, которые имеют значение >0%, но оценивать следует только те, которые имеют значение 100%.
Возможно, попробуйте:
=IFERROR(INDEX(SORT(--REGEXEXTRACT(A1:A9,"^100% \((\d\d/\d\d/\d{4})\)$")),1),"No Value")
Таким образом, вы будете извлекать даты только тогда, когда строка начинается с «100%» и соответствует остальной части правильного шаблона ввода. Здесь «1» — это ваше «Н». Просто измените его по желанию.
У меня есть N или 1, связанный с ячейкой. Когда я удаляю значение, оно перечисляет все значения до конца. Я не думаю, что это будет проблемой, потому что я не ожидаю, что эта ячейка будет пустой, но я подумал, что подниму этот вопрос. Спасибо за ответ и за быстрый ответ.
При необходимости мы можем настроить этот формат @DanCue. Спасибо за ответ.
Позвольте мне задать вам тот же вопрос, который я задал в другом ответе... Допустим, данные распределены по строке, а не по столбцу? Я не уточнил это в вопросе, но просто подумал, что, возможно, мне придется пойти по этому пути. Будет ли это работать или как мне нужно будет изменить его, чтобы адаптироваться?
TOCOL
, похоже, сработало.
@DanCue: В этом случае лучше используйте формулу, которая может обрабатывать оба варианта: =IFERROR(INDEX(LARGE(--REGEXEXTRACT(D1:L1,"^100% \((\d\d/\d\d/\d{4})\)$"),8)),"No Value")
. Здесь D1:L1
— заполнитель для горизонтального массива. «8», очевидно, «Н».
Боюсь, один из них не сработал. С ТОКОЛом работало, как и ожидалось, на горизонтальной решетке.
У меня сработало, но, очевидно, используйте то, что подходит вам @DanCue. Рад, что ваша проблема решена.
Ага. Должно быть, я делаю что-то не так. Ни вертикаль, ни горизонталь не работают. Получаем No Value
с любым из них. В любом случае, спасибо.
TOCOL на самом деле работает с обоими. =IFERROR(INDEX(SORT(--REGEXEXTRACT(TOCOL(A19:A),"^100% \((\d\d/\d\d/\d{4})\)$")),B$18),"")
и =IFERROR(INDEX(SORT(--REGEXEXTRACT(TOCOL(B31:J31),"^100% \((\d\d/\d\d/\d{4})\)$")),B$18),"")
Вот один из подходов, который вы можете опробовать:
=let(n,B1,
query(sort(split(A:A,"()")),"Select Col2 Where Col1=1 limit 1 offset "&n-1))
Я могу подтвердить, что это работает. Мне просто интересно, почему используется LET
? В этом случае мы используем только один экземпляр n
.
Просто чтобы было просто очевидно, где здесь задействован фактор n и все такое...
Вы также можете использовать:
=INDEX(QUERY(SPLIT(A1:A9,"()"),"where Col1=1 order by Col2"),n,2)
Измените n
на желаемый номер. Для n=1
у нас есть:
Для горизонтального диапазона используйте TOCOL:
=INDEX(QUERY(SPLIT(TOCOL(A1:I1),"()"),"where Col1=1 order by Col2"),1,2)
Это решение также работает. Допустим, данные распределены по строке, а не по столбцу? Я не уточнил это в вопросе, но просто подумал, что, возможно, мне придется пойти по этому пути. Будет ли это работать или как мне нужно будет изменить его, чтобы адаптироваться?
замените A1:A9
на TOCOL(range)
.
=index(sort(ARRAYFORMULA(iferror(datevalue(iferror(REGEXEXTRACT(A2:A10,"[0-9]{2}/[0-9]{2}/[0-9]{4}"))) ))1,правда),1,1)
Измените диапазон, чтобы он отражал ваши данные в части регулярного выражения формулы (например, здесь A2:A10).
Предпоследнее число будет N-й цифрой, обозначающей самую старую.
Ваш ответ можно улучшить, добавив дополнительную вспомогательную информацию. Пожалуйста, отредактируйте , добавив дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
У меня работало, пока формат даты — ММ/ДД/ГГГГ.