Excel中的VBA - 如果语句计数器不起作用

时间:2015-01-26 21:53:58

标签: excel vba excel-vba if-statement counter

我一直在努力让这个VBA脚本能够自动执行任务,但我无法让它工作。

基本上,我在Excel中有一个包含多列和超过1000行的大任务列表。它包含任务,分配给谁,以及它是打开还是关闭。

在列H中,它是指定给谁的,而列N是任务是打开还是关闭。

我正在尝试按姓氏搜索,如果是OPEN则向计数器添加一个。最终目标是获得一个人拥有多少个开放任务的总数。另外,N列(任务状态)中的一些单元格有额外的文本,如注释等。我确信在单元格中搜索单个单词的InStr函数可以更好地工作,但我无法弄清楚...

这是我的代码

Sub statuscount()

Dim tasksheet As Worksheet
Dim simons_count As Integer

Set tasksheet = ThisWorkbook.Sheets("tasks")

lr = tasksheet.Cells(Rows.Count, 1).End(xlUp).Row

For x = 5 to lr
    If tasksheet.Cells(x, 8) = "Simons" And tasksheet.Cells(x, 14) = "OPEN" Then
       simons_count = simons_count + 1
End If

Next x

tasksheet.Range("$O$5").Value = simons_count

End Sub

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

使用If /并在VBA中变得棘手,你最好嵌套两个if语句:

For x = 5 to lr
    If tasksheet.Cells(x, 8) = "Simons" Then
        If InStr(tasksheet.Cells(x, 14).Value, "OPEN") > 0 Then
            simons_count = simons_count + 1
        End If
    End If
Next x

答案 1 :(得分:0)

这是一个更通用的功能。插入一个模块并将以下代码放入其中。您可以像使用任何其他Excel内置函数一样使用该函数

Function LastNamecounter(lastName As String, status As String) As Long
    LastNamecounter = 0
    Dim tasksheet As Worksheet
    Set tasksheet = ThisWorkbook.Sheets("tasks")
    lr = tasksheet.Cells(Rows.Count, 1).End(xlUp).Row

    For i = 5 To lr
        If InStr(tasksheet.Cells(i, 8).Value, lastName) <> 0 And InStr(tasksheet.Cells(i, 14).Value, status) <> 0 Then
           LastNamecounter = LastNamecounter + 1
        End If
    Next i
End Function