2016-12-15 94 views
2

如何将以下代码编写为循环。我想从一个表中片4行从范围(B:17:L17" )的值复制。有没有更有效的方式与循环做在Excel中为Visual Basic编写循环

ActiveSheet.Range("B17").Value = Sheets(4).Range("G8") 

ActiveSheet.Range("C17").Value = Sheets(4).Range("G9") 

ActiveSheet.Range("D17").Value = Sheets(4).Range("G10") 

ActiveSheet.Range("E17").Value = Sheets(4).Range("G11") 
ActiveSheet.Range("F17").Value = Sheets(4).Range("G12") 
ActiveSheet.Range("G17").Value = Sheets(4).Range("G13") 
ActiveSheet.Range("H17").Value = Sheets(4).Range("G14") 

ActiveSheet.Range("I17").Value = Sheets(4).Range("G15") 

ActiveSheet.Range("J17").Value = Sheets(4).Range("G16") 


ActiveSheet.Range("K17").Value = Sheets(4).Range("G17") 

ActiveSheet.Range("L17").Value = Sheets(4).Range("G18") 
+1

参见[流量控制结构(http://stackoverflow.com/documentation/ vba/1873/flow-control-structures#t = 201612151953105925624)关于Documentation.SO。 –

+0

这个问题是如何得到upvotes的? – vacip

回答

8

是的,有:?

ActiveSheet.Range("B17:L17").Value = Application.Transpose(Sheets(4).Range("G8:G18").Value) 
+3

..............非常好! –

+2

@ Gary的学生谢谢,但我只是意识到,OP想要一个“更有效的方式与循环”,猜测这可能是超出预期的大声笑。 –

+2

由于Excel包含此功能,因此这是更高效的,绝对是最好的解决方案:整洁而简单。 – Sgdva

1

你可以使用这样的事情(VB.Net,但可以很容易地复制到VBA):

Dim cell as Integer, c as Integer 
cell = 8 
For c = 66 To 76 
    ActiveSheet.Range(Chr(c) & "17").Value = Sheets(4).Range("G" & cell) 
    cell = cell + 1 
Next 

的CHR()函数得到(66-76与字符代码相关联的字符),然后将此值与字符串“17”连接组成一个完整的单元格名称(“B17”,“C17”,...)

我也在同一时间递增G的单元格编号。如果你真的想用一个循环


使用此 - 但也可能有更好的方法,如answer given by @A.S.H

+0

@ YowE3K谢谢 - 对突出显得过于激进。 – vbnet3d

+2

请注意,这项工作到Z列。除此之外...... –

+1

@ Mat'sMug绝对正确......这可以扩展到包括更多可能的值,但在那一点上,我会建议使用更好的方法,就像ASH的回答一样。 – vbnet3d

1

解决方案的解释:
建立你的规则!有源薄片的范围有什么变化?该列将随着for/to循环而增长!所以,我们应该对此进行总结。什么是另一件事会增加?在'='的另一侧的范围,所以通过设置一个算法,我们可以说该行在Activesheet范围内是const,而列是另一侧的on变量。
解决方案:

Sub Test() 
Const TotalInteractions As Long = 11 
Dim CounterInteractions As Long 
    For CounterInteractions = 1 To TotalInteractions 
    'where 1 is column A so when it starts the cycle would be B,C and so on 
    'where 7 is the row to start so when it begins it would became 8,9 and so on for column G 
    ActiveSheet.Cells(17, 1 + CounterInteractions).Value = Sheets(4).Cells(7 + CounterInteractions, 7) 
    Next CounterInteractions 
End Sub 
+0

@ YowE3K你是对的,我的坏我更新它 – Sgdva

0

这可能是你的最有效的解决方案与声明:

Sub LoopExample() 
    Sheets("Sheet4").Range("G8:G18").Copy 
    Sheets("Sheet2").Range("B17").PasteSpecial xlPasteValues, Transpose:=True 
End Sub 
+1

这将复制不仅仅'.Value's。它也复制到错误的页面(应该是'Sheets(4)'),它也复制到单元格G8:Q8而不是G8:G18。来源和目的地是错误的。 – YowE3K

+0

@ YowE3K你令人印象深刻! :D –

+0

哎呀!编辑见上文。谢谢! – user1