Поиск первой нецифровой цифры в текстовом значении (Microsoft Excel)
У Тони есть набор данных на листе, который состоит из цифр и других символов. Например, у него может быть ячейка, содержащая «1234567Blue». Тони хочет определить позицию символа, в которой встречается первый нецифровой символ. В примере с текстом «1234567Blue» Тони хочет каким-то образом выяснить, что первый нецифровой символ находится в позиции 8.
Есть два основных способа получить желаемую ценность. Первый — использовать формулу массива для вычисления позиции. Следующая формула массива (вводимая с помощью Ctrl + Shift + Enter) будет работать в большинстве случаев:
=MATCH(TRUE,ISERROR(VALUE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))),0)
Эта формула массива не будет работать только в том случае, если ячейка A1 либо пуста, либо содержит строго числовое значение. Если ваш список может содержать этот тип данных (или вообще не содержать данных), вам следует рассмотреть возможность использования немного более длинной формулы массива:
=IF(LEN(A1)=0,0,MIN(IF(1ISNUMBER(1MID(A1,ROW(INDIRECT("A1:A"& LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))* (ISNUMBER(A1)=FALSE)
Помните, что это единственная формула массива, вводимая с помощью Ctrl + Shift + Enter. Он будет правильно обрабатывать экземпляры, в которых A1 не содержит нецифровых символов (например, в пустой ячейке или таком значении, как «123»).
Конечно, есть еще один способ узнать позицию первого нецифрового символа — это создать пользовательскую функцию. Есть много разных способов реализации такого макроса. Один из самых простых способов реализовать макрос — просто пройти по каждому символу в том, что передается в макрос. Когда обнаруживается символ, выходящий за пределы диапазона кода ASCII для цифр (от 48 до 57), вы знаете, что нашли первую позицию. Следующий макрос показывает способ использования этого типа техники:
Function FirstNonDigit(str As String) Dim iChar As Integer Dim iPos As Integer Dim J As Integer Application.Volatile iPos = 0 For J = 1 To Len(str) iChar = Asc(Mid(str, J, 1)) If iChar <= 47 Or iChar >= 58 Then iPos = J Exit For End If Next J FirstNonDigit = iPos End Function
Чтобы использовать эту функцию, просто используйте такую формулу на рабочем листе:
=FirstNonDigit(A1)
Если ячейка, на которую вы ссылаетесь, пуста или содержит только цифры, функция возвращает значение 0.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (3364) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:
link: / excelribbon-Finding_the_First_Non-Digit_in_a_Text_Value [Поиск первой нецифровой цифры в текстовом значении]
.