2015-04-05 129 views
0

我得到的是这样的一个Excel文件:Excel VBA中,移动细胞新列

http://screencast.com/t/tpbSFZGjGw

我要作出这样的动作每31个到第60行中的VBA代码第一个旁边。这意味着从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 

我在改变它的颜色显示它,但不知道如何使它移动。

回答

0

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

我觉得你开始使用“For”很好,但在我看来,第30行并不是最好的出发点,因为你希望每移动一个下一个回合30行到下一节单元格。这是preety简单的代码,所以我准备工作的宏给你,让你可以尝试一下,学习的形式,它:

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 
+0

大声笑,说效果很好,谢谢你了很多。 我想改变的唯一事情是: 计数器=计数器+ 30 反击=计数器+ go_back – 2015-04-05 21:17:15

+0

吧:),你看上好! – Kusnierewicz 2015-04-05 21:29:00