【问题标题】:Double for cycle vba excel双循环vba excel
【发布时间】:2016-06-03 19:20:05
【问题描述】:

我一直在为 excel 编写 VBA 代码,但无法让它工作....复制到。

Sub copy()
 For i=2 To 4
  For k=0 To 10 Step 5
   Sheets("1").Cells((2+i,1),(6+i;12)).Copy Destination:=Sheets(i).Range("A2:L6")
  Next k
 Next i
End Sub

【问题讨论】:

  • 对于初学者,您的循环中没有k
  • 摆脱 for k 循环。如果您不想更改引用,也不要将 i 添加到单元格引用中。
  • 你需要修改你的问题,并且要具体。你想得到什么作为最终结果,你遇到了什么问题。可以根据 K 步骤 5 等进行一些猜测,但如果您提出直接问题,那么提供帮助会容易得多,如果可能,请提供示例......例如“我正在尝试从(4,1) 到 (8,12) 从工作簿的表 1 到同一工作簿的表 2,3 和 4”等。
  • Sheets("1").Cells((2+i,1),(6+i;12)).Copy 应该更接近 Sheets("1").Range(Sheets("1").Cells((2+i, 1),Sheets("1").Cells(6+i, 12)).Copy 。我不知道 k 在这一切中做了什么。

标签: excel excel-formula vba


【解决方案1】:

不要复制和粘贴,只需设置一个范围等于另一个范围,就像这样

Sub copy()
For i = 2 To 4
    Sheets(i).Range(Sheets(i).Cells(2+i,1), Sheets(i).Cells(6+i,12)) = Worksheets("Sheet1").Range("A2:L6")
Next i
End Sub

另外,我删除了内部循环,因为 k 没有被使用,并且你有一个分号,我认为你的意思是逗号。很难准确地说出您要完成的工作,因为您将使用循环更改将数据放置在每张纸上的行。所以也许你不想在你的单元格引用中使用i。在这种情况下,请尝试使用

Sub copy()
For i = 2 To 4
    Sheets(i).Range("A2:L6") = Worksheets("Sheet1").Range("A2:L6")
Next i
End Sub

【讨论】:

  • @Jeeped 也是一个好点。我想我应该说数据将在每个电子表格的不同位置。
  • @Jeeped 您确保只发布正确答案是正确的,我很感激您一直支持我。你是对的。我打字太快,无法快速得到答案,我正在为此付出代价,同时让你付出代价。我将通过编辑来纠正问题。
【解决方案2】:

假设您要将 sheet1 上的单元格 A2:L6 复制到 sheet2 上的 A2:L6、将 sheet1 上的 A7:L11 复制到 sheet3 上的 A2:L6 和将 sheet1 上的 A12:L16 复制到 sheet4 上的 A2:L6,那么应该这样做它:

Worksheets("Sheet2").Range("A2:L6").Value = Worksheets("Sheet1").Range("A2:L6").Value
Worksheets("Sheet3").Range("A2:L6").Value = Worksheets("Sheet1").Range("A7:L11").Value
Worksheets("Sheet4").Range("A2:L6").Value = Worksheets("Sheet1").Range("A12:L16").Value

或者,如果您更喜欢使用循环将其扩展到 Sheet5 及更高版本:

For i = 2 To 4
    Worksheets("Sheet" & i).Range("A2:L6").Value = Worksheets("Sheet1").Range(Cells((i - 2) * 5 + 2, 1), Cells((i - 2) * 5 + 7, 12)).Value
Next i

请注意,仍然不需要“k”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 2017-05-26
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多