2016-08-24 6 views
0

Data SampleExcel VBA выберите новый usedrange часть колонны

Привет всем.

Мне нужна ваша помощь.

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

Я немного из своей лиги с этой строкой кода, я понимаю, что она делает, но я ее не писал.

Sheets("Closed Loop").Range(varPastePos).Offset(0, 2).Resize(ActiveSheet.UsedRange.Rows.Count - 1, columnsize:=1).FormulaR1C1 = "My Formula" 

varPastePos это положение новые данные вставили, в данном случае $F$28

Любые идеи?

+1

простой альтернативой является форматирование диапазон в виде таблицы (вкладка «Главная»> «Формат как таблица»), так что формулы автоматически заполняются при добавлении новой строки в таблицу. – Slai

+0

Изучение формата трески e читаемым способом будет творить чудеса для вашей способности действительно читать код. –

+0

@Pieter Geerkens, который не будет действительным кодом в VBA, поэтому людям будет сложно скопировать его – Slai

ответ

0

Использовать Range().FillDown для расширения существующей формулы.

Dim lastRow As Long 
lastRow = Range("F" & Rows.Count).End(xlUp).Row 
Range("A2", "A" & lastRow).FillDown 

Вы можете FillDown несколько столбцов сразу, как это:

Range("A2", "D" & lastRow).FillDown 

Вы можете сделать все это в одной строке, как это:

Range("A2", Range("F" & Rows.Count).End(xlUp)).FillDown

+0

Спасибо, я пытался получить все это в одной строке кода, но между вами и Slai кажется, что это невозможно. У меня не будет времени, чтобы работать над этим снова до следующей недели, но я попробую оба варианта. –

+0

@HelenRolls Я обновил свой ответ одним лайнером. –

+0

Спасибо за это. FillDown зависит от содержимого в соседнем столбце, не так ли? –

0

.UsedRange также будет содержать отформатированные пустые ячейки, поэтому он не является надежным для поиска последней используемой строки.

Set ws = Sheets("Closed Loop") 
Set cell1 = ws.Range(varPastePos) ' F28 
Set cell2 = cell1.End(xlDown)  ' F32 ? the last cell with data below F28. Similar to clicking on F28 and pressing Ctrl + down 
Set rngF = ws.Range(cell1, cell2) ' F28:F32 
Set rngH = rngF.Offset(, 2)  ' H28:H32 
rngH.FormulaR1C1 = "My Formula" 
+0

Спасибо, я пытался получить все в одной строке кода, но между вами и Slai, кажется, что это невозможно. У меня не будет времени, чтобы работать над этим снова до следующей недели, но я попробую оба варианта. –

+0

@HelenRolls может быть что-то вроде 'Range (['Closed Loop'! F28], ['Closed Loop'! F28] .End (xlDown)). Offset (, 2) .FormulaR1C1 =" Моя формула "' – Slai

+0

Спасибо за ваш вход. –

Смежные вопросы