Excel 如果声明中带有“如果”;及;

Excel 如果声明中带有“如果”;及;,excel,vba,if-statement,Excel,Vba,If Statement,我需要这段代码的帮助:它在同一行级别比较不同列中的不同值,并执行“then语句”。但是我写的代码并没有像我预期的那样真正起作用 Sub Z_status() Dim wsO As Worksheet Set wsO = Sheets("Sending List") Dim i As Long Dim Lastrow As Long With wsO Lastrow = Cells(Rows.Count, 5).End(xlUp).Row 'Lastrow_2 = Cell

我需要这段代码的帮助:它在同一行级别比较不同列中的不同值,并执行“then语句”。但是我写的代码并没有像我预期的那样真正起作用

Sub Z_status()

Dim wsO As Worksheet
Set wsO = Sheets("Sending List")

Dim i As Long
Dim Lastrow As Long

With wsO

    Lastrow = Cells(Rows.Count, 5).End(xlUp).Row
    'Lastrow_2 = Cells(Rows.Count, 6).End(xlUp).Row
    'Lastrow_3 = Cells(Rows.Count, 3).End(xlUp).Row
    'Lastrow_4 = Cells(Rows.Count, 8).End(xlUp).Row

    For i = Lastrow To 2 Step -1
    'For j = Lastrow_2 To 2 Step -1
    'For k = Lastrow_3 To 2 Step -1
    'For l = Lastrow_3 To 2 Step -1

    Cells(1, 7).Value = "Expected state"

    If (Cells(i, 5).Value = "MTS" Or Cells(i, 5).Value = "MTO") And (Cells(i, 6).Value = "1/1/1900" Or Cells(i, 6).Value > Date) And (Cells(i, 3).Value = 0) And (Cells(i, 8).Value = 0) Then
        Cells(i, 7).Value = "Z1"
    ElseIf (Cells(i, 5).Value = "MTS" Or Cells(i, 5).Value = "MTO") And (Cells(i, 6).Value = "1/1/1900" Or Cells(i, 6).Value > Date) And (Cells(i, 3).Value = 0) And (Cells(i, 8).Value > 0 Or Cells(i, 8).Value = 0) Then
        Cells(i, 7).Value = "Z3"
    ElseIf (Cells(i, 5).Value = "MTS" Or Cells(i, 5).Value = "MTO") And (Cells(i, 6).Value = "1/1/1900" Or Cells(i, 6).Value > Date) And (Cells(i, 3).Value > 0) And (Cells(i, 8).Value > 0 Or Cells(i, 8).Value = 0) Then
        Cells(i, 7).Value = "Z5"
    ElseIf (Cells(i, 5).Value = "Obsolete") And (Cells(i, 6).Value < Date) And (Cells(i, 3).Value > 0) And (Cells(i, 8).Value > 0 Or Cells(i, 8).Value = 0) Then
        Cells(i, 7).Value = "Z7"
    ElseIf (Cells(i, 5).Value = "Obsolete") And (Cells(i, 6).Value < Date) And (Cells(i, 3).Value = 0) And (Cells(i, 8).Value = 0) Then
        Cells(i, 7).Value = "Z9"
    End If

    Next i
   ' Next j
   ' Next k
   ' Next l

End With

