擅长:如果用

我试图检查使用VBA填充我的行和列不同的条件下的测试条件。擅长:如果用

这是我到目前为止已经试过:

For i = 1 To Lastrow 

For j = 1 To 11

If (IsEmpty(ws1.Range("C12"))) And (IsEmpty(ws1.Range("D12"))) = True Then

ws2.Cells(i, j) = ws1.Cells(i, j).Value

ElseIf (IsEmpty(ws1.Range("C12")) And (ws1.Cells(i, 8) <= ws1.Cells(12, 4))) = True Then

ws2.Cells(i, j) = ws1.Cells(i, j).Value

ElseIf (IsEmpty(ws1.Range("D12")) And (ws1.Cells(i, 8) <= ws1.Cells(12, 4))) = True Then

ws2.Cells(i, j) = ws1.Cells(i, j).Value

ElseIf (ws1.Cells(12, 3) >= ws1.Cells(i, 7) And ws1.Cells(12, 3) <= ws1.Cells(i, 8)) Or (ws1.Cells(12, 4) >= ws1.Cells(i, 7) And ws1.Cells(12, 4) <= ws1.Cells(i, 8)) Or ((ws1.Cells(12, 3) >= ws1.Cells(i, 7)) And (ws1.Cells(12, 4) <= ws1.Cells(i, 8))) Then

ws2.Cells(i, j) = ws1.Cells(i, j).Value

End If

Next j

Next i

正如你所看到的,我试了很多条件。

问题是与地方细胞C12 OR D12是空的语句。 如果D12为空,代码应该给我所有从C12开始的日期。

例如,我想,从15/05/2017开始的一切:

这就是我得到的结果是:

正如你所看到的,它不正确。 我对所有东西都进行了单独测试,并且它可以正常工作,但是当我把所有东西都放到一起时,就会出现一些错误。

此外,我真的很怀疑,如果我的If/ElseIf语句测试所有条件才能或者如果我在一个适当的方式写。 是否有另一种方法可以按照我想要的顺序运行它?

回答:

没有验证您的IF但选择声明将是更清洁:

For i = 1 To lastrow 

For j = 1 To 11

Select Case True

Case IsEmpty(ws1.Range("C12")) And IsEmpty(ws1.Range("D12")):

ws2.Cells(i, j) = ws1.Cells(i, j).Value

Case IsEmpty(ws1.Range("C12")) And ws1.Cells(i, 8) <= ws1.Cells(12, 4):

ws2.Cells(i, j) = ws1.Cells(i, j).Value

Case IsEmpty(ws1.Range("D12")) And ws1.Cells(i, 8) <= ws1.Cells(12, 4):

ws2.Cells(i, j) = ws1.Cells(i, j).Value

Case (ws1.Cells(12, 3) >= ws1.Cells(i, 7) And ws1.Cells(12, 3) <= ws1.Cells(i, 8)) Or _

(ws1.Cells(12, 4) >= ws1.Cells(i, 7) And ws1.Cells(12, 4) <= ws1.Cells(i, 8)) Or _

(ws1.Cells(12, 3) >= ws1.Cells(i, 7) And (ws1.Cells(12, 4) <= ws1.Cells(i, 8))):

ws2.Cells(i, j) = ws1.Cells(i, j).Value

Case Else:

ws2.Cells(i, j) = "No match"

End Select

Next j

Next i

以上是 擅长:如果用 的全部内容, 来源链接: utcz.com/qa/266806.html

回到顶部