Всем привет!
Помогите пожалуйста с написанием макроса для 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
Спасибо. Это то, что мне было необходимо!
Есть еще такой вариант. Этот вариант зависит от стиля ссылок. Если в макросе используется стиль 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
А в чем отличия? Только в написании макроса или в его работе?
Я предложил второй вариант по следующей причине. В vba-массив нельзя записать много данных - происходит ошибка, и я подумал, что нужно использовать какой-то другой способ.
Но вчера я стал тестировать. Стал записывать в vba-массив целые столбцы (около 20 штук) и не возникало ошибки. И теперь я не понимаю, что происходит. У меня пока два предположения:
- произошло обновление "MS Office", которое позволяет теперь записывать в vba-массив много данных;
- я перешёл на 64-разрядную виндоус (сам Office у меня 32-разрядный) и может это повлияло.
Ясно. У меня пока не возникло проблем при использовании 1-го варианта, все работает как нужно. Но если вдруг проблемы возникнут, буду знать, что есть запасной вариант.