向右移动单元格

时间:2018-10-15 18:32:49

标签: excel vba

我基本上是在尝试重新格式化一份格式严谨的报告。您可以在链接的图片中看到。我在A列中有数据,可以是数字,日期或单词“ outside”。如果在任何给定的行中,列A的单词为“ outside”,那么我想将上一行中的E列中的值移至N列,将F列中的值移至O列。如果在任何给定的行中列A为空,那么我想删除整个行。如果在任何给定的行中,列A是日期,则在下一行将D列移至B列,将E列移至C列。这可能吗?预先感谢。

example spreadsheet

1 个答案:

答案 0 :(得分:0)

未经测试,因此请确保在副本上而不是原始的:)


Option Explicit

Sub Help()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update
Dim i As Long, DeleteMe As Range

Application.ScreenUpdating = False
    For i = 2 To ws.Range("A" & ws.Rows.Count).End(xlUp).Row
        If IsDate(ws.Range("A" & i)) Then
            ws.Range("B" & i + 1).Value = ws.Range("D" & i).Value
            ws.Range("E" & i + 1).Value = ws.Range("C" & i).Value
            ws.Range("D" & i).ClearContents
            ws.Range("C" & i).ClearContents
        ElseIf ws.Range("A" & i) = "output" Then
            ws.Range("N" & i - 1).Value = ws.Range("E" & i).Value
            ws.Range("O" & i - 1).Value = ws.Range("F" & i).Value
            ws.Range("E" & i).ClearContents
            ws.Range("F" & i).ClearContents
        ElseIf ws.Range("A" & i) = "" Then
            If DeleteMe Is Nothing Then
                Set DeleteMe = ws.Range("A" & i)
            Else
                Set DeleteMe = Union(DeleteMe, ws.Range("A" & i))
            End If
        End If
    Next i

    If Not DeleteMe Is Nothing Then DeleteMe.EntireRow.Delete

Application.ScreenUpdating = True

End Sub