2012-04-11 21 views
0

我一直在致力于简化脚本,我想创建一个脚本,将在一列范围内复制到最远的未占用列。然后删除原始列。使用Excel VBA复制列,删除原始列

我已经调整了这个脚本,我发现主要做我想要的东西,它复制一切,但不删除。

我也需要它,以便它可以选择所述列范围中的哪一行以供参考。

有人可以看看脚本并帮助完成我开始的工作吗?我一直在慢慢地学习Excel VBA,在我准备好之前,我的工作让我在多个方向上前进,所以我知道复制和删除选项应该很简单,但由于我的工作线路,我没有时间正确地学习一切,所以很抱歉,如果这是一个简单的答案,但我需要保持这个脚本尽可能的精益,而这正是我所了解的和我所知道的代码和帮助的互联网。

Option Explicit 

Sub MoveColumns() 

    Dim cel As Range 

    With ActiveSheet 
     For Each cel In Intersect(.UsedRange, .[B:N]).SpecialCells(xlCellTypeBlanks).Cells 
      cel = cel.Offset(0, 1) 
     Next 
    End With 
End Sub 

在此先感谢。

+0

我也有点困惑,什么样你到底在想什么?你可以给我一个例子吗? – 2012-04-11 13:55:56

+0

当然...这是excel工作簿。基本上,我想要做的是下行到第6行,然后是列B,然后一直到N,并且任何地方都有一个空格,取最右边的列,将数据复制到最左边的空列并删除原始数据,并继续,直到没有更多的列移动。 这里是该书的链接http://dl.dropbox.com/u/3327208/Excel/DeleteColumn.xlsm – 2012-04-11 19:00:39

+0

所以基本上你想删除单元格I5:K193?然后对M5重复相同的过程:M193?另外194行以后的数据呢? – 2012-04-11 19:07:16

回答

1

不介意下的主数据,我将摆脱它的脚本,所以当该脚本运行时,它会与下它没有运行。如果要将副本G:G移至F:F,然后删除G:G,请将H:H移至G:G,然后删除H:H,然后继续操作,直至所有列并排排列,无间隔在其他地方没有重复。

你想要的是搬东西的复杂的方式。最简单的方法是删除空白栏。列的其余部分将自动移动到左侧:)我假设有一行194

后没有任何数据试试这个

Option Explicit 

Sub MoveColumns() 
    Dim ws As Worksheet 
    Dim lastCol As Long, i As Long 
    Dim DelRange As Range 

    Set ws = Sheets("BackOrder") 

    With ws 
     lastCol = .Cells.Find(What:="*", _ 
     After:=.Range("A1"), _ 
     Lookat:=xlPart, _ 
     LookIn:=xlFormulas, _ 
     SearchOrder:=xlByColumns, _ 
     SearchDirection:=xlPrevious, _ 
     MatchCase:=False).Column 

     For i = 1 To lastCol 
      If Application.WorksheetFunction.CountA(.Columns(i)) = 0 Then 
       If DelRange Is Nothing Then 
        Set DelRange = .Columns(i) 
       Else 
        Set DelRange = Union(DelRange, .Columns(i)) 
       End If 
      End If 
     Next 

     If Not DelRange Is Nothing Then DelRange.Delete 
    End With 
End Sub 

HTH

+0

问题是O和P上有什么东西需要留在O和P上,你正在做的是移动列......这是在这种情况下无法完成的事情。 – 2012-04-12 00:06:25

+0

即使可以采取一些细微的改变:)我会在醒来时更新代码。去睡觉:)已经是5:45 AM了 – 2012-04-12 00:18:31