列和行索引 - VBA

时间:2018-04-24 03:37:51

标签: excel vba excel-vba

我正在尝试编写在excel宏(VBA)中执行以下操作的内容:

For 'column X' of 'spreadsheet'
     Copy range(row(1):row(5)
     Paste to 'other spreadsheet' in range (row(1):row(5)) and column(Y)

我想让它遍历电子表格中每一列的第一个电子表格。这就是我对1列的看法:

Sheets("Info").Range("B3:B6").Value = Worksheets("Temp").Range("HK5:HK8").Value

  Sheets("Info").Range("C3:C6").Value = Worksheets("Temp").Range("HK10:HK13").Value

这就是我想要做的,但是对于第一个电子表格中的每一列(有300列,手动都会很乏味)。

编辑:这是我发现的另一种方式可能有助于解释下面留下的评论:

For i = 2 To 3
    Worksheets("Info").Range(Cells(3, i), Cells(6, i)).Value = Worksheets("Temp").Range(Cells(5, i), Cells(8, i)).Value
Next i

我希望这会在列(2 - 290)上循环,目前仅从第2列到第3列进行测试。我希望来自第5-8行的每一列(' i')的TEMP工作表中的单元格,我想将其放入列(' i')第3行的INFO工作表中6。希望这有帮助!

1 个答案:

答案 0 :(得分:0)

您的描述不一致,我不确定您的最终代码有什么问题。我已经留下了一个注释掉的调试语句,因此您可以看到正在使用的范围。

但是

  1. 使用代码顶部的明确选项
  2. 确保声明我为长
  3. 切换ScreenUpdating以提高性能
  4. 使用变量来保存工作表
  5. 使用工作表

    完全限定Cells引用
    Public Sub test()
    
    Dim i As Long
    Dim wsInfo As Worksheet
    Dim wsTemp As Worksheet
    Set wsInfo = ThisWorkbook.Worksheets("Info")
    Set wsTemp = ThisWorkbook.Worksheets("Temp")
    
    Application.ScreenUpdating = False
    For i = 2 To 290
       ' Debug.Print wsInfo.Name & "!" & wsInfo.Range(wsInfo.Cells(3, i), wsInfo.Cells(6, i)).Address & " = " & wsTemp.Name & "!" & wsTemp.Range(wsTemp.Cells(5, i), wsTemp.Cells(8, i)).Address
        wsInfo.Range(wsInfo.Cells(3, i), wsInfo.Cells(6, i)).Value = wsTemp.Range(wsTemp.Cells(5, i), wsTemp.Cells(8, i)).Value
    Next i
    Application.ScreenUpdating = True
    End Sub