2015-07-28 3 views
2
Set rng = Worksheets("Sheet1").Range("B2") 

У меня есть вышеуказанное и вы хотите запустить цикл, который изменяет диапазон, который я использую/оцениваю. Я пробовал варианты следующего.EXCEL-VBA Измените диапазон с помощью петли

for x = 2 to 10 
Set rng = Worksheets("No-Funding").Range(x & "2") 
Next X 

Я сделал некоторые исследования и нашел другое переполнение стека: Excel VBA Looping formula to change Range Я не могу понять его в этой ситуации, хотя.

Мой код не будет работать, если он использует ячейки либо, я пробовал это и могу только заставить его работать с Range. Спасибо за любую помощь!

+0

Итак, использование Cells() в вашем Range() не работает? Итак, что происходит, когда вы пытаетесь что-то вроде «Set rng = worksheets (« No-Funding »). Range (cells (1,1), Cells (x, 2))' (Какой диапазон вы пытаетесь получить? , ваш 'rng' будет равен' 22', '32'. Предполагается, что это столбец или строка? – BruceWayne

ответ

3

Для строго числового приращения попытки,

Set rng = Worksheets("No-Funding").Cells(x, 2) 

xlA1 ссылка стиль может быть достигнуто за счет факторинга в ASCII-символа.

Set rng = Worksheets("No-Funding").Range(Chr(64 + x) & 2) 
+0

Спасибо, сэр. Это простота эффективна и гениальна. Я буду отмечать как ответ, как только таймер проходит мимо –

1

Попробуйте это:

For x = 2 To 10 
    Set rng = Worksheets("No-Funding").Cells(2, x) 
Next x 

Насколько я знаю, что это не имеет значения для VBA, если вы используете функцию .Range или .Cells, поскольку оба возвращают объект или Range типа.

1

Использование

Set rng = Worksheets("Sheet1").Range("B2").Offset(0,x) 

, чтобы перейти к другому колонку. Еще лучше

Dim values as Variant, rng as Range 
Set rng = Worksheets("Sheet1").Range("B2").Resize(10,1) 
values = rng.Values2 

For i=1 to 10 
    values(i,1) = 2*values(i,1) 
Next i 

rng.Values2 = values