Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复制列,使用Excel VBA删除原始列_Excel_Vba - Fatal编程技术网

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

复制列,使用Excel VBA删除原始列,excel,vba,Excel,Vba,我一直在努力简化一个脚本,我想创建一个脚本,将一系列列复制到最左边的未占用列。然后删除原始列 我已经调整了这个脚本,我发现它可以做我想做的事情,它可以复制所有内容,但不会删除 我还需要它来创建它,以便它可以选择所述列范围中的哪一行作为参考 有人能看一下剧本,帮我完成我开始的工作吗?我一直在缓慢地学习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
提前谢谢


不要介意main下面的数据,我有一个脚本可以删除它,所以当这个脚本运行时,它将在没有任何数据的情况下运行。在这种情况下,我想将副本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

我有点搞不懂你到底想干什么?你能给我举个例子吗?当然。。。这是excel工作簿。基本上,我想做的是先到第6行,然后是B列,然后一直到N列,任何有空格的地方,取最右边的列,将数据复制到最左边的空列,删除原始数据,然后继续,直到没有更多的列可以移动。这是本书的链接,所以基本上你想删除单元格I5:K193?然后对M5:M193重复同样的过程?还有第194行之后的数据呢?不要介意main下面的数据,我有一个脚本可以删除它,所以当这个脚本运行时,它将运行,而不包含任何内容。在这种情况下,我想将副本G:G移动到F:F,然后删除G:G,将H:H移动到G:G,删除H:H,然后继续,直到所有列并排排列,中间没有空格,其他任何地方都没有副本。问题是O和P上的某些内容需要保留在O和P上,你正在做的是移动列…这是在这种情况下不能做的事情。只需做一点小小的更改即可:)我会在醒来时更新代码。上床睡觉:)已经是早上5点45分了