VBA 中的 IF 公式只返回 True 或 False,不返回条件值
IF formula in VBA only returning True or False, not the criteria values
我无法弄清楚为什么 VBA 中的 IF 公式没有返回任何标准值。我所能得到的只是 True 或 False 值。这是我目前拥有的:
Cells(y, 11).Formula = "=IF((A" & y & ")+(B" & y & "))-((A" & y - 1 & ")+(B" & y - 1 & "))" > "($J*20),(((C" & y & ")-(C" & y - 1 & ")) * $J),(((A" & y & ")+(B" & y & "))-((A" & y - 1 & ")+(B" & y - 1 & ")))"
我确定它只是一个 type-o 或我在某处遗漏了一些引语,但如果有人可以看一下并找到我遗漏的内容,那就太好了。
这是我的完整代码,以获得更好的上下文。
Sub make_new_entry()
Dim Layer_Increment, i As Integer
Set Layer_Increment = Cells(7, 2)
y = 10 'Set this to the first row number that gets a time entered.
i = 0
Do While i = 0
If Cells(y, 1) = "" Then
add_row y
Cells(y, 1) = Format(Now(), "m/d/yy")
Cells(y, 2) = Format(Now(), "h:mm")
Cells(y, 3) = Cells(y - 1, 2) - ((Cells(y - 1, 2) - Layer_Increment * (y - 10)))
Cells(y, 8).Formula = "=($H*(C" & y & "))+((0.5*'Data Reference'!F2)+(0.4*'Data Reference'!F3)+(0.3*'Data Reference'!F4)+(0.2*'Data Reference'!F5)+(0.1*'Data Reference'!F6)+(0.05*'Data Reference'!F7)+(0.01*'Data Reference'!F8)+(0.001*'Data Reference'!F9))+ $H+$N"
Cells(y, 9).Formula = "=$I-(0.05*(C" & y & "-$C))"
Cells(y, 10).Formula = "=(((A" & y & ")+(B" & y & "))-((A" & y - 1 & ")+(B" & y - 1 & ")))/((C" & y & ")-(C" & y - 1 & "))"
Cells(y, 11).Formula = "=IF(A" & y & " + B" & y & ")-(A" & y - 1 & " + B" & y - 1 & ") > $J*20, (C" & y & " - C" & y - 1 & ") * $J, (A" & y & " + B" & y & ")-(A" & y - 1 & " + B" & y - 1 & ")"
Cells(7, 6).Formula = "=((130-(H" & y & "))/$H)-('Build Information'!$F-(C" & y & "))"
Cells(7, 4).Formula = "=Max(C:C)"
Cells(7, 10).Formula = "=AverageIf(J11:J" & y & ",""<00:05:00"")"
Cells(8, 11).Formula = "=Sum($K:(K" & y & ")"
i = 1
Else
y = y + 1
End If
Loop
End Sub
我建议你:
- 完全符合您的范围
- 检查括号和 order the calculations are made in Excel
- 使用易于理解的变量名称(例如,使用
counter
代替 y
)。
关于你的公式,这是我修正它的方法
Cells(y, 11).Formula = "=IF((A" & y & "+B" & y & ")-(A" & y - 1 & "+B" & y - 1 & ") > $J*20,((C" & y & "-C" & y - 1 & ") * $J),((A" & y & "+B" & y & ")-(A" & y - 1 & "+B" & y - 1 & ")))"
PS 要完全限定范围,请使用此语法
Thisworkbook.Worksheets("Sheet1").Cells(y,11).Formula =
我无法弄清楚为什么 VBA 中的 IF 公式没有返回任何标准值。我所能得到的只是 True 或 False 值。这是我目前拥有的:
Cells(y, 11).Formula = "=IF((A" & y & ")+(B" & y & "))-((A" & y - 1 & ")+(B" & y - 1 & "))" > "($J*20),(((C" & y & ")-(C" & y - 1 & ")) * $J),(((A" & y & ")+(B" & y & "))-((A" & y - 1 & ")+(B" & y - 1 & ")))"
我确定它只是一个 type-o 或我在某处遗漏了一些引语,但如果有人可以看一下并找到我遗漏的内容,那就太好了。
这是我的完整代码,以获得更好的上下文。
Sub make_new_entry()
Dim Layer_Increment, i As Integer
Set Layer_Increment = Cells(7, 2)
y = 10 'Set this to the first row number that gets a time entered.
i = 0
Do While i = 0
If Cells(y, 1) = "" Then
add_row y
Cells(y, 1) = Format(Now(), "m/d/yy")
Cells(y, 2) = Format(Now(), "h:mm")
Cells(y, 3) = Cells(y - 1, 2) - ((Cells(y - 1, 2) - Layer_Increment * (y - 10)))
Cells(y, 8).Formula = "=($H*(C" & y & "))+((0.5*'Data Reference'!F2)+(0.4*'Data Reference'!F3)+(0.3*'Data Reference'!F4)+(0.2*'Data Reference'!F5)+(0.1*'Data Reference'!F6)+(0.05*'Data Reference'!F7)+(0.01*'Data Reference'!F8)+(0.001*'Data Reference'!F9))+ $H+$N"
Cells(y, 9).Formula = "=$I-(0.05*(C" & y & "-$C))"
Cells(y, 10).Formula = "=(((A" & y & ")+(B" & y & "))-((A" & y - 1 & ")+(B" & y - 1 & ")))/((C" & y & ")-(C" & y - 1 & "))"
Cells(y, 11).Formula = "=IF(A" & y & " + B" & y & ")-(A" & y - 1 & " + B" & y - 1 & ") > $J*20, (C" & y & " - C" & y - 1 & ") * $J, (A" & y & " + B" & y & ")-(A" & y - 1 & " + B" & y - 1 & ")"
Cells(7, 6).Formula = "=((130-(H" & y & "))/$H)-('Build Information'!$F-(C" & y & "))"
Cells(7, 4).Formula = "=Max(C:C)"
Cells(7, 10).Formula = "=AverageIf(J11:J" & y & ",""<00:05:00"")"
Cells(8, 11).Formula = "=Sum($K:(K" & y & ")"
i = 1
Else
y = y + 1
End If
Loop
End Sub
我建议你:
- 完全符合您的范围
- 检查括号和 order the calculations are made in Excel
- 使用易于理解的变量名称(例如,使用
counter
代替y
)。
关于你的公式,这是我修正它的方法
Cells(y, 11).Formula = "=IF((A" & y & "+B" & y & ")-(A" & y - 1 & "+B" & y - 1 & ") > $J*20,((C" & y & "-C" & y - 1 & ") * $J),((A" & y & "+B" & y & ")-(A" & y - 1 & "+B" & y - 1 & ")))"
PS 要完全限定范围,请使用此语法
Thisworkbook.Worksheets("Sheet1").Cells(y,11).Formula =