我在两列(A和B)中有数据,这些数据是通过每个单元格中的Excel公式生成的。并非所有单元格都具有可见值,但所有单元格都有嵌入的公式。
即:A列
Row 1 = "677"
Row 2 = "" <-- (not empty as it has a formula)
Row 3 = "345"
Row 4 = "" <-- (not empty as it has a formula)
每隔一段时间,我就必须手动将这些值粘贴到工作表中的其他两列中(C列和D列),其中应该替换一些单元格中已经存在的其他数据。。。例如,如果有值要复制,它会粘贴进去,但如果没有值,它会保留C和D列中的现有数据。
当我告诉它"特别粘贴"one_answers"跳过空白"时,它仍然将"(空)单元格计算为非空白,因为其中隐藏了公式,然后用空单元格值覆盖C和D列中某些单元格中的现有数据。
我想写一个宏,选择我的源范围,并在范围A2:B1200中循环(使用范围中的"For each cell"),只复制和粘贴不为空的单元格,从而保留我的旧数据。
我通过蚕食其他功能达到了某种程度。我看不出它会如何将非空值粘贴到另一个单元格(向右偏移2列)。
编辑:
我现在正在改变我的方法,将我的范围设置为Cols C和D,并尝试将值拉到当前选定的单元格中,而不是将值强制拉到另一列中。。。。稍后我将更新我的代码示例(尚未完成)。
Public Sub CleanUpSpacedList()
Dim tfCol As Range, Cell As Object
Dim lastRow As Long
'evaluate last row
lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
Set tfCol = Range("A2:A" & lastRow)
For Each Cell In tfCol
If IsEmpty(Cell) Then
'nothing
Else
Cell.Copy
'paste 2 cells to the right i.e. copy cell in col A to cell in col C
'Selection.Offset(1, 0).Select
'-- stuck here
'Cell.Paste
End If
Next
End Sub
尝试以下操作:
Cell.copy Cell.offset(0, 2)
或
Cell.offset(0,2).value = Cell.value
在定义范围时,不需要像对"单元格"那样使用选择命令。Select由宏记录器使用,但在修改代码时通常会用范围名称替换。像您那样设置一个范围也为Excel中包含的所有属性和方法打开了大门。
要了解更多信息,请键入Cell。获取可用于读取或为活动单元格分配属性的可能属性和方法的列表。