VBA скопировать формулу в несколько ячеек - PullRequest
0 голосов
/ 01 января 2019

Я знаю способы использования ".PasteSpecial xlPasteFormulas" или "range.AutoFill", но я пытаюсь найти способ использовать переменную массива.

Я хочу скопировать формулы в диапазоне C4:От D4 до диапазона C7: D11, который имеет несколько диапазонов.

C4 = A4+B4
D4 = Average(A4:C4)

Итак, я сделал скрипт vba следующим образом.

Sub test()
Dim  v
v = Range("C4:D4").FormulaR1C1
Range("C7:D11").FormulaR1C1 = v
End Sub

После запуска vba, формулы в c7 и d7как я и ожидал.

c7 = a7 + b7
d7 = average(A7:C7)

, но формулы других ячеек были странными

c8 = a9 + b9
d8 = average(A9:C9)
c9 = a11 + b11
d9 = average(A11:C11)

и т. д. *

Мои вопросыявляются: 1. Почему это происходит?2. Любое предложение о способе копирования некоторых формул в несколько диапазонов путем использования переменной массива?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Кажется, что Excel увеличивает выбранный диапазон формулы на 1 и начинает с 0 в C7: D7, поэтому они отображаются правильно.

Думаю, вы можете это исправить, выполнив следующее:

for x = 7 To 11 
    Cells(x, 3).FormulaR1C1 = Range("C4").FormulaR1C1
    Cells(x, 4).FormulaR1C1 = Range("D4").FormulaR1C1
next x

Если это не сработает, попробуйте написать формулы в коде vba.

пример:

for x = 7 To 11 
Cells(x, 3).value = Cells(x, 2).value + Cells(x, 1).value
Cells(x, 4).value = (Cells(x, 3).value + Cells(x, 2).value + Cells(x, 1).value)/3
next x
0 голосов
/ 01 января 2019

Кажется, вы нашли ошибку в Excel VBA.С другой стороны, если мы читаем свойство Range.FormulaR1C1 (Excel) в режиме выбора нитей, то в

Установка формулы для диапазона из нескольких ячеек заполняет все ячейки вдиапазон с формулой.

«формула» также может читаться как « one формула».Никогда не говорилось, что мы можем установить несколько формул для диапазона из нескольких ячеек.

Так что, кажется, единственный способ сделать это в двух частях:

Sub test()
 Dim v As Variant
 v = Range("C4").FormulaR1C1
 Range("C7:C11").FormulaR1C1 = v
 v = Range("D4").FormulaR1C1
 Range("D7:D11").FormulaR1C1 = v
End Sub

Это все равно должно быть быстреечем с помощью копирования / вставки через буфер обмена или установки формул с помощью циклов.

...