#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. Спасибо за ваш быстрый ответ @SiddharthRout3. @SiddharthRout это совет, с которым я никогда раньше не сталкивался, почему Long вместо integer для строк? Должно ли это быть и для столбцов? Возможно, я делал это неправильно целую вечность…
4. @SpencerBarnes максимально возможное количество строк больше, чем
Integer
может вместить, и поэтому это может привести к ошибке переполнения, если количество строк превысит это значение. У вас также почти нет причин объявлятьInteger
в VBA в настоящее время, поскольку VBA работаетInteger
так, как если бы это былоLong
внутренне, поэтому вы могли бы просто объявитьLong
с самого начала. Максимальное количество столбцов не превышаетInteger
максимального размера, но опять же, нет причин объявлять его какInteger
.5. Если у вас есть готовая формула, то вам даже не нужен цикл 😉 Вы можете ввести формулу во всем диапазоне за 1 раз! а затем в конце измените их на значения.