Excel中的SpecialCells返回一个公式的值

我想要一个简单的方法来使用Excel中的SpecialCells复制单元格值到另一个表单,而不是循环

我的VBA代码如下:

 Sub copyMissingData() Worksheets("Source").Range("Z4:Z2000").SpecialCells(xlCellTypeConstants).Copy Worksheets("Destination").Range("missing_qbc") End Sub 

我的源数据Z4:Z20000有公式返回一个值(文本/数字/分数等)或空白“”。 我想复制忽略空白,但复制返回的任何其他值

上面使用SpecialCells(xlCellTypeConstants)的VBA代码由于源范围中的公式而不起作用。

我的问题:有没有一种简单的方法,我可以使用range.specialcells复制我的数据从工作表到另一个轴承记住,源单元格包含公式,公式可能会产生空的string单元格,这将需要跳过

如果你有公式,为什么你要select常量?

用这个:

 Worksheets("Source").Range("Z4:Z2000").SpecialCells(xlCellTypeFormulas, 23).Copy Worksheets("Destination").Range("missing_qbc").pastespecial(xlPasteValues) 

23表示“数字,文本,逻辑和错误”。

分别进行复制和粘贴确保空白被跳过(如果这就是“忽略”的意思)。

粘贴值确保只有值被粘贴,而不是公式本身。

请注意,如果你在单元格中有一个公式,它不是空白的。 即使公式生成空string值,单元格本身也不是空的! 在htat的情况下,您需要在执行任何其他操作之前先复制粘贴值,甚至Excel有时也不会将空白单元格视为空白。 如果是这种情况,则需要遍历(循环)单元格,并逐个复制它们。

我能想到的最简单的方法是在复制全部内容后删除空格:

 Set rngFrom = [Source!Z4:Z2000] Set rngTo = [Destination!missing_qbc].Resize(rngFrom.Rows.Count, 1) rngTo.Value = rngFrom.Value rngTo.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp 

数组公式更复杂,但不需要VBA。