Excel Макрос: Как добавить текст в столбце в каждой строке в начале и конце?

Автор eric, 18 марта 2016, 20:48

eric

Всем привет!
Помогите пожалуйста с написанием макроса для excel.
Суть проблемы - есть таблица в которой в определенном столбце в каждой строке написаны предложения. Необходимо вставить текст (например "Хотите") в начале каждого предложения и текст в конце предложения (например "У меня есть").

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

Макрос
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
[свернуть]

eric


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

Есть еще такой вариант. Этот вариант зависит от стиля ссылок. Если в макросе используется стиль 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

eric

А в чем отличия? Только в написании макроса или в его работе?

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

Я предложил второй вариант по следующей причине. В vba-массив нельзя записать много данных - происходит ошибка, и я подумал, что нужно использовать какой-то другой способ.
Но вчера я стал тестировать. Стал записывать в vba-массив целые столбцы (около 20 штук) и не возникало ошибки. И теперь я не понимаю, что происходит. У меня пока два предположения:

  • произошло обновление "MS Office", которое позволяет теперь записывать в vba-массив много данных;
  • я перешёл на 64-разрядную виндоус (сам Office у меня 32-разрядный) и может это повлияло.

eric

Ясно. У меня пока не возникло проблем при использовании 1-го варианта, все работает как нужно. Но если вдруг проблемы возникнут, буду знать, что есть запасной вариант.