Как добавить значения из таблицы 1 в значения в ячейках таблицы 2 и отобразить результат в таблице 2 после? - PullRequest
0 голосов
/ 22 сентября 2018

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

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

У меня есть две таблицы, таблица 1 содержит данные текущей недели, которые вводятся вручную, а таблица 2 должна содержать итоговую сумму, которая рассчитывается при нажатии кнопки макроса «Добавить».Я смог полностью настроить это сам, используя очень простой код, поэтому я прошу помощи.На данный момент код макроса очень грязный и абсолютно массивный, я смотрю на 242 объявленных значения переменных и в общей сложности 925 строк кода.

Ниже приведено упрощение и сокращение, но в основном, как все работает правильноnow: Каждая таблица содержит до 11 столбцов данных, по 11 строк в каждой, поэтому макрос добавляет ячейки B2 к L12 к ячейкам B29 к L39.Затем результаты отображаются в виде суммы в ячейках с B29 по L39.Код прямо сейчас:

Sub Add()
Dim Add As Integer
Dim var1 As Integer
Dim var2 As Integer
var1 = Range("B2").Value
var12 = Range("B29").Value
Add = var1 + var12
Range("B29").Select
ActiveCell.FormulaR1C1 = Add

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

Кто-нибудь может мне помочь упростить это, сделать его короче?Есть ли возможность суммировать все это в меньшем количестве строк кода, в меньшем количестве аргументов?

Заранее благодарен за любую помощь.

ОБНОВЛЕНИЕ: Как уже упоминалось ранее, код, который у меня сейчас есть, делаетработать, как задумано, но я бы хотел уменьшить громкость.Это слишком много, и я знаю, что можно сделать то же самое с гораздо меньшим, я просто не знаю как.Я структурировал код, чтобы его было немного легче читать: первый раздел объявляет переменные, следующий блок объявляет значения (разделенные на блоки в строке в таблице) и, наконец, вычисляет действие добавления таблицы A в таблицу B иотображение результата в таблице B (опять же, разделенных на блоки на строку в таблице).Спасибо всем за помощь.

Это полный код, написанный на данный момент

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

вы можете использовать PasteSpecial() метод со значением xlPasteSpecialOperationAdd для его Операция параметр

Range("B2:L12").Copy
Range("B29:L39").PasteSpecial Operation:=xlPasteSpecialOperationAdd
Application.CutCopyMode = False

или вы можете использовать массивы

    Dim i As Long, j As Long
    Dim var1 As Variant, var2 As Variant

    var1 = Range("B2:L12").Value
    var2 = Range("B29:L39").Value
    For i = 1 To UBound(var1, 1)
        For j = 1 To UBound(var1, 2)
            var2(i, j) = var2(i, j) + var1(i, j)
        Next
    Next
    Range("B29:L39").Value = var2
0 голосов
/ 22 сентября 2018

Попробуйте это:

Dim cell as Range
For each cell in Range("B29:L39")
    cell.Value = cell + cell.offset(-27).Value
Next
...