复制列,使用Excel VBA删除原始列

时间:2012-04-11 11:38:25

标签: excel-vba vba excel

我一直在努力简化脚本,我想创建一个脚本,它可以在一系列列中复制到最左边未占用的列。然后删除原始列。

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

我还需要它来使它可以选择所述列范围中的哪一行来查看以供参考。

有人可以看看脚本并帮助我完成我的开始吗?我一直在慢慢学习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

提前致谢。

1 个答案:

答案 0 :(得分:1)

  
    
      不要介意主要的数据,我有一个脚本可以摆脱它,所以当这个脚本运行时,它将运行时没有任何东西。如果我想将Copy 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