2015-08-06 6 views
0

у меня есть ряд переменных (каждый объявлено как диапазон) в сценарии VBA следующим образом:Используйте цикл VBA, чтобы выбрать ряд переменных

r1 = range 
r2 = range 
... 
r100 = range 

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

For i = 0 To 99 Step 1 
    Dim Num As Integer 
    Num = i + 1 
    Num = CStr(Num) 
    Dim R As Range 
    R = "r" & Num 
    R.Select 
    Selection.Copy 
    Range("TARGET RANGE").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 
Next i 

Может кто-нибудь помочь мне отлаживать эту петлю и/или найти лучший способ для достижения этой цели?

+0

Вы пытаетесь перенести строку в столбец или столбец? –

+0

столбцы из 6 ячеек в строки из 6 ячеек – Phil

ответ

0

Для этого можно использовать петлю For Each ... In.

Dim Bag As New Collection 
Dim Target As Range 
Dim r As Range 

Bag.Add [A1:A50] 
Bag.Add [C3:F100] 
Bag.Add [Sheet2!H1:L1] 
Bag.Add ['[Another file.xlsx]Sheet1'!A1:B100] 

Set Target = [Output!A1] 

For Each r In Bag 
    ' Size target to be the same dimensions as r transposed 
    Set Target = Target.Resize(r.Columns.Count, r.Rows.Count) 

    ' transpose and copy values 
    Target.Value = Application.Transpose(r.Value) 

    ' shift target down to next empty space 
    Set Target = Target.Offset(Target.Rows.Count) 
Next 
1

Вы должны SetRange object.

Dim Num As Integer, R As Range 
For i = 0 To 99 Step 1 
    Num = i + 1 
    SET R = RANGE("r" & Num) 
    R.Copy Destination:=Range("TARGET RANGE") 
Next i 

Не совсем понятно, что вы намереваетесь выполнить, но вышеуказанное должно делать то, что от него ожидается.

+0

благодаря Jeeped, но это выбор 'range (" R (i + 1) ")' вместо того, чтобы достигать 'r1.Copy',' r2.Copy' и т. Д. – Phil

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