2017-04-25 292 views
-1

在我正在处理的工作中,我有一个关键的保存工作表。我创建了一个按钮宏来尝试执行下面的操作。VBA Excel:当数据满足条件时,将数据从一个单元格复制到另一个单元格

我希望能够循环访问一列信息,并且如果某个单元格包含该列中的数据,则从同一行上的另一列中获取数据,然后将其放入表格中其他位置的新单元格中,将其添加到最后的数据片段下面。

我的代码如下:

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 

它编译罚款和代码运行并满足条件不错,但它不会移动蜂窝信息向新的小区。

任何帮助将非常感谢!

+0

您使用的变量太多。任何原因? – Masoud

+1

你的数据是什么样的?我不认为*你需要一个宏,你想做什么?如果一个单元格不是空白的,你只是想将该值放在另一列中? – BruceWayne

回答

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行,则会更具动态性并发生更改。

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

应该工作(删除所有这些无用的变量)

+0

我设法解决了这个问题,而且你是对的。有许多无用的变量。仍然习惯于VBA中的一些语法/规则。欢呼的帮助 –

相关问题