Excel 复制/粘贴到另一张图纸上,不包括空白单元格或公式结果为“0”的单元格&引用;

Excel 复制/粘贴到另一张图纸上,不包括空白单元格或公式结果为“0”的单元格&引用;,excel,vba,copy,paste,Excel,Vba,Copy,Paste,以下代码按设计工作,但有一个例外: 范围b4:b100是另一张表中的查找公式,其中B34以下的所有内容都是一个#值!指定=iferror(公式)时出错“ 它正在复制结果“”,因此下次运行时,它开始粘贴到B101而不是B35上的目标图纸上 如何指定“在源工作表上存在公式的情况下,不要使用目标工作表上带有空格的任何空格” 根据@BigBen进行的值传输将非常有效,但您似乎希望复制/粘贴数字和NumberFormat。也许像下面这样的方法会奏效: Sub Test() Dim rng As Rang

以下代码按设计工作,但有一个例外:

范围b4:b100是另一张表中的查找公式,其中B34以下的所有内容都是一个#值!指定=iferror(公式)时出错“

它正在复制结果“”,因此下次运行时,它开始粘贴到B101而不是B35上的目标图纸上

如何指定“在源工作表上存在公式的情况下,不要使用目标工作表上带有空格的任何空格”


根据@BigBen进行的值传输将非常有效,但您似乎希望复制/粘贴数字和
NumberFormat
。也许像下面这样的方法会奏效:

Sub Test()

Dim rng As Range
Dim arr As Variant

With Sheets("FORMULAWORKED")
    .Range(Join(Filter(.[TRANSPOSE(IF(B4:B100<>"","B"&ROW(B4:B100)&":Q"&ROW(B4:B100),"|"))], "|", False), ",")).Copy
    Sheets("WORKED_CLAIMS").Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With

End Sub
子测试()
变暗rng As范围
作为变体的Dim-arr
附页(“公式化”)
.Range(连接(过滤器([转置(IF(B4:B100),“B”和行(B4:B100)和“:Q”和行(B4:B100),“|”)),“|”,False),”)。复制
工作表(“已处理的索赔”)。单元格(Rows.Count,“A”)。结束(xlUp)。偏移量(1)。粘贴特殊粘贴:=xlPasteValuesAndNumberFormats,操作:=xlNone,skipblank:=False,转置:=False
以
端接头

您可以在粘贴的区域上调用
.Value
=
.Value
,这将消除带有空字符串的单元格:

Sub Test()
    Dim formulaRng As Range
    Set formulaRng = ThisWorkbook.Sheets("FORMULAWORKED").Range("B4:Q100")

    With ThisWorkbook.Sheets("WORKED_CLAIMS")

        Dim nextRow As Long
        nextRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1

        formulaRng.Copy
        .Cells(nextRow, "A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False

        With .Cells(nextRow, "A").Resize(formulaRng.Rows.Count, formulaRng.Columns.Count)
            .Value = .Value
        End With

    End With

End Sub

我同意@BigBen,但是OP想要粘贴值和格式。还是我错了?@JvdV-你可以传递值,然后粘贴格式,至少我是这么想的。啊,非常正确。你应该在BigBen上发布一个答案。我将upvote@JvdV-如果OP只需要数字格式而不是其他任何东西(因为你只能粘贴所有格式),我认为修改后的答案是将粘贴的范围转移到自身上,这样就可以消除空白字符串。嗨,JvdV!非常感谢。这开始复制到目的地工作表的B列(Worked_索赔),但我希望它能将信息传输到目的地的A列。有什么好办法?啊,对了,我理解这个问题,但是我暂时无法使用电脑。问题是我们目前只是复制整行。@RobO,我想我已经解决了你的问题。现在将不会复制范围中包含列B中的
”的所有行。其余的将被复制。很抱歉回复得太晚。Ben,我正在重新考虑这个问题,我确实认为OP的值可能在
B4:B100
范围内。他也希望避免在这些行上进行复制。@JvdV我假设这些行就在末尾。因此,在粘贴后调用
.Value
=
.Value
可以消除它们。可能是错的。如果不是这样,我可能只是过滤和复制可见的单元格。
Sub Test()
    Dim formulaRng As Range
    Set formulaRng = ThisWorkbook.Sheets("FORMULAWORKED").Range("B4:Q100")

    With ThisWorkbook.Sheets("WORKED_CLAIMS")

        Dim nextRow As Long
        nextRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1

        formulaRng.Copy
        .Cells(nextRow, "A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False

        With .Cells(nextRow, "A").Resize(formulaRng.Rows.Count, formulaRng.Columns.Count)
            .Value = .Value
        End With

    End With

End Sub