在Excel中为Visual Basic编写循环

时间:2016-12-15 19:38:36

标签: vba excel-vba excel

如何将以下代码编写为循环。我想从范围(b:17:L17")中连续复制工作表4中的表格中的值。是否有更有效的方法来做循环?

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")

4 个答案:

答案 0 :(得分:8)

是的,有:

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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

这可能是您在with语句中最有效的解决方案:

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