Здравствуйте !
Подскажите, пожалуйста, как лучше сделать ?
Есть столбец со значениями. Значения такого вида:
ACCURIDE 4x12 3x98 ВАЗ 1111 ET40 D58.6 Black
Нужно скопировать всё, что идёт после пробела после окончания слова, начинающегося с буквы D (в данном случае после D58.6_). После этого пробела может быть несколько слов ещё, не только одно слово (как Black в данном случае): количество этих слов в столбце разное.
Эту скопированную часть поместить в ячейку соседнего столбца. И потом выполнить его автозаполнение до конца. Или проходить циклом по каждой ячейке первого столбца с переносом скопированной части в соседний столбец.
Вроде как-то можно через .Pattern = , но не знаю, как это.
Создайте пустой файл, в ставьте в ячейку фразу и покажите, какой должен быть результат.
Или сделайте скрин-шот, если у вас нет возможности предоставить файл.
Прилагаю скрин, как должно получиться. Рядом с искомым третьим столбцом во 2-м столбце должны быть такие результаты.
Можно с помощью формулы сделать:
=ПСТР(" "&C1;ПОИСК(" ";" "&C1;НАЙТИ(" D";" "&C1)+1)+1;10000)
А для чего пробел в ячейку С1 ? =ПСТР(" "&C1
Нужно искать букву D в начале слова. Слово начинается после пробела.
Но буква D может в начале ячейки. Получается возможны две ситуации:
1) нужно искать D в начале ячейки;
2) нужно искать D после пробела.
Чтобы эти два условия привести к одному условию, спереди ячейки подставляется пробел.
В этом случае нужно искать букву D после пробела.
А как эту формулу
=ПСТР(" "&C1;ПОИСК(" ";" "&C1;НАЙТИ(" D";" "&C1)+1)+1;10000) записать в VBA ?
(Пробел в начале строки не нужен, т.к. там _D никогда не будет. И количество символов я сократил до 100).
Простая замена названий экселевских формул не подходит:
Range("B4").FormulaR1C1 = "=MID(C4,InStr(" ",C4,FIND(" D",C4)+1)+1,100)"
Вообще, искомое слово может быть в начале ячейки?
Может нет необходимости усложнять ситуацию, добавляя спереди пробел.
Вообще, искомое слово может быть в начале ячейки?
Нет. Но оно всегда идёт с пробелом перед ним.
Sub Макрос1()
Dim CellText As String, SearchText As String
Dim Cursor As Long
' Копирование текста в переменную.
CellText = "ACCURIDE 4x12 3x98 ВАЗ 1111 ET40 D58.6 Black"
' Поиск большой буквы D, у которой спереди есть пробел.
Cursor = InStr(CellText, " D")
' Если найдено.
If Cursor <> 0 Then
' Поиск пробела после найденного слова.
Cursor = InStr(Cursor + 1, CellText, " ")
' Если после искомого слова есть другое слово.
If Cursor <> 0 Then
SearchText = Mid(CellText, Cursor + 1)
End If
End If
End Sub
Спасибо большое !
А просто одной строкой, как в экселе функциями, и без условий, в VBA не получится, нет такого ?
Эксель-функции медленнее работают чем vba-функции.
Если один раз применить эксель-функцию, то будет быстро. Но если надо обработать 100 000 строк и больше, то будет долго, лучше использовать vba-функции.
Ага, спасибо. Тогда VBA, конечно.