End Sub
子Z_状态()
将wsO设置为工作表
设置wsO=工作表(“发送列表”)
我想我会坚持多久
最后一排一样长
与wsO
Lastrow=单元格(Rows.Count,5).End(xlUp).Row
'Lastrow_2=单元格(Rows.Count,6).End(xlUp).Row
'Lastrow_3=单元格(Rows.Count,3).End(xlUp).Row
'Lastrow_4=单元格(Rows.Count,8).End(xlUp).Row
对于i=最后一行到2步骤-1
'对于j=Lastrow_2至2步骤-1
'对于k=Lastrow_3至2步骤-1
'对于l=Lastrow_3至2步骤-1
单元格(1,7)。Value=“预期状态”
如果(单元格(i,5).Value=“MTS”或单元格(i,5).Value=“MTO”)和(单元格(i,6).Value=“1/1/1900”或单元格(i,6).Value>Date)和(单元格(i,3).Value=0)和(单元格(i,8).Value=0),则
单元格(i,7)。Value=“Z1”
ElseIf(单元格(i,5).Value=“MTS”或单元格(i,5).Value=“MTO”)和(单元格(i,6).Value=“1/1/1900”或单元格(i,6).Value>Date)和(单元格(i,3).Value=0)和(单元格(i,8).Value>0或单元格(i,8).Value=0)然后
单元格(i,7)。Value=“Z3”
ElseIf(Cells(i,5).Value=“MTS”或Cells(i,5).Value=“MTO”)和(Cells(i,6).Value=“1/1/1900”或Cells(i,6).Value>Date)和(Cells(i,3).Value>0)和(Cells(i,8).Value>0或Cells(i,8).Value=0),然后
单元格(i,7)。Value=“Z5”
ElseIf(单元格(i,5).Value=“过时”)和(单元格(i,6).Value0)和(单元格(i,8).Value>0或单元格(i,8).Value=0),然后
单元格(i,7)。Value=“Z7”
ElseIf(单元格(i,5).Value=“过时”)和(单元格(i,6).Value
1您对Z3和z5的条件是相同的

你会写作

(Cells(i, 8).Value > 0 Or Cells(i, 8).Value = 0)  

as (Cells(i, 8).Value >= 0 ) 
你的ifs可以写得更清楚

If (Cells(i, 5).Value = "MTS" Or Cells(i, 5).Value = "MTO") And (Cells(i, 6).Value = "1/1/1900" Or Cells(i, 6).Value > Date) Then
     If (Cells(i, 8).Value = 0) Then
         Cells(i, 7).Value = "Z1"
     Else
         If (Cells(i, 8).Value > 0) Then
            Cells(i, 7).Value = "Z5"
         End If
    End If
Else
    If (Cells(i, 5).Value = "Obsolete") Then
        If (Cells(i, 6).Value < Date) And (Cells(i, 8).Value >= 0) Then
            If (Cells(i, 3).Value > 0) Then
                Cells(i, 7).Value = "Z7"
            Else
                If (Cells(i, 3).Value = 0) Then
                    Cells(i, 7).Value = "Z9"
                Else
                     'This case is undefined
                End If
            End If

        Else
            'This case is undefined
        End If

    Else

       'this case is undefined

    End If
End If
如果(单元格(i,5).Value=“MTS”或单元格(i,5).Value=“MTO”)和(单元格(i,6).Value=“1/1/1900”或单元格(i,6).Value>日期),则
如果(单元格(i,8).Value=0),则
单元格(i,7)。Value=“Z1”
其他的
如果(单元格(i,8).值>0),则
单元格(i,7)。Value=“Z5”
如果结束
如果结束
其他的
如果(单元格(i,5).Value=“过时”),则
如果(单元格(i,6).Value<日期)和(单元格(i,8).Value>=0),则
如果(单元格(i,3).值>0),则
单元格(i,7)。Value=“Z7”
其他的
如果(单元格(i,3).Value=0),则
单元格(i,7)。Value=“Z9”
其他的
"这个案子没有定义,
如果结束
如果结束
其他的
"这个案子没有定义,
如果结束
其他的
"这个案子没有定义,
如果结束
如果结束

希望您能更轻松地解决此表单中的错误

无法按预期运行-请详细说明。如果这些单元格都在
wsO
上,则需要在它们前面加一个点,将它们与
With
行绑定。按现状,它们适用于活动工作表。您打算怎么做?如果您不告诉我们您的代码被授权做什么以及为什么,我们将无法帮助您。另外,请查找vba rubberduck以帮助您正确缩进代码。如果我不清楚,请原谅。如果第3、5、6、8列的第i行为真(包含某些值),则在第z列的第i行中输出z1、z3、z5、z7或z9(取决于哪个语句为真)。希望我现在明白了。作为一个额外的评论-你使用ws0的
,但以后不要使用它。您的
单元格(1,x).Value
应为
.Cells(1,x).Value
-即前面加句号。谢谢您的代码。实际上,z3和z5是不同的。在案例(单元格(i,3).Value=0)和其他(单元格(i,3).Value>0)中: