将50行移动到下一列的脚本 - Excel

时间:2013-02-04 20:44:36

标签: excel

我有一个关于如何进行以下操作的请求:

我有一个csv文件(我在Excel中打开),我将一个数据块50X2(rowsXcolumns)附加到csv文件。使用完成的csv文件,我想自动化一个过程,其中每50行被选中(两列),数据基本上被剪切并复制到下两个可用列。

一个例子是来自$ A $ 1的数据:$ B $ 50在csv中,然后是第二个样本,第二组数据到$ A $ 51:$ B $ 100我想自动移动第二个设置为$ C $ 1:$ D $ 50并对所有采集的样本执行该移动。

我不知道这个操作的最佳路径是什么(宏/ VBA /等),如果很容易的话,我希望得到一些帮助。

谢谢大家的时间和帮助。

2 个答案:

答案 0 :(得分:2)

需要做的事情的基本理念是:

  • 获取要制作的新列数(例如Total Rows/#rows per column
  • 对于要生成的每个新列,从nth + 1行切换到最后一行,其中nth行是您想要的每列的行数(在您的情况下为50)。 / LI>
  • 将剪切的行粘贴到包含数据的最后一列的右侧
  • 重复直到完成所有列

以下是一些示例代码,我将它们放在一起以帮助您入门。假设您的数据在单元格A1中开始,并且每列应包含最多10行。您可以更改rowsToSkip值以满足您的需求。此外,请注意,这是为了让您入门并需要更多测试。如你所愿改变它:

Public Sub MakeColumnsFromRows()
    Dim totalCutsToMake As Integer
    Dim currentColumn As Integer
    Dim currentCut As Integer
    Dim rowsToCut As Integer

    Sheets(1).Activate
    rowsToSkip = 10
    totalCutsToMake = (ActiveSheet.UsedRange.Rows.Count / rowsToSkip)
    currentColumn = 1

    Dim RowCount As Integer
    For currentCut = 1 To totalCutsToMake
        RowCount = Cells(Rows.Count, currentColumn).End(xlUp).Row
        Range(Cells(rowsToSkip + 1, currentColumn), Cells(RowCount, currentColumn + 1)).Select
        Selection.Cut
        Cells(1, currentColumn + 2).Select
        ActiveSheet.Paste
        currentColumn = currentColumn + 2
    Next
End Sub

这样做首先要找出要制作的新列数,然后从每列的第11行切换到最后一行,然后将这些值粘贴到包含数据的最后一列之后。在完成所有新列之前,它会执行此操作。请注意,每列留下10行数据。要将此更改为50,您只需将rowsToSkip变量更改为50即可。

以下是截图前后的内容:

<强> BEFORE enter image description here

<强> AFTER enter image description here

答案 1 :(得分:0)

这个怎么样?

Sub move()
    Dim ws As Worksheet
    Dim r As Range
    Dim columnCounter As Long
    Dim rowCounter As Long
    Set ws = Sheets("Sheet1")


    columnCounter = 1
    rowCounter = 51

    Set r = ws.Cells(rowCounter, 1)

    Do While r.Value <> vbNullString
        ws.Range(r, r.Offset(49, 1)).Cut ws.Cells(1, columnCounter)

        columnCounter = columnCounter + 2
        rowCounter = rowCounter + 50

        Set r = ws.Cells(rowCounter, 1)
    Loop
End Sub