【问题标题】:How do I exclude cells where the formula returns zero?如何排除公式返回零的单元格?
【发布时间】:2021-03-31 17:43:17
【问题描述】:
  1. 我的文件有四张。

  2. 当填充其他一些行时,我想复制并粘贴 A 列(来自 A:10)(其中包含一个 concat 公式),然后保存到 csv 中。
    从 A10 开始的所有行都有 concat 公式,然后根据其他列填充该公式(这同样适用于其他工作表)。

  3. 我目前正在创建 sheet1,并粘贴到那里,然后保存为 csv。

  4. 但是,从它查看的第一张纸开始,它只需要第一行(但第二行 - J11(以及 A11)被填充。

  5. 在其他工作表中,它复制并粘贴已填充的 2 行,以及所有其他行,因为那里有返回零的公式。
    因为我有 .End(xlDown) 并且技术上所有其他行都已填充。

  6. 我只为最后一张表尝试了一个 IF 语句作为测试,目前它只复制第一个填充的行,而不是第二个(但至少它也不会复制所有其他单元格为零)。

  7. 基本上,对于我想循环遍历的每个工作表,例如填充 E10,如果 E10 不为零,则将 A10 复制并粘贴到 Sheet1 等中。

Sub Output_test1()
'
' Output_test1 Macro
'

'
    Sheets("Create").Select
    Range("A10", Range("J10").End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets.Add.Name = "Sheet1"
    Sheets("Sheet1").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Assign").Select
    Range("A10", Range("E10").End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Sheet1").Select
    Range("A1").End(xlDown).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Date & Time").Select
    Range("A10", Range("E10").End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Sheet1").Select
    Range("A1").End(xlDown).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Event Type").Select
    Dim rg As Range

    For Each rg In Range("E10").End(xlDown)

        If rg.Value > 0 Then
        End If

        Range("A10").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Sheet1").Select
        Range("A1").End(xlDown).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Sheet1").Select
        Application.CutCopyMode = False
    
    Next
        
    Sheets("Sheet1").Move
    myTime = Format(Now, ("dd.mm.yy"))
    ChDir "C:\Users\"
    ActiveWorkbook.SaveAs Filename:= _
        "Recruit_" & myTime & ".csv", FileFormat:=xlCSVUTF8, _
        CreateBackup:=False
End Sub

【问题讨论】:

  • 一般来说你想在你的代码中avoid using select
  • @cybernetic.nomad 这段代码主要来自录制一个宏来获得我需要的大部分内容。我可以根据您的帖子对其进行修改,但除此之外,您知道如何排除公式返回零的单元格吗?
  • If myCell.value <> 0 then。样本数据和预期输出会很有用
  • @cybernetic.nomad 对不起,我真的很想解决这个问题,但不幸的是,它似乎并没有遍历范围内的每个单元格——它只是复制了第一个单元格——我怎样才能做到这一点?

标签: excel vba if-statement


【解决方案1】:

您的代码中没有循环,您不是在检查任何值。我假设您需要检查源表中的列 J 并将列 A 复制到目标表中。

这是一个可能的起点:

k = 1
For i = 10 to 20
    If Sheets("Source").Range("J" & i).Value = 0 then
        Sheets("Destination").Range("A" & k).Value = Sheets("Source").Range("A" & i).Value
        k = k + 1
    End if
Next i

这只会复制值,而不是公式。不知道要解释多少,如有问题请评论答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-14
    • 2018-10-04
    • 2016-10-16
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多