VBA Excel:满足条件时将数据从一个单元格复制到另一个单元格

时间:2017-04-25 14:38:10

标签: excel vba excel-vba

我正在处理工作中的关键控股表。我已经创建了一个按钮宏来尝试并执行以下操作。

我希望能够遍历一列信息,如果单元格包含该列中的数据,则从同一行的另一列中获取数据,然后将其放入工作表中其他位置的新单元格中,添加它位于最后一个数据块之下。

我的代码如下:

Sub getLostKeys()

    Dim k As Integer
    Dim kMove As Integer
    Dim cellKeyNum As String
    Dim newCellKeyNum As String
    Dim Kcolumn As String
    Dim Ccolumn As String
    Dim refCell As String
    Dim outputCell As String

    Kcolumn = "K"
    Ccolumn = "C"

    For k = 2 To 301
        If Cells(k, 8) <> "" Then
            cellKeyNum = CStr(k)
            kMove = k + 6
            newCellKeyNum = CStr(kMove)
            refCell = Ccolumn & cellKeyNum
            outputCell = Kcolumn & newCellKeyNum
            Range(outputCell).Value = Range(refCell)
        End If
    Next k

End Sub

它编译得很好并且代码运行并满足条件罚款,但它不会将单元格信息移动到新单元格。

任何帮助都会非常感谢!

2 个答案:

答案 0 :(得分:0)

If Cells(k, 8) <> "" Then
            kMove = k + 6
            Range("K" & kMove).Value = Range("C" & k).Value
End If

应该有效(删除所有那些无用的变量)

答案 1 :(得分:0)

您应该使用Strings,而不是使用Cell()设置Ranges值。

试试这个:

Sub getLostKeys()

Dim k       As Integer, kMove as Integer
Dim Kcolumn As Long, Ccolumn As Long
Dim refCell As Range, outputCell As Range

Kcolumn = 11                 ' "K"
Ccolumn = 3                  ' "C"

For k = 2 To 301
    If Cells(k, 8) <> "" Then
        kMove = k + 6
        Set refCell = Cells(k, Ccolumn)
        Set outputCell = Cells(kMove, Kcolumn)
        outputCell.Value = refCell.Value
    End If
Next k

End Sub

注意:我已经做了一两个假设,所以如果这个错误,或者不起作用,可能有助于查看数据样本。

编辑:此外,除非301永远不会改变为最后一行,否则如果找到第8列的lastRow,则会有一个更强大的宏,因此它更具动态性,如果说有200行或4999则会更改行。