如果单元格的值为0或不存在,如何告诉宏将单元格留空而不放零?在其他类型的公式中,我刚刚添加了“” - “”“”,但在这种情况下,它不起作用......
.Range("Z" & i & ":AB" & i).Formula = "=SUMIF($D$2:$D$" & lastrow & ",$Y" & i & ",E$2:E$" & lastrow & ")/" & dic(.Range("Y" & i).Value)
工作场合的一个例子就是这个
.Range("AD" & i).Formula = "=IF(INDEX($I$2:$I$" & lastrow & ",MATCH($Y" & i & ",$D$2:$D$" & lastrow & ",0))=0,Z" & i & ",""-"")"
答案 0 :(得分:1)
我认为有太多信息缺失,但是如果我知道你想使用VBA在你的单元格中添加内置函数(SUMIF
),但你希望这个SUMIF
返回""
而不是0
(这是正常的返回类型,因为函数应该返回一个数字),那么你可以做的是构建一个嵌套函数,说如果你的函数的结果如果你写了那个结果,那么你就写了"":
.Range("Z" & i & ":AB" & i).Formula = "=IF(SUMIF($D$2:$D$" & lastrow & ",$Y" & i & ",E$2:E$" & lastrow & ")/" & dic(.Range("Y" & i).Value) & "<> 0, SUMIF($D$2:$D$" & lastrow & ",$Y" & i & ",E$2:E$" & lastrow & ")/" & dic(.Range("Y" & i).Value), "")
...但如果您向我们提供更多信息,可能是获得结果的更好方法(可能是用户函数,而不是直接放入单元格中的内置SUMIF
)。
答案 1 :(得分:1)
示例中不起作用的公式不包含与工作公式示例相同的条件。
你的第二个公式基本上是“如果这个值是0,那么做X”。您的第一个公式只有SUMIF公式,它不会评估返回的值是否为0。
您应该为SUMIF公式添加相同的逻辑,以获得相同的结果。具体而言,您需要为此添加“IF”公式。这是一个我没有测试过的例子,但应该或多或少准确。
.Range("Z" & i & ":AB" & i).Formula = "=if(SUMIF($D$2:$D$" & lastRow & ",$Y"
& i & ",E$2:E$" & lastRow & ")/" & dic(.Range("Y" & i).Value) & "=0,""""," &
"SUMIF($D$2:$D$" & lastRow & ",$Y" & i & ",E$2:E$" & lastRow & ")/" &
dic(.Range("Y" & i).Value) & ")"
这将构建公式以检查0。如果您希望VBA检查0,那将是一个不同的解决方案。
更新您的评论:
我认为这是你正在寻找的,虽然我认为你的公式有错误。
"=IF($Z$2:$Z$" & lastRow & "*$AC$2:$AC" & lastRow & "=0,""-""," & "$Z$2:$Z$"
& lastRow & "*$AC$2:$AC" & lastRow & ")"