Excel VBA,用于将单元格移动到新列

时间:2015-04-05 14:39:06

标签: excel vba excel-vba

我有一个看起来像这样的Excel文件:

http://screencast.com/t/tpbSFZGjGw

我想制作一个VBA代码,每隔第31行移动到第60行。这意味着应该保留1到30行,第31行到第60行应该移动第61行到第90行应该再次移动91到120应该移动等等。

所以最后的结果应该是:

http://screencast.com/t/631F3P492

我尝试自己制作它,但这是一个问题,我已经在行中有一些东西而且我不知道如何制作它。

Public Sub s()
    Dim position As Long
    Dim counter As Long
    Dim updater As Long

    updater = 30
    position = updater

    For counter = updater + 1 To Rows.Count

    Next counter

    If counter <= position + updater Then
        Cells(i, 1).Font.Color = vbRed
    Else
        position = position + updater
    End If
End Sub

我正在改变它的颜色来展示它,但不知道如何让它移动。

1 个答案:

答案 0 :(得分:0)

您应该始终记住,您可以在Excel中记录您的操作,而不是重新创建记录的marko以满足您的需求。这是宏的一个完整的例子,可以这样的方式完成并用作学习练习。

我认为你通过使用“For”开始很好,但在我看来,第30行并不是最好的起点,因为你想要每下一轮转30行以进入下一部分细胞。它是可爱的简单代码,所以我已经为你准备了工作宏,所以你可以尝试一下并学习它:

Public Sub create_second_column()
    Dim counter As Long
    Dim starting_cell As Integer
    Dim seleceted_space As Integer
    Dim go_back As Integer

    starting_cell = 1
    seleceted_space = 29
    go_back = 30

    For counter = starting_cell To Rows.Count

        counter = counter + 30

        ActiveSheet.Range(Cells(counter, 1), Cells(counter + seleceted_space, 2)).Copy
        ActiveSheet.Range(Cells(counter - go_back, 4), Cells(counter - go_back, 4)).PasteSpecial xlPasteValues
        ActiveSheet.Range(Cells(counter, 1), Cells(counter + seleceted_space, 2)).ClearContents
        ActiveSheet.Range(Cells(counter, 1), Cells(counter + seleceted_space, 2)).Delete Shift:=xlUp
        ActiveSheet.Rows(counter).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    Next counter

End Sub