我有一个关于如何进行以下操作的请求:
我有一个csv文件(我在Excel中打开),我将一个数据块50X2(rowsXcolumns)附加到csv文件。使用完成的csv文件,我想自动化一个过程,其中每50行被选中(两列),数据基本上被剪切并复制到下两个可用列。
一个例子是来自$ A $ 1的数据:$ B $ 50在csv中,然后是第二个样本,第二组数据到$ A $ 51:$ B $ 100我想自动移动第二个设置为$ C $ 1:$ D $ 50并对所有采集的样本执行该移动。
我不知道这个操作的最佳路径是什么(宏/ VBA /等),如果很容易的话,我希望得到一些帮助。
谢谢大家的时间和帮助。
答案 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 强>
<强> AFTER 强>
答案 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