我是Excel VBA的新手 . 我已经制作了一个支持宏的Excel来记录调查回复 . 每当我运行宏时,某些单元格将被复制(从Sheet1)并作为行向量存储在另一个工作表(Sheet2)中 .
问题在于,如果Responder1在其响应中有一些空白单元格,那么当我记录另一个响应(Responder2)时,对应于Responder1空白的变量的值将存储在前一行中 .
这是VBA代码
Sub Submit1()
Range("A2:C2").Select #in Sheet1
Selection.Copy
Sheets("Sheet2").Select
Worksheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial
End Submit1
现在有两件事我能想到: -
-
如果可以检查前一行是否至少有一个非空白条目,则新响应将自动记录在下一行中 .
-
如果无法满足以上条件,我们是否可以为例如指定一些值对于那些空白单元格为NULL或0,以便新响应可以存储在新行中 .
2 回答
请尝试以下代码:
关于你的第二个建议:就是不要这样做 .
快速回答:
使用
Worksheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial SkipBlanks = False
来自MSDN的参考:
但是,使用
Select
不被视为良好做法 . 考虑阅读this以获取更多信息 . 对于复制粘贴范围,我不能推荐更多Chip Pearson's page .演示:
工作表Sheet1:
Sheet2之前:
Sheet2之后:
上面有一个额外的好处,你不必担心空单元格,因为它们是默认复制的 .
我希望这有帮助!
EDIT (解决评论)
确实,自
SkipBlanks = False
默认情况下,PasteSpecial
不会跳过空白 . 你确定你的细胞确实是空白的并且看起来不是空白的吗?您可以使用ISBLANK()
功能快速检查 . 如果SkipBlanks
似乎只运行了一些时间,那么它应用的单元格肯定会有所不同 .With ... End With
:这是一种增强可读性的快捷方式构造 . 基本上,一组方法或属性在同一个对象下,例如可写成
这增强了可读性
原则上,这是可能的 . 但是,您应该确定哪些单元格是"blank",并且我们已经知道一个不跳过空白的方法似乎不起作用,因此识别空白单元格并替换它们是一个问题22.换句话说,如果我们知道如何找到这些"blank"单元格,以便我们将它们分配为NULL或0,然后
SkipBlanks
将以更优雅的方式处理它们(因为它的目的就是这样做) .