Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA if语句仅输出0值_Vba_Excel - Fatal编程技术网

Excel VBA if语句仅输出0值

Excel VBA if语句仅输出0值,vba,excel,Vba,Excel,这是我正在使用的代码。它确实很简单,但仍然没有按预期工作 Dim hey As Range Set hey = Range("A1:A5") For Each i In hey If i.Value = "15" Then i.Offset(0, 2).Value = "15" And i.Offset(0, 3).Value = "15" ElseIf i.Value = 10 Then i.Offset(0, 2).Value = "10" And i.Offset(0, 3).Val

这是我正在使用的代码。它确实很简单,但仍然没有按预期工作

Dim hey As Range
Set hey = Range("A1:A5")

For Each i In hey

If i.Value = "15" Then
i.Offset(0, 2).Value = "15" And i.Offset(0, 3).Value = "15"

ElseIf i.Value = 10 Then
i.Offset(0, 2).Value = "10" And i.Offset(0, 3).Value = "10"

ElseIf i.Value = 5 Then
i.Offset(0, 2).Value = "5" And i.Offset(0, 3).Value = "5"

ElseIf i.Value > 15 And i.Value = "*5" Then
i.Offset(0, 2).Value = "10" And i.Offset(0, 3).Value = "5"

Else: i.Offset(0, 2).Value = 10 And i.Offset(0, 3).Value = 10
End If
Next i
现在,它所要做的就是偏移2列并输出0。我不知道为什么,我的思想已经到了尽头。我肯定这是我忽略的一件非常简单的事情

我已经尝试过单步执行,看起来它对我的示例中的每个值都进行了正确的计算,但仍然给出了0值。此外,我还在玩弄这些引文,想看看这是否与此有关,但它们是我想使用的字符串


谢谢您的帮助。

这就是我所说的删除
语句的意思:

Dim hey As range
Set hey = range("A1:A5")

For Each i In hey

If i.Value = "15" Then
i.Offset(0, 2).Value = "15"
i.Offset(0, 3).Value = "15"

ElseIf i.Value = 10 Then
i.Offset(0, 2).Value = "10"
i.Offset(0, 3).Value = "10"

ElseIf i.Value = 5 Then
i.Offset(0, 2).Value = "5"
i.Offset(0, 3).Value = "5"

ElseIf i.Value > 15 And i.Value = "*5" Then
i.Offset(0, 2).Value = "10"
i.Offset(0, 3).Value = "5"

Else
i.Offset(0, 2).Value = 10
i.Offset(0, 3).Value = 10
End If
Next i
编辑:

一个计算机程序,是一个比较运算符。它不像人类那样理解它。当与另一个人讨论时,我们可以给出一系列由“和”链接在一起的任务,这样就不会对做什么感到困惑(除非任务本身令人困惑!)。计算机使用
检查多个条件是否同时成立。在上次的
Elseif
中,您正确地使用它来告诉计算机:“检查
i.Value
>15,并检查
i.Value
=”*5)。如果两个条件(由于
语句)都为真,则运行以下代码。”

希望这有助于解释差异

编辑2:

根据@litelite的建议,使用Like操作符

ElseIf i.Value > 15 And i.Value Like "*5" Then
i.Offset(0, 2).Value = "10"
i.Offset(0, 3).Value = "5"

这就是我所说的删除
语句的意思:

Dim hey As range
Set hey = range("A1:A5")

For Each i In hey

If i.Value = "15" Then
i.Offset(0, 2).Value = "15"
i.Offset(0, 3).Value = "15"

ElseIf i.Value = 10 Then
i.Offset(0, 2).Value = "10"
i.Offset(0, 3).Value = "10"

ElseIf i.Value = 5 Then
i.Offset(0, 2).Value = "5"
i.Offset(0, 3).Value = "5"

ElseIf i.Value > 15 And i.Value = "*5" Then
i.Offset(0, 2).Value = "10"
i.Offset(0, 3).Value = "5"

