我有一个关于如何进行以下操作的请求:
我有一个csv文件(我在Excel中打开它),我将一个50X2 (rowsXcolumns)数据块附加到csv文件中。有了完成的csv文件,我想自动化一个过程,其中每50行被选中(两列),数据基本上被剪切并复制到下两个可用列。
例如,来自$A$1:$B$50的数据在csv中,然后进行第二次采样,第二组数据转到$A$51:$B$100,我希望自动将第二组数据移动到$C$1:$D$50,并对所有采集的样本执行该移动。
我不知道这个操作的最佳路径是什么(宏/VBA/等),如果可能的话,我需要一些帮助。
感谢大家的时间和帮助。
发布于 2013-02-05 22:07:32
需要做的事情背后的基本思想是:
nth + 1行剪切到最后一行,其中nth nth + 1是您想要的每列的行数(在本例中为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-05 06:17:22
这个怎么样?
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 Subhttps://stackoverflow.com/questions/14695296
复制相似问题