Я сделал макрос, который копирует два столбца динамической таблицы с одного рабочего листа на другой. На втором листе я хочу вычесть эти два столбца и вставить результат в отдельный столбец/вектор. Все это должно быть динамическим, так как я планирую запускать макрос один раз в день.
Ближе всего я пришел к следующему коду:
Sub Makro2()
Dim ws_3 As Worksheet
Set ws_3 = ThisWorkbook.Worksheets(2)
Application.CutCopyMode = False
ws_3.Range("E3:E400").FormulaR1C1 = "=RC[-2]-RC[-1]"
End Sub
Так что на самом деле мне нужно, чтобы E3:E400 был динамическим, поскольку диапазон двух других столбцов меняется каждый день.
PS. Относительно новый в VBA.
Используйте последнюю строку из столбца D, на SO есть несколько примеров
Определены ли диапазоны с помощью диспетчера имен как динамические диапазоны?
См. ответ GMalc ниже, который должен вам помочь. Кроме того, в вашем коде нет функции копирования и вставки, поэтому вам не нужна строка кода Application.CutCopyMode = False
.
Это просто основа, убедитесь, что вы объявили свою переменную.
Dim lRow As Long
lRow = Range("D" & Rows.Count).End(xlUp).Row
Range("E3:E" & lRow).FormulaR1C1 =
Вы можете попробовать:
Option Explicit
Sub test()
Dim wsSource As Worksheet, wsDestination As Worksheet
Dim LastRow1 As Long, LastRow2 As Long, rng1 As Range, rng2 As Range, LastColumn As Long
With ThisWorkbook
Set wsSource = .Worksheets("Sheet1") '<- Data appears here
Set wsDestination = .Worksheets("Sheet2") '<- Data will be copy here
End With
With wsSource
'Let's say the two columns we want to copy is column A & B. Find Last row of A & B
LastRow1 = .Cells(.Rows.Count, "A").End(xlUp).Row
LastRow2 = .Cells(.Rows.Count, "B").End(xlUp).Row
'Create the ranges you want to copy
Set rng1 = .Range("A1:A" & LastRow1)
Set rng2 = .Range("B1:B" & LastRow2)
End With
With wsDestination
'Paste column after the last column of row 1. Find last column row 1
LastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
rng1.Copy
.Cells(1, LastColumn + 1).PasteSpecial xlPasteValues
rng2.Copy
.Cells(1, LastColumn + 2).PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
End Sub
Каким образом изменяются два диапазона? Изменяются ли они в размере? Позиция? В столбце есть пустые ячейки?