#vba #excel
#vba #excel
Вопрос:
Я пытаюсь объединить значения столбцов (1, 2, 3). Результат должен быть в столбце (4). Существует n строк, для которых должна быть произведена конкатенация. С помощью кода, который я создал, обрабатывается каждая строка, но результат в каждой ячейке результата добавляется и дополняется. Что я сделал не так?
Sub insertStatement()
Dim row As Integer
Dim lrow As Integer
Dim x As String
Dim cel As Range
Dim rng As Range
Sheets("INSERT").Select
row = 1
lrow = Cells(Rows.Count, 1).End(xlUp).row
Do While Cells(row, "A").Value <> ""
With Worksheets("INSERT")
Set rng = Range(.Cells(1, 1), .Cells(lrow, 3))
End With
x = ""
For Each cel In rng
x = x amp; cel.Value
Next
Sheets("Insert").Cells(row, 4).Value = x
row = row 1
Loop
End Sub
Комментарии:
1. Если вы поставите
Debug.Print rng.Address
передx = ""
, вы поймете почему.
Ответ №1:
Попробуйте ниже для достижения этой простой цели.
Sub insertStatement()
Const sFormulaR1C1 = "=CONCATENATE(RC[-3],RC[-2],RC[-1])"
Dim lLastRow As Long
With ThisWorkbook.Worksheets("INSERT")
lLastRow = .Cells(Rows.Count, "A").End(xlUp).row
.Range("D1:D" amp; lLastRow).FormulaR1C1 = sFormulaR1C1
End With
End Sub
Комментарии:
1. Я никогда не думал о таком способе решения моей проблемы. Я должен изучить то, что вы предложили, но самое главное, это работает!
2. Приятно слышать, что вы это изучите, это сочетает в себе встроенную в Excel функцию =concatenate(text1, text2 и т.д.) и использование VBA для заполнения формул за один раз (с относительной формулой).
Ответ №2:
В строке, где вы устанавливаете свой диапазон…
Set rng = Range(.Cells(1, 1), .Cells(lrow, 3))
…вы каждый раз используете строку 1, столбец 1 в качестве начальной точки. Хотелось бы предложить следующее…
Set rng = Range(.Cells(row, 1), .Cells(lrow, 3))
Комментарии:
1. Спасибо. Я протестировал код, и теперь он конкатенирует последнюю строку и использует это значение для каждой строки?
2. Когда я использую row вместо lrow в первом диапазоне ячеек, это работает. Спасибо!
3. Я вижу — это имеет смысл — спасибо за корректировку — редактирование ответа.