Excel 如果声明中带有“如果”;及;
我需要这段代码的帮助:它在同一行级别比较不同列中的不同值,并执行“then语句”。但是我写的代码并没有像我预期的那样真正起作用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
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)中: