0

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

我已经调整了这个脚本,我发现它主要做我想做的事情,它复制了所有内容,但不会删除。

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

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

提前致谢。

4

1 回答 1

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

高温高压

于 2012-04-11T20:04:52.823 回答