VBA — справка, необходимая для вычисления между двумя листами

#excel #vba

#excel #vba

Вопрос:

Я новичок в VBA и начал работать с ним две недели назад. Прямо сейчас я хочу сделать простой расчет того, как изменилась цена по сравнению с более старым состоянием (в процентах). Итак, у меня есть два документа с ценами в разных таблицах, и я хочу рассчитать, будет ли новая цена выше или ниже. Результат отображается рядом с «newColumn» на листе «PricePaper1». Это должно работать в цикле. Поэтому я не могу использовать функцию записи макросов.

Моя идея такова, но она не работает:

 Dim newColumn As Integer
Dim oldColumn As Integer 
Dim oldRow As Integer 

newColumn = 7
oldColumn = 9
oldRow    = 11
newRow    = 11

For i to 25
Worksheets("PricePaper1").Cells(i, 8).Value =
1 - Worksheets("PricePaper1").Cells(oldRow, oldColumn).Value / Worksheets("PricePaper2").Cells(newRow, newColumn).Value
Next
 

Заранее спасибо!!
Julius

Комментарии:

1.1. При работе со строками желательно объявлять их как Long вместо Integer 2. For i to 25 должно быть For i = 1 to 25 . Возможно, вы захотите ознакомиться с For …Следующий оператор 3. Вы также должны увеличить другие переменные, иначе они всегда будут ссылаться на одну и ту же ячейку. 4. У меня такое чувство, что все, чего вы пытаетесь достичь, можно сделать с помощью формул, и здесь не требуется VBA.

2. Dim newColumn As long Dim oldColumn As long Dim oldRow As long newColumn = 7 oldColumn = 9 oldRow = 11 newRow = 11 For i = 1 to 25 Worksheets("PricePaper1").Cells(i, 8).Value = 1 - Worksheets("PricePaper1").Cells(oldRow, oldColumn).Value / Worksheets("PricePaper2").Cells(newRow, newColumn).Value oldRow = oldRow 1 newRow = newRow 1 Next Я думаю, вы правы в своем предположении, что это может быть проще с формулами, но мне бы очень хотелось иметь возможность найти решение VBA. Спасибо за ваш быстрый ответ @SiddharthRout

3. @SiddharthRout это совет, с которым я никогда раньше не сталкивался, почему Long вместо integer для строк? Должно ли это быть и для столбцов? Возможно, я делал это неправильно целую вечность…

4. @SpencerBarnes максимально возможное количество строк больше, чем Integer может вместить, и поэтому это может привести к ошибке переполнения, если количество строк превысит это значение. У вас также почти нет причин объявлять Integer в VBA в настоящее время, поскольку VBA работает Integer так, как если бы это было Long внутренне, поэтому вы могли бы просто объявить Long с самого начала. Максимальное количество столбцов не превышает Integer максимального размера, но опять же, нет причин объявлять его как Integer .

5. Если у вас есть готовая формула, то вам даже не нужен цикл 😉 Вы можете ввести формулу во всем диапазоне за 1 раз! а затем в конце измените их на значения.