Страницы: 1
RSS
Выписать из ячейки первую букву после чисел
 
Здравствуйте ещё раз.
     Опять возникла проблема. В приложенном примере в ячейке есть цифры и текст. Нужно выписать, а желательно и определить позицию, первый по порядку не числовой символ. В примере это будет "а". Голову сломал, но не нашёл как определять является ли тот или иной символ в ячейке текстом или числом? Помогите, пожалуйста.
Изменено: Дед_Мазай - 13.08.2016 20:39:03
 
Ошибаетесь, первый нечисловой символ на пятой позиции, второй нечисловой - пробел.
Может, нужно определять последний числовой? А может, достаточно найти пробел?
=ПСТР(B2;ПОИСК(" ";B2)+1;1)
 
Цитата
vikttur написал: найти пробел?
Может быть несколько чисел, разделённых пробелом. Но после чисел всегда идут буквы. Может можно и последний числовой определять. Но как? ЕЧИСЛО не работает. Как?
 
Цитата
Дед_Мазай написал: после чисел всегда идут буквы
Опять пытаетесь ввести в заблуждение. В показанном примере после чисел стоит пробел.
Еще: буквы - одно слово или может быть несколько? Как правильно? Пример, а не огрызок, покажете?

Цитата
ЕЧИСЛО не работает
Вас обманули. Работает. Но в формуле массива.
 
Цитата
vikttur написал: В показанном примере после чисел стоит пробел.
Да он всегда там стоит. но и числа могут разделяться пробелом.
Цитата
vikttur написал: буквы - одно слово или может быть несколько?
А это важно, если мне нужна позиция первой буквы и выписать её? Ну слов действительно может быть несколько.
Цитата
vikttur написал: Вас обманули. Работает
У меня всегда ЛОЖЬ показывает. Может неправильно делаю проверку символов на принадлежность к цифрам?
 
вариант функции в D1
Код
Function uuu$(t$)
 With CreateObject("VBScript.RegExp"): .Pattern = "[а-яё]"
    uuu = .Execute(t)(0)
 End With
End Function
Изменено: sv2013 - 13.08.2016 21:21:43
 
Цитата
У меня всегда ЛОЖЬ показывает
Отсюда не видно.
Цитата
Пример, а не огрызок, покажете?
 
sv2013,
К сожалению, нужна именно формула.
Изменено: Дед_Мазай - 13.08.2016 21:24:45
 
Цитата
vikttur написал: Пример, а не огрызок, покажете?
Простите. Вот
 
Почему в ячейке В5 первая буква б , если есть на третьей позиции есть г
 
Цитата
Kuzmich написал:
Почему в ячейке В5 первая буква б , если есть на третьей позиции есть г
г - это опечатка. Между цифрами не может быть букв. Вот исправленный пример
 
Макрос, в столбце 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
 
Цитата
Kuzmich написал: Макрос
Цитата
Дед_Мазай написал: нужна именно формула.
Писал же. Нужна именно формула. Пока что смог доработать под себя формулу отсюда
Код
=ПОИСКПОЗ(ИСТИНА;КОДСИМВ(ПСТР(A1;СТРОКА(СМЕЩ(A1;;;ДЛСТР(A1)));1))>191;)

Но может можно как-то попроще? Вторую формулу оттуда же не проверял.
 
Формула массива:
=ПСТР(B2;МАКС(ЕСЛИ(ЕЧИСЛО(--ПСТР(B2;СТРОКА(1:50);1));СТРОКА(1:50)))+2;1)
 
Цитата
Дед_Мазай написал:
ПСТР(A1;СТРОКА(СМЕЩ(A1;;;ДЛСТР(A1)));1
А как эта формула знает, что ей надо перебрать ВСЕ символы в ячейке? Простите, пожалуйста, читал объяснения там же, где взял формулу, но вот хоть убей не понимаю.
Изменено: Дед_Мазай - 13.08.2016 22:34:12
 
Цитата
vikttur написал: СТРОКА(1:50)
Что это значит? И что конкретно значат цифры внутри формулы СТРОКА, конкретнее цифра 50?
 
СТРОКА(1:50) - массив чисел с 1 по 50
 
цифра 50 значит что это число 50.

формула с использованием ДЛСТР  знала что перебирать нужно все символы строки, а строка(1:50) - это надежда на то, что требуемый символ найдется среди первых 50-ти.
Изменено: Игорь Гончаренко - 13.08.2016 23:13:30
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Игорь Гончаренко написал:
значит что это число 50.
Почему именно 50, а не 40 и не 20?
 
Цитата
Игорь Гончаренко написал: ДЛСТР  знала что перебирать нужно все символы строки
1. Может ПСТР?
2. Откуда она это знала? Я не понимаю. Там же не сказано ПСТР каждый символ. Тогда откуда?
Цитата
vikttur написал: Формула массива:
А немассивная существует?
Изменено: Дед_Мазай - 13.08.2016 23:30:17
 
ПСТР(от 1 до 50-го символа
а с ДЛСТР
ПСТР(от 1 на всю длину строки

не массивных формул полно, но они не решают Вашу задачу
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Вот Вам немассивная:
=ПСТР(B2;МИН(ПОИСК({"а";"б";"в";"г";"д";"е";"ж"};B2&"абвгдеж"));1)
Естественно, для контроля любой буквы/знака все эти буквы/знаки должны быть вписаны в массив констант (между фигурными скобками) и в добавку справа к значению В2
 
Цитата
Дед_Мазай написал:
Почему именно 50, а не 40 и не 20?
?
 
Задаем количество проверяемых символов. Если 20, начало строки с цифрами может оказаться длиннее и, естественно, до букв не дойдем
 
а сколько раз в жизни Вам доводилось иметь дело с числами длинною в 20 цифр или более???
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Игорь Гончаренко написал: иметь дело с числами длинною в 20 цифр или более
В задаче - числа с пробелами. Значит, возможно размещение нескольких чисел подряд суммарной длиной более 20.
Автор пусть сам решает, что ему нужно. Информации предоставили достаточно.
 
почему 50, а не 20?

потому что беглый взгляд на данные подсказывает что достаточно проверить 20-30 символов, добавляем запас (на всякий случай) и проверяем 50 первых символов.
народная мудрость гласит что нужно проявлять бдительность и "лучше перебдеть на 20 символов, чем на 1 недобдеть!"  
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
В случае необходимости вывести ВСЕ буквы после цифры поможет следующая  массивная формула
{=ПСТР(A7;МАКС(ЕСЛИ(ЕЧИСЛО(--ПСТР(A7;СТРОКА($1:$50);1));СТРОКА($1:$50)))+1;ДЛСТР(A7))}
 
Цитата
написал:
взгляд
Да не жадничайте, поставьте уже человеку 100! :)

можно я сам поставлю 100 - вариант ниже (использовал приемы из вариантов участников обсуждения)
(ну и своего немного внес, работает...а уж как и что - завтра сам не разберусь :)  )
и конечно массивы...

Дедушко Мазай - задавай свои каверзные вопросы!
Изменено: ВовавВова - 06.01.2025 13:45:16
недавно познакомился с Excel
Страницы: 1
Читают тему
Наверх