2015-01-22 3 views
0

Я пытаюсь запустить в ячейке «B2», вставить формулу, которая переводит ячейку слева от «B2», которая является «A2», умноженная на число на другой лист ..Excel VBA для формулы цикла с относительной ссылкой ячейки

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

Sub RelFormula() 

For Col = 1 To 2 
    For Row = 2 To 6 
     Cells(Row, Col).Formula = "=" & Cells.Offset(0, -1).Value & "*" worksheets("output").range("A1") 
    Next Row 
Next Col 

End Sub 
+0

Похоже, вам не хватает амперсанд после цитируемого звездочки. – Jeeped

+0

Это была опечатка при задании вопроса, у меня есть амперсанд в моем коде, и он все еще не работает. – Brian

+1

Не рекомендуется использовать переменную с именем, которое дублирует * зарезервированное слово *; в этом случае 'Row'. – Jeeped

ответ

2

Вам не нужно offset, вы можете просто -1 из столбца аргумента Cells. Вы также пропустили аргумент строки и столбца Cells, использованный в формуле, окончательный &, как отмечалось в комментариях.

Кроме того, это действительно плохая идея с использованием ключевых слов или зарезервированных слов в качестве переменных. Некоторые имена защищены, а VBA просто не компилируется/запускается, если определенные слова используются в качестве имен переменных, но для таких вещей, как «Строка», которые используются в других местах в VBA ... он запрашивает проблемы (то есть не рекомендуется/неправильная практика и т. д.), и будет запутывать чтение/отладка и т. д.

Также рассмотрите возможность использования Option Explicit (если вы еще не находитесь) в верхней части любого модуля кода. Это заставит VBA жаловаться/останавливаться, если вы не определяете все ваших переменных. Это может расстраивать для новичков - но это того стоит в долгосрочной перспективе.

Я переписал ваш код, поверхностно, переименовывая и определяя переменные. Технически вам не нужен двойной (внешний) цикл (c_loop принимает только одно значение):

Sub RelFormula() 

Dim r_loop, c_loop As Integer 

For c_loop = 2 To 2 

    For r_loop = 2 To 6 

     Cells(r_loop, c_loop).Formula = "=" & Cells(r_loop, c_loop - 1).Value _ 
     & "*" & Worksheets("Sheet1").Range("A1").Value 

    Next r_loop 

Next c_loop 

End Sub 
+1

Хороший улов на всех фронтах! – Jeeped

+1

Это сделало это, спасибо! Кроме того, спасибо @ Jeeped Я ценю это – Brian

+1

@Brian - «Опция Explicit» может быть сделана автоматически для всех кодовых листов с помощью инструментов ► Параметры ► Редактор ► Требовать объявление переменной. – Jeeped

Смежные вопросы