如果是,则给出0或1-VBA

如果是,则给出0或1-VBA,vba,if-statement,Vba,If Statement,我想知道为什么这段代码根本不打印1。我知道0正在覆盖arr_bed变量。但是,如何使代码同时具有0和1?谢谢 For n = 3 To time_frame + 3 For i = 3 To 1002 If (Cells(i, "U").Value = Cells(n, "X").Value) Then arr_bed = 1 ' admission (HH)

我想知道为什么这段代码根本不打印1。我知道0正在覆盖arr_bed变量。但是,如何使代码同时具有0和1?谢谢

 For n = 3 To time_frame + 3
            For i = 3 To 1002

                     If (Cells(i, "U").Value = Cells(n, "X").Value) Then
                     arr_bed = 1  ' admission (HH)
                     Else
                     arr_bed = 0

                    Cells(n, "Y").Value = arr_bed
                    End If
                    Next i

                    Next n

您需要在找到时退出for,并将输出移到内部循环之外:

For n = 3 To time_frame + 3
    arr_bed = 0
    For i = 3 To 1002
        If (Cells(i, "U").Value = Cells(n, "X").Value) Then
            arr_bed = 1
            Exit For ' admission (HH)
        End If
    Next i
    Cells(n, "Y").Value = arr_bed
Next n

另一个注意事项是:您应该对工作表进行限定(在没有看到其余代码的情况下,我不想假设如何为您做到这一点)。

Scott。您已经删除了我需要在输出中显示0和1的else部分。当语句为真时,我还没有达到打印1的目标;当语句为假时,我还没有达到打印0的目标。@Hamidkh不,我没有,它在内部循环之前。你试过了吗?是的。它只是告诉我1不是0被打印出来。那么X列中的每个值都存在于U列中。这不是你想要的吗,因为这就是你用这样的双循环测试的东西?它根据U列中的每个值测试X3中的值,如果找到,则将1放入Y3,如果未找到,则将0放入。然后它移动到X4,并针对U列中的每个值进行测试。如果您将else放回并删除的退出,您只会得到X3与U1002的结果,您不需要第二个循环,因为它只会返回内部循环的最后一次迭代。可能需要更多解释。@Hamidkh您是否仅在X3=U3,然后在Y3中放入1或0时才尝试进行测试?