2015-09-22 5 views
1

Я пытаюсь скопировать формулы с относительными именами строк и столбцов.Копировать относительную формулу в excel с VBA

У меня есть базовый столбец с 10 формулами, и я пытаюсь скопировать формулу 5 раз по столбцам справа.

Так, например, в базовой колонке у меня есть эта формула = A1 + B1, и я хочу сделать следующую ячейку this = B1 + C1 next = C1 + D1 и так далее.

У меня есть этот код

For i = 1 To Range("B1").Value 
     For j = 1 To 10 
      Sheet2.Cells(5 + j, 2 + i).FormulaR1C1 = "=c[-1]" 
     Next j 
Next i 

Но это только копирует значение из левой ячейки

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

Это одна из реальных формул

='Balance sheet'!B13*360/'P&L'!B2 

Я хочу следующую ячейку, чтобы быть

='Balance sheet'!C13*360/'P&L'!C2 

И с кодом я есть сейчас рядом клетка =B3

+0

Если '= A1 + B1',' = B1 + C1' и '= С1 + D1' вводятся в трех соседних горизонтальных клеток, это та же формула, как что касается Excel (он выглядит одинаково в нотации R1C1). Пожалуйста, дайте более подробную информацию о макете листа. – GSerg

+0

сделайте это уравнение '' = r [0] c [-1] + r [0] c [0] "' –

+0

@ScottCraner Im пытается сделать динамические формулы. Это не только формула, у меня есть 10 различных формул, и они представлены в базовом столбце. – madeye

ответ

3

Если вы хотите скопировать формула вправо, которая может быть выполнена с помощью операции fill. Так что с вашей формуле в ячейке, определяемой базовой строки и базового столбца, а вместе с ним с помощью относительной адресации, как в вашем вопросе, просто:

Option Explicit 
Sub foo() 
    Const lBaseColumn As Long = 3 
    Const lBaseRow As Long = 6 
    Const lRpts As Long = 10 

Cells(lBaseRow, lBaseColumn).Resize(columnsize:=lRpts).FillRight 

End Sub 

Следует отметить, что вы можете FillRight из нескольких строк сразу, если это это то, что вам нужно сделать. Ниже будет заполнить С6: С10 до L6: L10

Option Explicit 
Sub foo() 
    Const lBaseColumn As Long = 3 
    Const lBaseRow As Long = 6 
    Const lColRpts As Long = 10 
    Const lRows As Long = 5 

Cells(lBaseRow, lBaseColumn).Resize(rowsize:=lRows, columnsize:=lColRpts).FillRight 

End Sub 
+0

@ Ваш комментарий не содержит достаточной информации для устранения неполадок. Я предлагаю вам задать ** вопрос **, в котором излагаются ваши проблемы. Чтобы максимально увеличить вероятность своевременного ответа, я предлагаю вам просмотреть страницы HELP для получения информации о [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to -ask) и [Как создать минимальный, полный и проверяемый пример] (http: // stackoverflow.com/help/mcve), чтобы ваш вопрос и образец данных попали в руководство форума. –

0

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

Range(refCellID).Offset(0,-1).Copy 
Range(refCellID).PasteSpecial 
Смежные вопросы