vba - excel vba复制到空白单元格

标签 vba excel scripting

A列有这样的数据(即频繁的空白单元格):

HEADING  <-- this is A1
kfdsl
fdjgnm
fdkj


gdfkj
4353

fdjk  



blah     <-- this is A14 

我正在尝试将其复制到 D 列中的新范围,但使其看起来像这样:
HEADING  <-- this is D1
kfdsl
fdjgnm
fdkj
fdkj
fdkj
gdfkj
4353
4353
fdjk  
fdjk
fdjk
fdjk
blah     <-- this is D14 

到目前为止,这是我的代码:
For i = 0 To UBound(origincells) 
 numrows = originsheet.Range(Left(origincells(i), 1) & "65536").End(xlUp).Row - 1
 originsheet.Range(origincells(i) & ":" & Left(origincells(i), 1) & numrows).Copy
 destsheet.Range(destcells(i) & ":" & Left(destcells(i), 1) & (Val(Right(origincells(i), 1)) + numrows)).PasteSpecial
Next

最佳答案

我绝对会建议不要使用字符串连接来构建单元格地址,就像您在此处所做的那样:Range(origincells(i) & ":" & Left(origincells(i), 1) & numrows) .这是不必要的困惑,难以编写和阅读。使用例如.Cells , .Resize , 和 .Offset代替方法。

另外,我会避免使用 .Copy因为这将使您的数据通过系统的剪贴板传输。其他应用程序可能会同时读取和写入剪贴板,这将导致疯狂和不可预测的行为。

最后,不是循环遍历单元格,而是一次将整个范围加载到 Variant 中更有效。数组,在那里进行所有循环和操作,最后一次将整个内容写入工作表。这是我在下面使用的方法。

这可以解决问题:

Dim varData As Variant
Dim i As Long

varData = Sheet1.Range("A1:A14") '// Read in the data.

For i = LBound(varData, 1) + 2 To UBound(varData, 1)
    If IsEmpty(varData(i, 1)) Then
        '// Cell is empty. Copy value from above.
        varData(i, 1) = varData(i - 1, 1)
    End If
Next i

'// Write result to sheet.
Sheet1.Range("D1").Resize(UBound(varData, 1) - LBound(varData, 1) + 1, 1) _
    = varData

关于vba - excel vba复制到空白单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6302852/

相关文章:

python - 在python中从n个csv文件创建excel文件

linux - shell脚本时找不到命令错误

excel - 如何同步多个Excel输入单元格

vba - 赢得秒更新后,MS-access 不会捕获 TreeView 事件

VBA - 在长公式上使用 Application.Evaluate 时出错

batch-file - 使用robocopy将源和目标作为变量

linux - 通过 bash 注释掉 PHP 文件中的值?

vba - 遍历所有工作表以分别在每个选项卡中查找最底部的数据行

ms-access - 以连续形式设置标签可见性

excel - IF 在应该返回 TRUE 时返回 FALSE