0

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

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

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

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

感谢大家的时间和帮助。

4

2 回答 2

2

需要做的事情背后的基本思想是:

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

这是我整理的一些示例代码,可帮助您入门。这假设您的数据从单元格 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.

这是之前和之后的屏幕截图:

在此处输入图像描述

在此处输入图像描述

于 2013-02-05T14:07:32.250 回答
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
于 2013-02-04T22:17:21.507 回答