Else
i.Offset(0, 2).Value = 10
i.Offset(0, 3).Value = 10
End If
Next i
编辑:

一个计算机程序,是一个比较运算符。它不像人类那样理解它。当与另一个人讨论时,我们可以给出一系列由“和”链接在一起的任务,这样就不会对做什么感到困惑(除非任务本身令人困惑!)。计算机使用
检查多个条件是否同时成立。在上次的
Elseif
中,您正确地使用它来告诉计算机:“检查
i.Value
>15,并检查
i.Value
=”*5)。如果两个条件(由于
语句)都为真,则运行以下代码。”

希望这有助于解释差异

编辑2:

根据@litelite的建议,使用Like操作符

ElseIf i.Value > 15 And i.Value Like "*5" Then
i.Offset(0, 2).Value = "10"
i.Offset(0, 3).Value = "5"


就为了从“PartyHatPanda”的背上跳下来。您可以使用
ElseIf i.Value>15和Right(i.Value,1)=5,然后使用
。检查
i.value
的最后一位是否等于5。这是你想要的吗?

只是想从@PartyHatPanda的背上跳下来。您可以使用
ElseIf i.Value>15和Right(i.Value,1)=5,然后使用
。检查
i.value
的最后一位是否等于5。这就是你想要的吗?

在if语句之外取出你的
语句。将每一部分分成两行。我不是VBA专家,但您的最后一个Else子句缺少valuesOk的撇号,首先,它看起来是一个使用
选择Case
而不是
If
的好地方。第二,当你把数值和文本值混合在一起时,你的单元格是用数字还是文本填充的?你能给我一个输入样本吗?第三,
i.Offset(0,2)。Value=“15”和i.Offset(0,3)。Value=“15”表示放入
i.Offset(0,2)。Value
是“15”和i.Offset(0,3)。Value=“15”的结果,这可能不是您试图做的。这个问题需要澄清单元格中的值是否为实数(例如
15
)或类似于数字的文本(例如
“15”
)。它们不是同一件事,除非进行正确的比较,否则布尔比较可能不会产生正确的结果。将
语句放在if语句之外。将每一部分分成两行。我不是VBA专家,但您的最后一个Else子句缺少valuesOk的撇号,首先,它看起来是一个使用
选择Case
而不是
If
的好地方。第二,当你把数值和文本值混合在一起时,你的单元格是用数字还是文本填充的?你能给我一个输入样本吗?第三,
i.Offset(0,2)。Value=“15”和i.Offset(0,3)。Value=“15”表示放入
i.Offset(0,2)。Value
是“15”和i.Offset(0,3)。Value=“15”的结果,这可能不是您试图做的。这个问题需要澄清单元格中的值是否为实数(例如
15
)或类似于数字的文本(例如
“15”
)。它们不是一回事,布尔比较可能不会产生正确的结果,除非进行适当的比较。我认为最好向OP解释
的真正含义。啊,是的,我以前用and语句做过这件事。当然,从逻辑上讲,这对我来说是有意义的,但对代码来说,我记得为什么这不起作用。上面的代码运行得很好,除了ElseIf i.Value>15和i.Value=“*5”之外,然后行的计算结果不正确。@litelite感谢您的建议,将其添加进来@SsaSnakebite其他人该怎么办?@SsaSnakebite你不能平等使用通配符。它会检查是否有恒星。查看Operator我认为向OP解释
的真正含义是一个好主意。啊,是的,我以前用and语句做过这件事。当然,从逻辑上讲,这对我来说是有意义的,但对代码来说,我记得为什么这不起作用。上面的代码运行得很好,除了ElseIf i.Value>15和i.Value=“*5”之外,然后行的计算结果不正确。@litelite感谢您的建议,将其添加进来@SsaSnakebite其他人该怎么办?@SsaSnakebite你不能平等使用通配符。它会检查是否有恒星。查看运营商或无法评论抱歉,但我很确定,在我使用了类似运营商的上述建议后,运营商是什么,它对我来说已经足够好了!对不起,我不能评论,但我很确定OP是什么