Excel 将列中的单元格范围复制到空白单元格,然后粘贴到新工作簿中

Excel 将列中的单元格范围复制到空白单元格,然后粘贴到新工作簿中,excel,vba,Excel,Vba,我正在处理一列数据,其中用户创建的每个新工作表的范围(例如,将有多少行数据)最终会有所不同 例如,在一张纸上,B中的范围可以是B3:B7,在另一张纸上,它可以是B3:B22 我想要一个宏,它从B3:Bn范围复制数据,在下一行有空白单元格之前,n是最后一行。例如,复制B4:B7,在B8中有一个空白单元格。我想将此范围粘贴到另一个工作簿的C列中 我只是VBA的初学者,对代码还没有深入了解。我已经尝试了循环的多次迭代,但它并没有真正起作用 这是迄今为止我所掌握的薄弱代码。感谢您的帮助 Sub main

我正在处理一列数据,其中用户创建的每个新工作表的范围(例如,将有多少行数据)最终会有所不同

例如,在一张纸上,B中的范围可以是B3:B7,在另一张纸上,它可以是B3:B22

我想要一个宏,它从B3:Bn范围复制数据,在下一行有空白单元格之前,n是最后一行。例如,复制B4:B7,在B8中有一个空白单元格。我想将此范围粘贴到另一个工作簿的C列中

我只是VBA的初学者,对代码还没有深入了解。我已经尝试了循环的多次迭代,但它并没有真正起作用

这是迄今为止我所掌握的薄弱代码。感谢您的帮助

Sub main()
    Dim r As Range

    Set r = Range("B3")
    Do While r.Value <> ""
        Range("C").Value = r.Value
        Set r = r.Offset(1)
    Loop
End Sub
Sub-main()
调光范围
设置r=范围(“B3”)
当r.值“”时执行此操作
范围(“C”).值=r.值
设置r=r.偏移量(1)
环
端接头

这是一段简单的代码,可以帮助您入门。相应地更改名称

Sub main()

Dim wba As Workbook
Dim wbb As Workbook

Set wba = Workbooks("Workbook A")
Set wbb = Workbooks("Workbook B")

with wba.Worksheets("Worksheet in A")
      .Range("B3", .Range("B3").End(xlDown)).Copy
End With

wbb.Worksheets("Worksheet in B").Range("C3").PasteSpecial xlPasteValues

End Sub
A是包含数据的工作簿,B是必须复制的工作簿


更改两个工作簿上的工作表名称,并且
Range(“B3”,Range(“B1”)。End(xlDown))
将选择范围,直到空白单元格。

请参阅这是一个简单的代码,可以帮助您开始。相应地更改名称

Sub main()

Dim wba As Workbook
Dim wbb As Workbook

Set wba = Workbooks("Workbook A")
Set wbb = Workbooks("Workbook B")

with wba.Worksheets("Worksheet in A")
      .Range("B3", .Range("B3").End(xlDown)).Copy
End With

wbb.Worksheets("Worksheet in B").Range("C3").PasteSpecial xlPasteValues

End Sub
A是包含数据的工作簿,B是必须复制的工作簿


更改两个工作簿上的工作表名称,并且
Range(“B3”,Range(“B1”)。End(xlDown))
将选择范围,直到一个空白单元格。

我只想在Mikku的代码中添加一个内容。在本例中,xlUp可能更好,而不是xlDown。因为可能有一个单元格为空,而下一个单元格为空。在查找最后一行时,xlUp是一种良好的做法

wba.Worksheets("Worksheet in A").Range("B3", Range("B" & Rows.Count).End(xlUp)).Copy

我只想在Mikku的代码中添加一点。在本例中,xlUp可能更好,而不是xlDown。因为可能有一个单元格为空,而下一个单元格为空。在查找最后一行时,xlUp是一种良好的做法

wba.Worksheets("Worksheet in A").Range("B3", Range("B" & Rows.Count).End(xlUp)).Copy


找到最后一行并创建要复制的范围。将开始。找到最后一行并创建要复制的范围。会让你开始。你是对的,但是在这个问题上,用户并没有要求<代码> LastRow <代码>,他在空白单元格前请求行。请再读一遍这个问题,这就是我所理解的。@Aman:为了安全起见,你必须完全鉴定细胞<代码>wba.Worksheets(“A中的工作表”).范围(“B3”,wba.Worksheets(“A中的工作表”).范围(“B”和wba.Worksheets(“A中的工作表”).行数)。结束(xlUp))。复制请参阅问题下方的链接。它解释了限定范围的问题。@Mikku用户没有特别提到最后一行,但第一句话明确表示这是最后一行。但是我想让我们看看用户说了什么:)我不是要最后一行,而是在空白单元格出现之前复制范围。例如,B3:B23具有值,但是如果B24中有一个空白单元格,我会在B23停止并将B3:B23复制到另一工作簿的C列。这是足够清楚的,因此Mikku的代码适合于您的目标。您是对的,但在问题用户不要求<代码> LastRow >代码>之前,他要求在空白单元格之前的行。请再读一遍这个问题,这就是我所理解的。@Aman:为了安全起见,你必须完全鉴定细胞<代码>wba.Worksheets(“A中的工作表”).范围(“B3”,wba.Worksheets(“A中的工作表”).范围(“B”和wba.Worksheets(“A中的工作表”).行数)。结束(xlUp))。复制请参阅问题下方的链接。它解释了限定范围的问题。@Mikku用户没有特别提到最后一行,但第一句话明确表示这是最后一行。但是我想让我们看看用户说了什么:)我不是要最后一行,而是在空白单元格出现之前复制范围。例如,B3:B23有值,但如果B24中有一个空白单元格,我会停在B23并将B3:B23复制到另一个工作簿的C列。这很清楚,因此Mikku的代码非常适合您的目标。我认为这是一个很好的开始-但是,当我尝试运行它时,我得到一个“运行时错误'9'下标超出范围”错误在哪一行?它没有给我一个特定的行,当错误窗口弹出时,会弹出一条带有“下标超出范围”的错误消息,选择Debug,它会显示导致错误的行。第9行:wba。工作表(“Sheet1”)。范围(“B3”,范围(“B3”)。结束(xlDown))。Copy我认为这是一个很好的开始-但是,当我尝试运行它时,我在哪一行收到一个“运行时错误'9'下标超出范围”错误?它没有给我一个特定的行,当错误窗口弹出时,会弹出一条带有“下标超出范围”的错误消息,选择Debug,它会显示导致错误的行。第9行:wba.工作表(“Sheet1”).范围(“B3”,范围(“B3”).结束(xlDown)).复制