Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: eric от 18 марта 2016, 20:48

Название: Excel Макрос: Как добавить текст в столбце в каждой строке в начале и конце?
Отправлено: eric от 18 марта 2016, 20:48
Всем привет!
Помогите пожалуйста с написанием макроса для excel.
Суть проблемы - есть таблица в которой в определенном столбце в каждой строке написаны предложения. Необходимо вставить текст (например "Хотите") в начале каждого предложения и текст в конце предложения (например "У меня есть").
Название: Re: Excel Макрос: Как добавить текст в столбце в каждой строке в начале и конце?
Отправлено: Администратор от 18 марта 2016, 20:59
Макрос
Sub Макрос1()

    Dim arr(), lr As Long, i As Long
   
   
    '1. Копирование данных из столбца A в массив.
    lr = Columns("A").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Row
    arr() = Range("A1").Resize(lr).Value
    '2. Изменение данных.
    For i = 1 To UBound(arr, 1) Step 1
        arr(i, 1) = "Хотите " & arr(i, 1) & " У меня есть"
    Next i
    '3. Вставка изменённых данных в эксель.
    Range("A1").Resize(UBound(arr, 1)).Value = arr()
    '4. Сообщение.
    MsgBox "Готово.", vbInformation

End Sub
[свернуть]
Название: Re: Excel Макрос: Как добавить текст в столбце в каждой строке в начале и конце?
Отправлено: eric от 18 марта 2016, 21:27
Спасибо. Это то, что мне было необходимо!
Название: Re: Excel Макрос: Как добавить текст в столбце в каждой строке в начале и конце?
Отправлено: Администратор от 18 марта 2016, 23:21
Есть еще такой вариант. Этот вариант зависит от стиля ссылок. Если в макросе используется стиль A1, то надо, чтобы был стиль ссылок A1 (то есть в заголовках столбцов должны быть буквенные (а не цифровые) обозначения столбцов).

Sub Макрос2()

    Dim lr As Long
   
    '1. Поиск последней строки.
    lr = Columns("A").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Row
    '2. Дописывание текста.
    Range("A1").Resize(lr).Value = _
        Application.Evaluate("""Хотите "" &" & Range("A1").Resize(lr).Address & "& "" У меня есть""")
    '3. Сообщение.
    MsgBox "Готово.", vbInformation

End Sub
Название: Re: Excel Макрос: Как добавить текст в столбце в каждой строке в начале и конце?
Отправлено: eric от 18 марта 2016, 23:53
А в чем отличия? Только в написании макроса или в его работе?
Название: Re: Excel Макрос: Как добавить текст в столбце в каждой строке в начале и конце?
Отправлено: Администратор от 19 марта 2016, 08:36
Я предложил второй вариант по следующей причине. В vba-массив нельзя записать много данных - происходит ошибка, и я подумал, что нужно использовать какой-то другой способ.
Но вчера я стал тестировать. Стал записывать в vba-массив целые столбцы (около 20 штук) и не возникало ошибки. И теперь я не понимаю, что происходит. У меня пока два предположения:
Название: Re: Excel Макрос: Как добавить текст в столбце в каждой строке в начале и конце?
Отправлено: eric от 19 марта 2016, 09:18
Ясно. У меня пока не возникло проблем при использовании 1-го варианта, все работает как нужно. Но если вдруг проблемы возникнут, буду знать, что есть запасной вариант.