Это продолжение вопроса из моего исходного вопроса, которое помогло мне решить первую часть моего сценария: Автозаполнение неизвестного количества ячеек .
Вторая часть моего сценарияобъединить неизвестное количество ячеек.Используя логику из первого вопроса, я пытался изменить свой сценарий на этот myconcatenate = ActiveCell.FormulaArray = "=Concatenate("A5", mylastcell_4)"
, но это приводит к синтаксической ошибке .
Первоначально мне дали этот фрагмент сценария, которыйработал нормально сам по себе, но не работает при добавлении в конец моего скрипта
Do
myconcatenate = myconcatenate & ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop Until ActiveCell.Address = mylastcell_5
Range("A5").Select
ActiveCell.Value = myconcatenate
Это дает ошибка времени выполнения '1004' Ошибка приложения или объекта и перейдет к самой последней ячейке в строке 5 (хотя у меня только 5 в настоящее время занято в строке 1) и ничего не делает, пока она проходит через все ячейки.Иногда он выполняет первый бит сценария (добавляет '' к значениям ячейки), а иногда нет.
Вот мой полный сценарий для контекста: Снимок экрана полного сценария
В конечном итоге я пытаюсь перейти из списка abcdedf в «a», «b», «c», «d», «e», «f», в одну ячейку.
Изображение конечной цели:
строка 5, ячейка D, дает окончательный ответ, который мне нужен, E5 будет mylastcell_5
Это мой первый деньна VBA, и я потратил целый день на поиски ответов на вопросы, но это ничего не дало для меня.
ОБНОВЛЕНИЕ: Я объявил mylastcell_5, который у меня не былоне было сделано ранее.Теперь я не получаю ошибки в сценарии, и он просто зависает на A5, а не идет в самый конец страницы, но на самом деле он не объединяется.
Так что я думаю, что каким-то образомМне нужно изменить цикл так, чтобы он записывал в строку 5, а читал из строки 4 ... но я не знаю, как это сделать.
Option Explicit
Sub concat()
'
' concat Macro
' 'text','text'
'
' Keyboard Shortcut: Ctrl+Shift+C
'
With ThisWorkbook.Worksheets("Sheet1")
Dim mylastcell_1 As String, mylastcell_2 As String, mylastcell_3 As String, mylastcell_4 As String, mylastcell_5 As String, myconcatenate As String, myconcatenate1 As String
Range("A1").Select
Selection.End(xlToRight).Select
mylastcell_1 = ActiveCell.Address
Range(mylastcell_1).Select
ActiveCell.Offset(1, 0).Select
mylastcell_2 = ActiveCell.Address
Range(mylastcell_2).Select
ActiveCell.Offset(1, 0).Select
mylastcell_3 = ActiveCell.Address
Range(mylastcell_3).Select
ActiveCell.Offset(1, 0).Select
mylastcell_4 = ActiveCell.Address
Range(mylastcell_4).Select
ActiveCell.Offset(1, 0).Select
mylastcell_5 = ActiveCell.Address
myconcatenate = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Range("A2").Select
Selection.End(xlToRight).Select
Range("A2").Select
Range("A2", mylastcell_2).Select
Selection.FormulaArray = "''"
Range("A3").Select
Range("A3", mylastcell_3).Select
Selection.FormulaArray = "'',"
Range("A4").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(R[-2]C,R[-3]C,R[-1]C)"
Range("A4").Select
.Range(.Cells(4, "A"), .Cells(1, .Columns.Count).End(xlToLeft).Offset(3, 0)).Formula = "=concatenate(a2, a1, a3)"
Range("A5").Select
Do
myconcatenate = myconcatenate & ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop Until ActiveCell.Address = mylastcell_5
Range("A5").Select
ActiveCell.Value = myconcatenate
End With
End Sub