Скопировать значение ячейки после заданного слова

Автор Волх, 02 сентября 2024, 14:24

Волх

Здравствуйте !
Подскажите, пожалуйста, как лучше сделать ?
Есть столбец со значениями. Значения такого вида:

ACCURIDE 4x12 3x98 ВАЗ 1111 ET40 D58.6 Black

Нужно скопировать всё, что идёт после пробела после окончания слова, начинающегося с буквы D (в данном случае после D58.6_). После этого пробела может быть несколько слов ещё, не только одно слово (как Black в данном случае): количество этих слов в столбце разное.
Эту скопированную часть поместить в ячейку соседнего столбца. И потом выполнить его автозаполнение до конца. Или проходить циклом по каждой ячейке первого столбца с переносом скопированной части в соседний столбец.

Вроде как-то можно через .Pattern = , но не знаю, как это.

Администратор

Создайте пустой файл, в ставьте в ячейку фразу и покажите, какой должен быть результат.
Или сделайте скрин-шот, если у вас нет возможности предоставить файл.

Волх

Прилагаю скрин, как должно получиться. Рядом с искомым третьим столбцом во 2-м столбце должны быть такие результаты.

Администратор

Можно с помощью формулы сделать:
=ПСТР(" "&C1;ПОИСК(" ";" "&C1;НАЙТИ(" D";" "&C1)+1)+1;10000)

Волх


Администратор

Нужно искать букву 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-функции.

Волх