我正在尝试使用基于简单除法的数据填充单元格但是(并且将始终是)实例,其中我在等式的一端或两端具有0。
是否有可能在等式周围包含某种保护,这样如果它除以0,它只是将值设置为0而不是错误输出?
我的代码
Set myRange = Range("S3:S20")
rowCounter = 3
For Each myCell In myRange
If Range("H1").Value Like "*Mon*" Then
myCell.Value = Range("Q" & rowCounter).Value
rowCounter = rowCounter + 1
Else
myCell.Value = ((myCell.Value + Range("Q" & rowCounter).Value) / Range("R" & rowCounter).Value)
rowCounter = rowCounter + 1
End If
Next myCell
以下是等式中引用的数据
P Q R S
5 1:03 5 1:03
0 0:00 0 0:00
0 0:00 0 0:00
7 0:19 7 0:19
0 0:00 0 0:00
0 0:00 0 0:00
12 0:26 12 0:26
3 0:15 3 0:15
3 1:16 3 1:16
7 0:29 7 0:29
9 0:14 9 0:14
0 0:00 0 0:00
0 0:00 0 0:00
6 0:28 6 0:28
0 0:00 0 0:00
4 0:15 4 0:15
0 0:00 0 0:00
0 0:00 0 0:00
感谢您的期待!
答案 0 :(得分:5)
我回答你的问题以及其他一些注意事项:
您可以利用IfError()
WorksheetFunction
来捕获错误
在每次迭代中重复If Range("H1").Value Like "*Mon*" Then
都是一个逻辑错误
在开头检查一次,然后相应地进行
您可以通过抵消循环范围变量来避免counter
变量
以上所有可以编码的内容
Sub main()
Dim myRange As Range, myCell As Range
Set myRange = Range("S3:S20")
If Range("H1").Value Like "*Mon*" Then
myRange.Value = myRange.Offset(, -2).Value
Else
For Each myCell In myRange
myCell.FormulaR1C1 = "=iferror((" & myCell.Value & "+ RC[-2])/RC[-1],0)"
Next myCell
myRange.Value = myRange.Value
End If
End Sub
答案 1 :(得分:3)
检查R列中值的额外 ElseIF语句怎么样:
Set myRange = Range("S3:S20")
rowCounter = 3
For Each myCell In myRange
If Range("H1").Value Like "*Mon*" Then
myCell.Value = Range("Q" & rowCounter).Value
rowCounter = rowCounter + 1
ElseIf Range("R" & rowCounter).Value <> "0" Then
myCell.Value = ((myCell.Value + Range("Q" & rowCounter).Value) / Range("R" & rowCounter).Value)
rowCounter = rowCounter + 1
Else
myCell.Value = 0
rowCounter = rowCounter + 1
End If
Next myCell
答案 2 :(得分:3)
尝试以下代码(检查R列中的值是否为0)。
由于您使用For Each myCell In myRange
进行循环,因此无需使用其他变量(rowCounter
)来保留行号,只需使用myCell.Row
。
Option Explicit
Sub HandleDev_ByZero()
Dim myRange As Range, myCell As Range
Set myRange = Range("S3:S20")
For Each myCell In myRange
If Range("H1").Value Like "*Mon*" Then
myCell.Value = Range("Q" & myCell.Row).Value
Else
If Range("R" & myCell.Row).Value = 0 Then ' check if 0
myCell.Value = 0
Else
myCell.Value = ((myCell.Value + Range("Q" & myCell.Row).Value) / Range("R" & myCell.Row).Value)
End If
End If
Next myCell
End Sub