Если есть список данных, смешанных с текстом и числами, как быстро найти первое числовое значение, как показано на скриншоте ниже в Excel? Здесь у меня есть формула, с которой можно быстро справиться без ручной проверки.
Найдите первую числовую ячейку в Excel
Найдите первую числовую ячейку в Excel
Чтобы найти первую числовую ячейку, которая включает время, даты и числа, вы можете использовать эту формулу:
Выберите ячейку, в которую вы помещаете результат поиска, введите эту формулу =INDEX(A1:A10,MATCH(TRUE,INDEX(ISNUMBER(A1:A10),0),0)), и нажмите Enter .
Теперь он возвращает фактическое значение первого числа в указанном списке. Смотрите скриншот:
Внимание: В формуле A1: A10 – это указанный список, из которого вы будете проверять первое числовое значение, и вы можете изменить его по своему усмотрению.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (3)
Номинальный 5 из 5
·
рейтинги 1
The following formula (in $G$2
and filled down) should do the trick:
=IF(ISBLANK(F2),"xxx",INDEX(B2:E2,,COUNTBLANK(B2:F2)+1))
Note that this will only work if there are no other blank cells in between the first and last entries.
update: Here is a more versatile option from the Mr.Excel forum:
=INDEX(B2:F2,MATCH(1,IF(B2:F2<>0,IF(B2:F2<>"",1)),0))
This one has to be entered as an “array formula” which means you must press CTRL-SHIFT-ENTER after pasting in the formula.
response to comment:
It works great, except that if all cells are empty on a row, it returns #N/A. So, I changed the formula slightly to include an IsNA() condition:
=IF(ISNA(INDEX(B2:F2,MATCH(1,IF(B2:F2<>0,IF(B2:F2<>"",1)),0))), "xxx",
INDEX(B2:F2,MATCH(1,IF(B2:F2<>0,IF(B2:F2<>"",1)),0)))
Rather than duplicate the whole formula, you could do the following:
=IF(COUNTBLANK(B2:F2)=COLUMNS(B2:F2),"xxx",
INDEX(B2:F2,MATCH(1,IF(B2:F2<>0,IF(B2:F2<>"",1)),0)))
Мы уже научились находить позицию первой буквы в ячейке, формула поиска позиции числа имеет схожий принцип – превращает строку в массив символов и проверяет каждый на принадлежность к цифрам.
Вариант 1
{=ПОИСКПОЗ(ЛОЖЬ;ЕОШ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)-1);0)}
Как она это делает? Из массива вычитается единица (это может быть любое число), далее полученный массив ошибок и валидных значений обрабатывается функцией ЕОШ. Ошибки вычисления (там, где были нечисловые символы) вернут ИСТИНА, цифровые символы – ЛОЖЬ.
Функция ПОИСКПОЗ возвращает позицию первой цифры через поиск первого значения ЛОЖЬ.
Как и все формулы массива в Excel, данная формула вводится сочетанием клавиш Ctrl+Shift+Enter.
Вариант 2
Есть и вот такая вариация формулы массива, использующая функции МИН, ПОИСК, СИМВОЛ и ЕСЛИОШИБКА:
{=МИН(ЕСЛИОШИБКА(ПОИСК(СИМВОЛ(СТРОКА(48:57));A1);""))}
Её принцип несколько иной –
- каждый из 10 цифровых символов ищется внутри строки функцией ПОИСК, возвращающей в успешных случаях его позицию, а в неуспешных – ошибку
- массив результатов обрабатывается функцией ЕСЛИОШИБКА и вместо ошибок вставляет в массив пустоты, чтобы из-за ошибок не прерывалась работа функции МИН
- результирующий массив обрабатывает функция МИН и возвращает минимальную из позиций – это и есть позиция первой цифры в ячейке
Функция более требовательна к ресурсам компьютера (строковые функции “дороже” математических), поэтому рекомендуется первый вариант.
Применение формул
Наиболее понятное применение – это когда нужно отделить в ячейке текст от цифр или удалить текст до первой цифры.
Можно конечно пользоваться трехэтажными формулами, включая формулы массива, при этом плохо понимая о чем в них идет речь…
На мой программистский взгляд проще написать небольшой макрос, поскольку сам Excel не дает простого решения поставленной задачи. Хотя тут надо провести предварительную подготовку, связанную с безопасностью макросов. А именно надо в настройках Excel (меню “Файл”) в опциях связанных с безопасностью макросов включить все макросы, несмотря на предупреждение не делать этого.
Потом в редакторе VBA (вызывается комбинацией клавиш Alt+F11) прописать в модуле листа для которого ищется решение задачи (а лучше – в общем модуле проекта, который предварительно надо вставить в проект) текст программки следующего вида
Sub SpSeek(xC As Range)
Dim xT As String, lQ As Boolean, nP As Integer
xT = Format(xC.Value)
nP = 1
Do While Len(xT) > 0
lQ = Left(xT, 1) Like “#”
If lQ Then
xC.Offset(0, 2).Value = Left(xT, 1)
xC.Offset(0, 3).Value = nP
Exit Do
Else
xT = Right(xT, Len(xT) – 1)
nP = nP + 1
End If
Loop
If Not lQ Then
xC.Offset(0, 2).Value = “нет цифр”
xC.Offset(0, 3).Value = 0
End If
End Sub
Дополнительно (в целях демонстрации работы макроса) в модуле листа надо разместить специальную процедуру следующего вида
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = “$A$1” Then ‘ адрес ячейки A1 взят только для примера
SpSeek Target
End If
End Sub
Вот собственно и вся подготовка (кстати повторно настраивать безопасность макросов уже никогда не потребуется).
Теперь вводите в ячейку A1 любой текст, хоть с цифрами, хоть без оных.
Результат решения будет показан в ячейках A3 (собственно искомая цифра если она есть в ячейке) и A4 (номер ее позиции в исходной строке).
Может быть мое описание выглядит длинным, но зато все понятно с точки зрения программирования без изучения мудреных Excel-функций-массивов.
P.S.
Программа тестировалась на Excel 2010 – все работает. А вот решение на функциях массива в случае отсутствия цифирей в ячейке выдаст “загадочный” ответ #Н/Д и понимай его как хочешь.
Найти первую ячейку с ненулевым значением в столбце |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |