Я пытаюсь суммировать соответствующие значения ячеек в двух диапазонах и заменить значения в одном из диапазонов суммой.См. Мой фрагмент кода ниже:
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
Итак, вместо того, чтобы записывать сумму в диапазон на другом листе, я сохранил ее в массив, а затем перевел массив в диапазон вывода, которыйЯ мог бы обойтись без зацикливания.