Excel宏逐个单元格在所有列的所有行中找到“BLOCKED”

时间:2016-11-11 07:22:37

标签: excel vba excel-vba

在代码的这一小部分中,虽然条件设置为true,但它转到Else语句。

Sub check()  
    Dim temp As Integer  
    Sheets("Sheet1").Select     
    For j = 18 To 29     
        For i = 2 To 39          
            If Cells(i, j).Value = "BLOCKED" Then     
                temp = temp + 1     
            Else     
                temp = 0     
            End If     
        Next     
        MsgBox temp     
    Next 
End Sub

虽然在我运行此宏的Excel工作表中存在BLOCKED,但它不会返回true。

请帮助我找到我正在做的错误。

3 个答案:

答案 0 :(得分:1)

我怀疑你实际上还没有完成你的代码,但你只是在说#34;它会转到Else"因为MsgBox正在显示0,它当前会显示(除非任何列中的最后一个单元格不是" BLOCKED")因为您正在重置{{1}的值每当你找到一个不是" BLOCKED"。

的单元格时

尝试对代码进行这些更改,看看他们是否给出了您期望的答案。

计算多少次的版本" BLOCKED"存在于每一栏:

temp

计算多少次的版本" BLOCKED"存在于整个地区:

Sub check()  
    Dim temp As Integer  
    With Sheets("Sheet1")
        For j = 18 To 29     
            temp = 0     
            For i = 2 To 39          
                If .Cells(i, j).Value = "BLOCKED" Then     
                    temp = temp + 1     
                End If     
            Next     
            MsgBox temp & " cell" & IIf(temp = 1, "", "s") & " in column " & j & IIf(temp = 1, " is", " are") & " 'BLOCKED'"
        Next 
    End With
End Sub

答案 1 :(得分:0)

请检查" BLOCKED"中是否有额外的空格。细胞。还可以尝试使用

获取单元格的文本
If Cells(i, j).Text= "BLOCKED" Then   

答案 2 :(得分:0)

碰巧“BLOCKED”并不完全是单元格的内容。 你可能想试试这个。

If instr(1, Cells(i, j), "BLOCKED")>0  Then

希望它有所帮助。