2015-08-19 3 views
0

У меня есть макрос, который увеличивает значение в выбранной ячейке.Как изменить выбранный диапазон?

Sub add_1_to_the_selected_cell() 
    ActiveCell.FormulaR1C1 = ActiveCell.FormulaR1C1 + 1 
End Sub 

и я хочу написать макрос, который изменяет не только одну ячейку, но и выбранный диапазон. Как это сделать?

+0

Например, 'A1: C3' будет' A1: D4'? – Hearner

+0

Попробуйте это 'ActiveCell.Resize (numRows + 1, numColumns + 1) .Select' – Hearner

+0

Нет. Я хочу увеличить весь диапазон. Я выбираю некоторый диапазон, запускаю макрос, и хочу, чтобы все эти значения увеличились. – maro

ответ

0

Вместо использования Activecell вам просто нужно будет использовать Range object и For Each statement.

For Each c In Range("A1:C3") 
    c.Value = c.Value + 1 
Next c 

Если есть пустые ячейки в пределах диапазона, который вы не хотите, чтобы добавить 1 на, то просто добавьте в If заявлении.

If Not c.Value = vbNullString Then

EDIT:

Если вы хотите, чтобы иметь возможность выбрать диапазон, а затем запустить макрос, вы можете назначить свой выбор на Range, а затем перебирать Range.

Sub add1() 
    Dim rngSelection As Range 
    Set rngSelection = Selection 

    For Each c In rngSelection 
     If Not c.Value = vbNullString Then 
      c.Value = c.Value + 1 
     End If 
    Next c 
End Sub 

В зависимости от размера Range вы хотите, чтобы выполнить это снова, это может быть более эффективным, чтобы загрузить значения ячеек в массив и выполнять вычисления в массиве.

+0

A1: C3 был всего лишь примером. Макрос не знает, какой диапазон будет выбран. Второй код - это то, что я имел в виду. Спасибо. – maro

+0

Является ли 'Dim rngSelection As Range' ' Set rngSelection = Selection' необходимо? Coudn't мы просто пишем 'For Each c In Selection'? – maro

+0

Да, вы могли бы просто написать, что .. он будет работать точно так же. Всегда хорошая практика объявлять переменные, хотя :) –

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