Заполните формулу до последней строки в столбце

Я пытаюсь нарисовать формулу в ячейке M3 до конца набора данных.

Я использую столбец L в качестве своей базы, чтобы определить последнюю ячейку с данными. Моя формула - это объединение двух ячеек с текстовой запятой между ними.

Моя формула = G3 & "," & L3

Я хочу, чтобы Excel нарисовал эту формулу так, чтобы

Ячейка M4 будет = G4 & "," & L4
Ячейка M5 будет иметь вид = G5 & "," & L5 и т.д.

Мой код:

Range("$M$3").Formula = Range("G3") & (",") & Range("L3")

Dim Lastrow As Long

Application.ScreenUpdating = False

Lastrow = Range("L" & Rows.Count).End(xlUp).Row
Range("M4").FormulaR1C1 = Range("G4") & (",") & Range("L4")
Range("M4").AutoFill Destination:=Range("M4:M" & Lastrow)
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = True

Мой вывод сводит текстовые значения из ячейки M3 вплоть до конца набора данных. Я искал несколько часов, пытаясь найти исправление, но не могу найти то, что пытается добиться того, к чему я стремлюсь.

Ответ 1

Это один лайнер на самом деле. Не нужно использовать .Autofill

Range("M3:M" & LastRow).Formula = "=G3&"",""&L3"

Ответ 2

Для людей с похожим вопросом и найдите этот пост (как я и сделал); вы можете сделать это даже без остановки, если ваш набор данных отформатирован как таблица.

Range("tablename[columnname]").Formula = "=G3&"",""&L3"

Сделать это истинным одним лайнером. Надеюсь, это поможет кому-то!

Ответ 3

В качестве альтернативы вы можете использовать FillDown

Range("M3") = "=G3&"",""&L3": Range("M3:M" & LastRow).FillDown

Ответ 4

Замечательный ответ! Мне нужно было заполнить пустые ячейки в столбце, где были заголовки в ячейках, которые применялись к пустым ячейкам ниже до следующей ячейки заголовка.

Я использовал ваш код выше для разработки кода, который ниже моего примера. Я применил этот код как макрос ctl/shft/D, чтобы быстро запустить столбец, копирующий заголовки.

--- Пример таблицы ------------ Заголовок 1 копируется в строки 2 и 3; Заголовок 2 копируется в ячейки ниже него в строках 5 и 6. После второго запуска макроса активная ячейка является ячейкой Title3.

 ' **row** **Column1**        **Column2**
 '    1     Title1         Data 1 for title 1
 '    2                    Data 2 for title 1
 '    3                    Data 3 for title 1
 '    4     Title2         Data 1 for title 2
 '    5                    Data 2 for title 2
 '    6                    Data 3 for title 2
 '    7   Title 3          Data 1 for title 3

----- Код CopyDown ----------

Sub CopyDown()
Dim Lastrow As String, FirstRow As String, strtCell As Range
'
' CopyDown Macro
' Copies the current cell to any empty cells below it.   
'
' Keyboard Shortcut: Ctrl+Shift+D
'
    Set strtCell = ActiveCell
    FirstRow = strtCell.Address
' Lastrow is address of the *list* of empty cells
    Lastrow = Range(Selection, Selection.End(xlDown).Offset(-1, 0)).Address
'   MsgBox Lastrow
    Range(Lastrow).Formula = strtCell.Formula

    Range(Lastrow).End(xlDown).Select
 End Sub

Ответ 5

Новичок в VBA - нужна помощь

У меня есть код для объединения трех столбцов в листе различий для одной ячейки -

Sheets("Sheet2").Range("D2") = Sheets("Sheet2").Range("A2") & Sheets("Sheet2").Range("B2") & Sheets("Sheet2").Range("C2")

Я хочу повторить эту ячейку в течение п числа раз в листе Excel, пока строка не имеет значения - не в состоянии сделать это

Ответ 6

Я знаю, что это старый пост, но есть ли один слой для заполнения не формулой, а значением из ячейки выше, до последней строки листа (конец данных)

Я пробовал это, где в I3 у меня есть значение, и я хочу заполнить его автоматически: Sub Test() Dim ws As Worksheet С ws Range ("I3"). Диапазон автозаполнения ("I4: I" и ws.Cells(ws.Rows.Count, "A"). End (xlUp).Row) Конец с 'ws.Range("I3"). Автозаполнение "ws.Range(" I4: я "& ws.Cells(ws.Rows.Count," A "). End (xlUp).Row) End Sub Спасибо!

Ответ 7

Довольно много новичков VBA. Когда я увидел "один лайнер", я взял его буквально.

Обратите внимание, что вам все еще нужно выполнить Dim Lastrow и найти, что с кодом в OP и , а затем это однострочный.