Как вычесть два динамических диапазона и вставить их в другую ячейку

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

Ближе всего я пришел к следующему коду:

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.

Каким образом изменяются два диапазона? Изменяются ли они в размере? Позиция? В столбце есть пустые ячейки?

Tim Stack 09.04.2019 14:18

Используйте последнюю строку из столбца D, на SO есть несколько примеров

GMalc 09.04.2019 14:23

Определены ли диапазоны с помощью диспетчера имен как динамические диапазоны?

PeterT 09.04.2019 14:24

См. ответ GMalc ниже, который должен вам помочь. Кроме того, в вашем коде нет функции копирования и вставки, поэтому вам не нужна строка кода Application.CutCopyMode = False.

shrivallabha.redij 09.04.2019 14:38
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
4
407
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это просто основа, убедитесь, что вы объявили свою переменную.

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

Другие вопросы по теме