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

メインの下のデータは気にしないでください。それを取り除くスクリプトがあるので、このスクリプトを実行すると、その下には何もない状態で実行されます。コピー 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

于 2012-04-11T20:04:52.823 に答える