Excel VBA负IF条件

时间:2017-04-04 17:41:34

标签: excel vba excel-vba

我们有一个公司宏可以为我们清理数据 - 格式化和排列数据,但随着时间的推移,我们的数据集已经发生了变化。因此,宏现在给出“误报”,因为它是我想要排除的,但我不确定如何。阅读表格,我认为如果Else可能有用,但我似乎无法让它工作,我想知道它的一部分是因为事情是如此相似。

Macro有大约15行,与下面的行类似

If InStr(1, Cells(i, placementcol), "RES") Then Cells(i, sitecol) = "Resolution"
If InStr(1, Cells(i, placementcol), "FBK") Then Cells(i, sitecol) = "Facebook"
If InStr(1, Cells(i, placementcol), "ATH") Then Cells(i, sitecol) = "Authority"

问题是最后一个问题,其中包括“ATH”的单词被选中并在不应该的时候更改为干净数据集中的“权限”。如何告诉宏忽略以“EATH”或我想要排除的其他组合开头的placementcol中的任何内容?

2 个答案:

答案 0 :(得分:1)

您可以在If语句中添加其他条件。你可以使用

形式的东西
  

If你想要的条件

     

And Not您不想要的条件

     

And Not您不想要的其他条件......

     

Then无论你想做什么。

例如:

If InStr(1, Cells(i, placementcol), "ATH") _
  And InStr(1, Cells(i, placementcol), "EATH")<>1 Then 
    Cells(i, sitecol) = "Authority"
End If

(使用_来断开多行的语句。)

在这种情况下,InStr(...)<>1Not (InStr(...)=1)相同,但写入时间更短:)。

修改展开@ Jeeped的问题,InStr(1,...)开始搜索第一个字符,但可能在任何地方匹配。例如,InStr(1,"foo","o")=2

  • 如果您要搜索字符串中的任何位置,则可以删除1,
  • 如果您只查找开头给定文字的单元格值,请替换

    If InStr(1, Cells(), "")
    

    If InStr(Cells(), "")=1
    

顺便说一下,为避免出现问题,请查看this answer关于使用With ... .Cells()而不是不合格的top with ties {1}}。

修改2

根据您的评论,我认为您正在查找字符串中的任何位置,而不仅仅是在字符串的开头。然后尝试这样的事情,对于一个条件:

Cells

(对于其他Dim celltext As String celltext = CStr(Cells(i, placementcol).Value) If ( InStr(celltext, "ATH") >= 1 ) _ And ( InStr(celltext, "EATH") = 0 ) Then Cells(i, sitecol) = "Authority" End If 语句,您可以重复使用If - 您不必每次都重复celltextDim行。)< / p>

这有四点不同:

  1. 在每个测试周围使用括号以确保没有误解;

  2. celltext=...快速检查ATH,即字符串中的某处;

  3. >= 1快速检查EATH,即字符串中没有任何地方;以及

  4. 使用= 0确保您确实拥有celltext的真实文本结果,而不是Cells(i, placementcol)或其他值。

  5. 我还拿出了领先的Null

答案 1 :(得分:1)

以下是&#34; Like&#34; VBA:

If Cells(i, placementcol) Like "*[A-DF-Z]ATH*" Then Cells(i, sitecol) = "Authority"

*匹配任何0个或多个字符,[A-DF-Z]匹配除E以外的任何字母,因此它不会匹配包含EATH的字符串(除非它们包含多个ATH)

此外,ElseIf可用于忽略其余检查:

 If Cells(i, placementcol) Like "*FBK*" Then
     Cells(i, sitecol) = "Facebook"
 ElseIf Cells(i, placementcol) Like "*EATH*" Then
     ' ignore
 ElseIf Cells(i, placementcol) Like "*ATH*" And Then
     Cells(i, sitecol) = "Authority"
 End If