【问题标题】:SpecialCells in Excel to return value of a formulaExcel中的SpecialCells返回公式的值
【发布时间】:2016-10-14 10:06:05
【问题描述】:

我想要一种快速简单的方法,在 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 将我的数据从工作表复制到另一个工作表,请记住源单元格包含公式,并且公式可能会产生需要跳过的空字符串单元格

【问题讨论】:

  • 这篇文章可能与 Excel VBA Copy Range and Paste Values in another Sheet's specific Range 重复(因为您已经使用 SpecialCells 正确确定了范围)。
  • @ralph 这不是在这种情况下的重复 - 不是关于复制粘贴特殊,而是 range.specialcells。
  • @vacip 取决于我是否正确理解了这个问题,或者您是否正确理解了这个问题。我从这篇文章中了解到范围是正确确定的。然而,公式被复制了,yinka 只想复制值。您正在阅读范围未正确确定。但复制/粘贴工作正常。我刚刚再次通读了这篇文章,但我仍然不确定您是否正确理解了 OP,或者我是否正确理解了 OP。然而,Ron Rosenfeld 似乎在分享我的思考过程。我想 OP 将不得不澄清。

标签: vba excel


【解决方案1】:

如果您有公式,为什么要尝试选择常量?

使用这个:

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

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

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

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

请注意,如果单元格中有公式,则不能为空。即使公式生成一个空字符串值,单元格本身也不是空的!在 htat 情况下,您需要先复制粘贴值,然后再执行任何其他操作 - 即使这样,Excel 有时也不会将空白单元格视为空白。如果是这种情况,您需要遍历(循环)单元格,并一个接一个地复制它们。

【讨论】:

  • 要粘贴值,在该选择上使用.Copy 方法;然后.PasteSpecial(xlPasteValues)
  • @vacip 这复制了它,但没有忽略空白
  • @yinka 很难理解你的要求......而且我感觉你只提供了 10% 的问题,所以我的解决方案会遇到另一个未提及的问题你的工作表。无论如何,请参阅我的更新答案。
  • @vacip 我编辑了我的问题,但从你最新的编辑来看,我似乎不得不循环。谢谢
【解决方案2】:

我能想到的最简单的方法是全部复制后去掉空格:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多