2013-02-04 99 views
0

我有我怎麼可能去以下操作的請求:腳本用於移動50行到下一列 - Excel中

我有一個CSV文件(我是在Excel中打開),我追加一個數據塊50X2(rowsXcolumns)到csv文件。使用完成的csv文件,我想自動執行一個過程,每隔50行被選中(兩列),並且數據基本上被剪切並複製到接下來的兩個可用列中。

一個例子是來自$ A $ 1的數據:$ B $ 50在csv中,然後第二個採樣被採集,第二組數據轉到$ A $ 51:$ B $ 100,我想自動移動第二個設置爲$ C $ 1:$ D $ 50,並對所有采集的樣本執行該移動。

我不知道這個操作的最佳路徑是什麼(宏/ VBA/etc),如果這很容易實現,希望得到一些幫助。

謝謝大家的時間和幫助。

+0

運動模式仍不清楚......應該用'$ C $ 1發生的事情: $ D $ 50'數組添加新塊時,依此類推? –

+0

對不起,如果它很混亂。假設總共有4個數據樣本。它們將被寫爲'$ A1:$ B200',每個樣本由50行(2列寬)數據組成。我希望script/macro/etc的結果成爲第一個樣品,它保留在'$ A $ 1:$ B $ 50'中,第二個到'$ C $ 1:$ D $ 50',第三個到'$ E $ 1:$ F $ 50',最後一個去'$ G $ 1:$ H $ 50'。無論採集的樣本數量多少,我都希望能夠這樣工作。這可能嗎? – H0ckeyfr33k99

回答

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即可。

    這裏是之前和之後的截圖:

    enter image description here

    enter image description here

  • +0

    謝謝你的迴應。這正是我想要發生的,但是我沒有在excel的宏/ VBA中做太多工作。我應該在哪裏輸入該代碼,是否有指南或程序?再次感謝你! – H0ckeyfr33k99

    +0

    非常歡迎。該宏需要進入「Visual Basic編輯器(VBE)」的「ThisWorkbook」部分。要訪問'VBE',你必須啓用'Developer Tab',並在左邊點擊'Visual Basic'按鈕。 [這是一些說明](http://msdn.microsoft.com/en-us/library/office/ee814737(v = office.14).aspx)。如果有任何不清楚的地方,請告訴我,我會詳細介紹。 – Sam

    +0

    感謝您的幫助和指導。我能夠成功執行任務,但不幸的是,我意識到我需要執行不同的功能。基本上,我想要$ A $ 1:$ A $ 50的數據只移動一次,然後只有$ B $ 51:$ B $ 100移動到$ C $ 1:$ C $ 50,$ B $ 101:$ B $ 150移動到$ D $ 1: $ D $ 50,$ B $ 151:$ B $ 200已移至$ E $ 1:$ E $ 50,$ B $ 201:$ B $ 250已移至$ F $ 1:$ F $ 50等...其餘$ A $ 51:$ A $ XXX值可以留在那裏,但是如果它們可以被刪除則會是首選。這可能嗎? – H0ckeyfr33k99

    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