将动态范围复制并组合到新工作表Excel宏

时间:2015-02-15 17:55:12

标签: excel-vba vba excel

我一直在尝试解决这个问题,但是无法让它工作,因为宏代码需要更加动态。我是编写宏的新手,非常感谢你的帮助。

我的Sheet1有两个范围:

  • 第一个范围来自A2:MXXX(取决于我评估的行数)
  • 第二个范围是A3001:M3XXX(也取决于我评估的行数)。

    1. 我想复制第一个范围,直到A列的最后一行 包含Sheet2的值。
    2. 然后,我想复制第二个范围,直到A列中包含值的最后一行,并将其放在Sheet2中第一个范围之后。
    3. 然后我想根据B列(升序)
    4. 对新的组合范围进行排序
    5. 然后,如果可能,将已排序和组合的范围导出到.csv

(请注意,我只想复制每个单元格中的值,而不是公式)。

非常感谢, 亚当

2 个答案:

答案 0 :(得分:0)

练习第1节。

选择要复制的第一个范围。 例如,选择单元格A2:A3000 按F5键并选择特殊单元格 检查常数然后确定, 您将看到已选择所有非空白单元格。 右键单击(或单击其中一个选择单元格上的“复制”图标),然后选择“复制”, 转到第2页并选择A1和选择特殊值。

选择要复制的下一个单元格范围并重复直到粘贴, 进入工作表2后,再次转到特殊单元格并选择最后一个单元格,然后单击确定 选择下面的单元格并粘贴。

练习这个,直到你做对了。

完成这些操作后,使用宏录制器制作宏。Select Cells Special cells Non_Blank cells Copy enter image description here

答案 1 :(得分:0)

如果我正确理解你在寻找什么,那么这应该可以解决问题。这不会为你做.csv保存。如果您遇到问题,请告诉我们。

Sub moveRows()

    Dim lastRow1 As Integer
    Dim lastRow2 As Integer
    Dim secondRangeSize As Integer

    With Sheets("Sheet1")
        lastRow1 = .Cells(3000, "A").End(xlUp).Row
        lastRow2 = .Cells(6000, "A").End(xlUp).Row
    End With

    secondRangeSize = lastRow1 + (lastRow2 - 3000)

    With Sheets("Sheet2")
        .Range("A1:M" & lastRow1) = Sheets(1).Range("A1:M" & lastRow1).Value
        .Range("A" & (lastRow1 + 1) & ":M" & secondRangeSize) = Sheets(1).Range("A3001:M" & lastRow2).Value
    End With

    With Sheets("Sheet2").Sort
        .SortFields.Add Key:=Range("B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("A1:M" & secondRangeSize)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub