Добавление ячеек в двух диапазонах, которые расположены на двух разных листах - PullRequest
1 голос
/ 27 июля 2011

Я пытаюсь суммировать соответствующие значения ячеек в двух диапазонах и заменить значения в одном из диапазонов суммой.См. Мой фрагмент кода ниже:

For i = 1 To daterow.Rows.count - 1
    If (outinter - diff) > 0.5 Then
         diff = diff + DateDiff("n", Indt(i - 1), Indt(i))
         Y = Sheets("output").Cells(Rows.count, 1).End(xlUp).row + 1
         Set inputRng = Sheets("Input").Range(Sheets("Input").Cells(i, 7), _
                        Sheets("input").Cells(i, ngag + 6))
         Set outputRng = Sheets("Output").Range(Sheets("Output").Cells(Y, 6), _
                        Sheets("Output").Cells(Y, ngag + 5))
         outputRng.value = Evaluate(outputRng.Address & "+" & inputRng.Address)
    Else
         'Some Code here
    End If
Next

Итак, я установил два диапазона (inputRng и outputRng) в строках 5 и 6. inputRng из листов («Input») и outputRng из Sheets («output»«).Когда я запускаю код, функция «Evaluate» (строка 7) суммирует диапазоны, но вот проблема:

Оба диапазона получены из одного листа, и так как я нахожусь в листах («вход») во времяВ этом расчете значения как для inputRng, так и для outputRng выводятся из листов («input»).Когда я переписываю строку 7 следующим образом:

sheets("output").outputRng.value = Evaluate(sheets("output").outputRng.Address _
                                  & "+" & sheets("input").inputRng.Address)

, я получаю сообщение об ошибке «Объект не поддерживает это свойство или метод».Есть ли другой способ заставить код читать outputRng из моих листов («output»)?

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

Любая мысль будет принята с благодарностью.Спасибо за просмотр.

MPD


Решение

Упс, сервер не дал мне ответить на вопрос, Итак, яВместо этого я размещаю решение здесь:

Спасибо всем за ваш вклад.На самом деле последний комментарий Excellll поразил меня!Итак, вот как я это заработал:

Dim value() As Variant
Dim shtIn As Worksheet, shtOut As Worksheet
Set shtIn = Sheets("Input")
Set shtOut = Sheets("Output")
Redim Value(daterow.Rows.count - 1)

For i = 1 To daterow.Rows.count - 1
    If (outinter - diff) > 0.5 Then
      diff = diff + DateDiff("n", Indt(i - 1), Indt(i))
      Y = shtOut.Cells(Rows.count, 1).End(xlUp).row + 1
      Set inputrng = shtIn.Range(shtIn.Cells(i, 7), shtIn.Cells(i, ngag + 6))
      Set outputRng = shtOut.Range(shtOut.Cells(Y, 6), shtOut.Cells(Y, ngag + 5))
      value = Evaluate("Output!" & outputRng.Address & "+" _
                  & "Input!" & inputrng.Address)
      shtOut.Range(shtOut.Cells(Y, 6), shtOut.Cells(Y, ngag + 5)) = value
    Else
      'Some Code here
    End If
Next

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

1 Ответ

1 голос
/ 27 июля 2011

Почему бы не использовать это в строке 7 вместо этого?

 outputRng = outputRng.Value + inputRng.Value

РЕДАКТИРОВАТЬ:

Вы можете сделать себе одолжение ради отладки, объявив пару объектов Worksheet и пару Rangeобъекты.

Dim shtIn As Worksheet, shtOut As Worksheet
Dim rngIn As Range, rngOut As Range
Set shtIn = Sheets("Input")
Set shtOut = Sheets("Output")
Set rngIn = shtIn.Range("Input")
Set rngOut = shtOut.Range("Output")

Затем используйте эти диапазоны в своем коде вместо повторяющихся конструкций Sheets("...").Range("...").

...