Здравствуйте ещё раз. Опять возникла проблема. В приложенном примере в ячейке есть цифры и текст. Нужно выписать, а желательно и определить позицию, первый по порядку не числовой символ. В примере это будет "а". Голову сломал, но не нашёл как определять является ли тот или иной символ в ячейке текстом или числом? Помогите, пожалуйста.
Ошибаетесь, первый нечисловой символ на пятой позиции, второй нечисловой - пробел. Может, нужно определять последний числовой? А может, достаточно найти пробел? =ПСТР(B2;ПОИСК(" ";B2)+1;1)
Может быть несколько чисел, разделённых пробелом. Но после чисел всегда идут буквы. Может можно и последний числовой определять. Но как? ЕЧИСЛО не работает. Как?
Опять пытаетесь ввести в заблуждение. В показанном примере после чисел стоит пробел. Еще: буквы - одно слово или может быть несколько? Как правильно? Пример, а не огрызок, покажете?
Макрос, в столбце D - первая буква, в столбце Е - ее позиция
Код
Sub FirstBuk()
Dim RE As Object
Dim objMatches As Object
Dim i As Long
Set RE = CreateObject("VBScript.RegExp")
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
With RE
.Global = True: .IgnoreCase = False: .MultiLine = False
.Pattern = "[а-яё]"
If .test(Cells(i, 2)) Then
Cells(i, 4) = .Execute(Cells(i, 2))(0)
Set objMatches = .Execute(Cells(i, 2))
Cells(i, 5) = objMatches.Item(0).firstindex + 1
End If
End With
Next
End Sub
А как эта формула знает, что ей надо перебрать ВСЕ символы в ячейке? Простите, пожалуйста, читал объяснения там же, где взял формулу, но вот хоть убей не понимаю.
формула с использованием ДЛСТР знала что перебирать нужно все символы строки, а строка(1:50) - это надежда на то, что требуемый символ найдется среди первых 50-ти.
Вот Вам немассивная: =ПСТР(B2;МИН(ПОИСК({"а";"б";"в";"г";"д";"е";"ж"};B2&"абвгдеж"));1) Естественно, для контроля любой буквы/знака все эти буквы/знаки должны быть вписаны в массив констант (между фигурными скобками) и в добавку справа к значению В2
Игорь Гончаренко написал: иметь дело с числами длинною в 20 цифр или более
В задаче - числа с пробелами. Значит, возможно размещение нескольких чисел подряд суммарной длиной более 20. Автор пусть сам решает, что ему нужно. Информации предоставили достаточно.
потому что беглый взгляд на данные подсказывает что достаточно проверить 20-30 символов, добавляем запас (на всякий случай) и проверяем 50 первых символов. народная мудрость гласит что нужно проявлять бдительность и "лучше перебдеть на 20 символов, чем на 1 недобдеть!"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
В случае необходимости вывести ВСЕ буквы после цифры поможет следующая массивная формула {=ПСТР(A7;МАКС(ЕСЛИ(ЕЧИСЛО(--ПСТР(A7;СТРОКА($1:$50);1));СТРОКА($1:$50)))+1;ДЛСТР(A7))}
можно я сам поставлю 100 - вариант ниже (использовал приемы из вариантов участников обсуждения) (ну и своего немного внес, работает...а уж как и что - завтра сам не разберусь ) и конечно массивы...