创建宏以在列UP中移动数据?

时间:2012-10-30 19:59:36

标签: vba excel-vba excel-2010 excel

我有一张excel表,其数据混乱:例如,应该在列AB和AC中的数据改为列B和C,但在后面的行上。我有以下文件将数据从B和C分别移动到AB和AC:

Dim rCell As Range
Dim rRng As Range

Set rRng = Sheet1.Range("A:A")

i = 1

lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

For Each rCell In rRng.Cells

If rCell.Value = "" Then

    Range("AB" & i) = rCell.Offset(0, 1).Value

    rCell.Offset(0, 1).ClearContents

    End If

    i = i + 1

    If i = lastRow + 1 Then

    Exit Sub

    End If

Next rCell

End Sub

但是,由于它们位于右列,因此无法解决数据位于适当行的行上的问题。我是VBA宏的新手,所以我很感激任何帮助,使数据现在一致。我尝试切换Offset参数(-1,0),但它不起作用。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情?

For i = Lastrow To 1 Step -1
    ' move data into cell AA from Cell A one row down
    Cells(i, 27).Value = Cells(i + 1, 1).Value
Next

答案 1 :(得分:0)

您无需遍历范围即可完成您要执行的操作。

请改为尝试:

Sub MoveBCtoAbAcUpOneRow()
    Dim firstBRow As Integer
    Dim lastBRow As Long
    Dim firstCRow As Integer
    Dim lastCRow As Long

    ' get the first row in both columns
    If Range("B2").Value <> "" Then
        firstBRow = 2
    Else
        firstBRow = Range("B1").End(xlDown).Row
    End If
    If Range("C2").Value <> "" Then
        firstCRow = 2
    Else
        firstCRow = Range("C1").End(xlDown).Row
    End If

    ' get the last row in both columns
    lastBRow = Range("B" & ActiveSheet.Rows.Count).End(xlUp).Row
    lastCRow = Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row

    ' copy the data to the correct column, up one row
    Range("B" & firstBRow & ":B" & lastBRow).Copy Range("AB" & firstBRow - 1)
    Range("C" & firstCRow & ":C" & lastCRow).Copy Range("AC" & firstCRow - 1)

    ' clear the incorrect data
    Range("B" & firstBRow & ":B" & lastBRow).ClearContents
    Range("C" & firstCRow & ":C" & lastCRow).ClearContents

End Sub

注意:

  • 如果每列中的数据形状相同,则不需要 找到每个的第一行和最后一行。每个和一个复制操作只需要一个变量而不是2个。
  • 确保将变量声明设置为required。 (工具 - &gt;选项 - &gt;需要变量声明)您可能已经这样做了,但我无法分辨,因为它看起来像Sub的顶部被截断了。